Skip to content

CoderIvan/aliyun-docker-trigger

Repository files navigation

阿里云容器服务触发器

Node.js CI

需要

  1. ubuntu
  2. docker

部署服务

  1. clone该仓库,创建镜像
  2. 使用Docker部署该镜像 image
  3. 挂载/var/run/docker.sock至容器中的/var/run/docker.sock,使用容器中的Docker可以控制宿主机的Docker
  4. 挂载~/.docker/config.json至容器中的/root/.docker/config.json,使用容器拥有pull阿里镜像的权限
  5. 挂载./dockerfiles至容器中的/app/dockerfiles,告诉容器中的服务该维护哪些容器

环境变量配置

image

EMAIL_TRANSPORT_USER: 发送邮件的邮箱名 EMAIL_TRANSPORT_PASS: 发送邮件的邮箱密码 EMAIL_SUBSCRIBERS: 默认订阅者(多个时,以,分隔)

配置阿里云的触发器

让镜像随代码变更自动构建

image

  1. 当对应分支有代码提交后会自动触发构建
  2. 以上图为例,branch:mqtt-broker为测试网版本的分支,每次提交代码会自动触发构建,并创建test版本的镜像

为镜像添加触发器

image image

  1. 配置触发器URL,这是测试网暴露的aliyun-docker-trigger服务
  2. 触发方式选择Tag触发,Tag选择你的部署的镜像版本,以上一点自动构建为例,镜像版本为test,随着上面每完成一次test版本镜像的build完成而触发

配置aliyun-docker-trigger的触发器

配置dockerfiles文件夹

image

  1. 在dockerfiles下创建层级文件夹
  2. 文件夹名对应为镜像名TAG名,例如参考上面的步骤,我需要创建mqtt-broker/test
  3. 在上一步的文件夹下创建docker-compose.ymal文件

配置Email接受部署成功的邮件提示

image image

触发原理

  1. aliyun触发器触发后,会给指定的地址(以上为例:http://www.dbjtech.com:8000/)发送请求,并携带镜像名(以上为例:mqtt-broker)与Tag名(以上为例:test)
  2. aliyun-docker-trigger服务,镜像名(以上为例:mqtt-broker)与Tag名(以上为例:test),找dockerfiles是否有该文件目录(以上为例:找mqtt-broker/test文件夹是否存在)
  3. 如果存在,则获取docker-compose.yml文件
  4. 执行docker pull registry.cn-qingdao.aliyuncs.com/dbjtech/${name}:${tag}
  5. 执行docker stack deploy -c ${file} ${name} ${tag} --with-registry-auth
  6. 检查email.js是否存在,存在则发送邮件