Skip to content

使用GitHub Action自动构建和推送Docker镜像

Info

作者:Vincent,发布于2021-11-20,阅读时间:约3分钟,微信公众号文章链接:

1 前言

在这篇文章里,我们将介绍如何使用GitHub Action自动推送Docker镜像到镜像仓库,大大简化构建镜像、推送镜像的繁琐步骤!我们之前介绍了很多GitHub的酷炫功能,为了方便理解这篇文章的内容,建议阅读之前的文章回顾基本的GitHub操作知识,特别是GitHub Action:

同时,如果需要理解Docker的知识,可以查看Tina老师的佳作:

2 配置镜像仓库

这里以阿里云的镜像容器服务为例做演示,其他的镜像仓库原理类似,可以触类旁通。首先登录阿里云镜像容器服务,进行如下操作:

  • 创建命名空间(namespace)作为镜像仓库的合集,可以以公司或组织命名,如我们使用bullettech_services
  • 创建镜像仓库(registry)作为镜像的合集,可以存储不同版本的镜像到仓库中。
镜像仓库

3 配置GitHub Action

3.1 配置密码

在GitHub仓库里设置密码,用于登录镜像容器服务。可以在仓库设置里找到密码,然后将镜像容器服务的账号和密码存储起来。

存储镜像容器服务的账号和密码

3.2 创建工作流

首先在.github/workflows目录下创建一个工作流,例如ci.yml,然后根据注释理解命令,并根据项目情况修改。

name: actions

on: [push, pull_request] # 触发事件

jobs:
  bt-product-release:
    if: ${{ github.ref == 'refs/heads/main' }}  # 检测main分支是否有更新
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2 # pull代码到运行服务器上
    - name: Login to Aliyun Container Registry (ACR)
      uses: aliyun/acr-login@v1 # 使用阿里云镜像服务action
      with:
        login-server: registry.cn-shanghai.aliyuncs.com # 务必正确填写镜像容器服务的登录地址
        region-id: cn-shanghai # 务必正确填写镜像容器服务的登录地址
        username: "${{ secrets.REGISTRY_USERNAME }}" # 引用GitHub repo设置的镜像容器服务用户名
        password: "${{ secrets.REGISTRY_PASSWORD }}" # 引用GitHub repo设置的镜像容器服务密码
    - name: Build and Push Docker Image
      env:
        IMAGE_TAG: ${{ github.sha }} # 用于标记容器版本号
      run: |
        docker build -t registry.cn-shanghai.aliyuncs.com/bullettech_services/app:$IMAGE_TAG .
        docker push registry.cn-shanghai.aliyuncs.com/bullettech_services/app:$IMAGE_TAG

这样每次在main分支更新时,GitHub会基于本次更新的代码构建镜像、并将镜像推送到指定的镜像仓库(注意版本):

镜像

4 总结

这套高效的工作流节约了许多时间,而且避免了许多手动操作时易发生的错误,GitHub Action真香啊!

希望这次的分享对你有帮助,欢迎在评论区留言讨论!


Viewed times

Comments