Skip to content
﹌﹋文章目录﹋﹌

Docker + GitHub Actions 持续集成工作流

前言

本文讲解如何使用 GitHub Actions 配合 Docker 进行开发部署过程中的持续集成工作流。

这里默认您已编写好项目的 Dockerfile 文件,Dockerfile 的写法可通过我前面的文章进行学习:Docker 快速部署 Node express 项目

至于为什么使用 GitHub Actions,这里引用官方:

在 GitHub Actions 的仓库中自动化、自定义和执行软件开发工作流程。 您可以发现、创建和共享操作以执行您喜欢的任何作业(包括 CI/CD),并将操作合并到完全自定义的工作流程中。

手动构建镜像并推送到阿里云

我们目前的工作流是 更新代码 + 构建镜像 + 提交镜像 + 服务器pull镜像 + 启动容器。 GitHub Actions 并不推荐操作服务器内容,所以这里我们也分为两部分工作,前一部分为 更新代码 + 构建镜像 + 提交镜像。这里先看看 手动构建镜像并推送到阿里云 是怎样操作的:

sh
# 登录阿里云 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 文件。

7701626086152_.pic.jpg

也可以在IDE中 项目根目录下 手动创建 .github/workflows 目录,新建 name.yml 文件(name随意名字,可以工作流功能取名)。

WeChat529ef8045faf5b1b1bfcbf3e9b1f0305.png

2、选择工作流模板

与 Docker 有关,在 git marketplace 中 查找 docker actions,找到了一项非常符合我们的工作流模板 Build and push Docker images

7711626086271_.pic_hd.jpg

进入模板详情复制代码到 name.yml 文件中,并加以修改。

yaml
# 工作流程的名称
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 中查看日志。

7731626088531_.pic.jpg

绿色√标记说明已完成并且成功。

部署到服务器

进入服务器终端,启动 Docker 容器

sh
# 停止并移除正在运行的容器
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