Docker + GitHub Actions 持续集成工作流
前言
本文讲解如何使用 GitHub Actions
配合 Docker
进行开发部署过程中的持续集成工作流。
这里默认您已编写好项目的 Dockerfile
文件,Dockerfile 的写法可通过我前面的文章进行学习:Docker 快速部署 Node express 项目
至于为什么使用 GitHub Actions,这里引用官方:
在 GitHub Actions 的仓库中自动化、自定义和执行软件开发工作流程。 您可以发现、创建和共享操作以执行您喜欢的任何作业(包括 CI/CD),并将操作合并到完全自定义的工作流程中。
手动构建镜像并推送到阿里云
我们目前的工作流是 更新代码 + 构建镜像 + 提交镜像 + 服务器pull镜像 + 启动容器
。 GitHub Actions 并不推荐操作服务器内容,所以这里我们也分为两部分工作,前一部分为 更新代码 + 构建镜像 + 提交镜像
。这里先看看 手动构建镜像并推送到阿里云 是怎样操作的:
# 登录阿里云 Docker Registry
docker login --username=**** registry.cn-shenzhen.aliyuncs.com
# 根据项目的 Dockerfile 文件构建镜像
docker build -t registry.cn-shenzhen.aliyuncs.com/xxxx/image-name:v1 .
# 将镜像推送到Registry
docker push registry.cn-shenzhen.aliyuncs.com/xxxx/image-name:v1
使用 GitHub Actions 代替
以上步骤虽然也不复杂,不过当提交和推送代码到git仓库后需要手动操作。
使用 GitHub Actions 只需要第一次设置,就可以在每次推送代码到git仓库的时候 自动构建和推送最新镜像。
1、创建Actions文件
当然,GitHub Actions 基于 git 仓库。 在自己项目的 git 仓库中,选择 Actions 菜单点击 set up a workflow yourself ->
自动创建 yml 文件。
也可以在IDE中 项目根目录下 手动创建 .github/workflows
目录,新建 name.yml 文件(name随意名字,可以工作流功能取名)。
2、选择工作流模板
与 Docker 有关,在 git marketplace 中 查找 docker actions,找到了一项非常符合我们的工作流模板 Build and push Docker images
进入模板详情复制代码到 name.yml 文件中,并加以修改。
# 工作流程的名称
name: Docker Image CI
# 触发条件:当branch触发push(push,merge Pull Request),且 tag 为 image.xxx 时触发工作流。
on:
push:
tags: image.*
# 工作流程,可包含多个作业
jobs:
# 作业1名称
build:
# 指定的运行器环境
runs-on: ubuntu-latest
# 作业包含一系列任务,称为 steps
steps:
# 检出当前代码(触发工作流时的commits)
- name: Checkout
uses: actions/checkout@v2
# setup-qemu 如果您想使用 QEMU 添加仿真支持以便能够针对更多平台进行构建,则 action 会很有用
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
# setup-buildxaction 将默认使用docker-container 构建器驱动程序创建和引导构建器。非必需
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
# 登录到阿里云容器镜像服务
- name: Login to Ali Docker
uses: docker/login-action@v1
# 配置登录信息,secrets 变量在 github settings -> secrets 中设置
with:
registry: ${{ secrets.ALI_DOCKER_HUB_REGISTRY }}
username: ${{ secrets.ALI_DOCKER_HUB_USN }}
password: ${{ secrets.ALI_DOCKER_HUB_PWD }}
# 构建镜像并上传到阿里云容器镜像仓库 (自行百度创建自己的镜像仓库)
- name: Build and push
id: docker_build
uses: docker/build-push-action@v2
with:
context: .
push: true
tags: registry.cn-shenzhen.aliyuncs.com/xxxx/image-name:v1
查看工作流日志
工作流触发后,可在 GitHub Actions 中查看日志。
绿色√标记说明已完成并且成功。
部署到服务器
进入服务器终端,启动 Docker 容器
# 停止并移除正在运行的容器
docker stop docker-name
docker rm docker-name
# 拉取最新的镜像
docker pull registry.cn-shenzhen.aliyuncs.com/xxxx/image-name:v1
# 启动容器 (这里以node项目为例,不同镜像启动方式不同,参照各自使用的基础镜像文档)
docker run -d -p 3000:3000 --name=docker-name registry.cn-shenzhen.aliyuncs.com/xxxx/image-name:v1
致谢
GitHub Actions 文档:https://docs.github.com/cn/actions/reference/workflow-syntax-for-github-actions
Benny技术博客干货满满:www.benny.wiki
转载声明: 请注明作者,注明原文链接,有疑问致邮 kingwyh1993@163.com