GitHub Actions如何为Docker镜像同时打版本号与latest标签
方案说明
不需要引入额外第三方Action、不需要重复构建镜像,直接通过原生docker命令给单次构建的镜像绑定多个标签即可,全程无额外CI开销,完全匹配轻量化CI/CD的需求:
- 构建阶段执行一次
docker build,同时给镜像打上自增版本号、latest两个标签 - 登录Docker Hub的原有逻辑完全不需要改动
- 推送阶段依次推送两个标签到仓库即可
- 保留的自增版本号标签还可以用于异常时快速回滚,不会因为只有latest标签找不到历史版本
修正后的完整工作流配置
已经同步修正了原配置里steps层级的缩进错误,直接替换原有.github/workflows/路径下的CI文件即可使用:
name: Docker Image CI on: push: branches: [ main ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Build the Docker image run: | # 单次构建同时绑定两个标签,无额外构建开销 docker build . \ -t me/myrepo:${{github.run_number}} \ -t me/myrepo:latest - name: Login to Docker Hub env: DOCKER_USER: ${{ secrets.DOCKER_USER }} DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} run: docker login -u $DOCKER_USER -p $DOCKER_PASSWORD - name: Push tags to Docker Hub run: | # 依次推送两个标签到仓库 docker push me/myrepo:${{github.run_number}} docker push me/myrepo:latest
补充说明
- 整个调整没有新增依赖、没有增加镜像构建时长,两个标签指向同一个镜像层,Docker Hub存储也不会产生额外的冗余副本
- 配置生效后,每次main分支提交都会自动推送带自增run号的可追溯版本,同时更新
latest标签,Watchtower检测到latest标签的镜像哈希变化就会自动拉取更新服务,不需要修改Watchtower的默认配置 - 如果需要进一步加快Watchtower的更新频率,可以在Watchtower启动参数里加
--poll-interval "30s"把轮询间隔改成30秒,非核心业务场景下足够稳定
内容的提问来源于stack exchange,提问作者feder
相关产品推荐
相关产品推荐

