使用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