Administrator
发布于 2021-11-25 / 13 阅读
0
0

2、流水线 Flow


  • 流水线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部署,会导致权限不足失败;


评论