流水线Flow
选择模板
输入代码源
由于我目前用的是云效的代码仓库,所以它给我自动带过来了;选择你想要部署的分支,我用测试环境test;工作目录可以不用管,自动生成;
代码结构示例以及DockerFile
这个是我目前的示例代码,我在代码内部编辑了DockerFie文件,在接下来的构建环节会有用;同时注意本代码的jar包位置;
FROM registry.cn-hangzhou.aliyuncs.com/doubitv/jdk:1.8
MAINTAINER doubitv<doubitv@qq.com>
COPY weather.jar /usr/local/src/weather.jar
WORKDIR /usr/local/src
EXPOSE 8082
CMD java -jar weather.jar
这里的基础镜像建议使用我们之前上传到阿里镜像仓库路径,主要就是图快,保证不会因为下载镜像超时导致流程失败;
构建
上传至个人镜像仓库
删掉构建物上传步骤,使用下图所示
Docker部署
编辑部署脚本
#部署脚本会在部署组的每台机器上执行。一个典型Docker部署脚本如下:
#示例中使用的$image是您在脚本下方的变量处定义的变量(上游输出或自定义)
#docker run $image
echo $image
docker pull $image
sudo cp /usr/local/src/weather/docker-stack.yml.temp /usr/local/src/weather/docker-stack.yml
# 编辑副本运行镜像
sed -i "s#imageId#"$image"#g" /usr/local/src/weather/docker-stack.yml
cd /usr/local/src/weather/
docker stack deploy --prune --compose-file docker-stack.yml weather
# 删除多余的镜像;每次发布都会在服务器留下镜像,除了前三个全删掉;awk;
docker rmi $(sudo docker image ls|grep 'registry.cn-hangzhou.aliyuncs.com/doubitv/weather'|awk 'NR>3{print $3}')
exit 0
docker-stack.yml.temp模板撰写
version: "3.7"
services:
weather:
image: imageId
volumes:
- ./logs:/data/logs/
environment:
- spring.profiles.active=test
ports:
- 8082:8082
deploy:
mode: replicated
replicas: 1
endpoint_mode: vip
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
window: 180s
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8082"]
interval: 15s
timeout: 5s
retries: 3
start_period: 180s
networks:
swarm-overlay: {}
networks:
swarm-overlay:
external: true
什么建议使用root?因为这里的操作涉及到linux 写入操作;
例如:当前的weather文件夹里所有文件都是root或者其它用户userA新建、编辑;此时你使用与这些文件的作者不同的账号userB进行流水线Docker部署,会导致权限不足失败;