You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions升级docker/build-push-action至v2后镜像SHA获取异常问题

问题:docker/build-push-action@v2升级后镜像SHA不匹配的问题

在旧版GitHub Actions中使用docker/build-push-action@v1构建推送镜像后,部署步骤可以通过${{ github.sha }}获取正确的镜像标识,代码示例如下:

- name: Build image push to aliyun
  uses: docker/build-push-action@v1
  with:
    registry: ${{ secrets.ALI_DOCKER_HUB_REGISTRY }}
    username: ${{ secrets.ALIYUN_DOCKER_REPO_USER_NAME }}
    password: ${{ secrets.ALIYUN_DOCKER_REPO_USER_PASSWORD }}
    tags: ${{ github.sha }}
    file: Dockerfile
    repository: reddwarf-pro/pydolphin
    path: '.'

- name: deploy to cluster
  uses: steebchen/kubectl@v2.0.0
  with:
    config: ${{ secrets.KUBE_CONFIG_DATA }}
    command: set image --record deployment/pydolphin-service pydolphin-service=registry.cn-hangzhou.aliyuncs.com/reddwarf-pro/pydolphin:${{ github.sha }} -n reddwarf-pro

升级到docker/build-push-action@v2后,部署步骤无法获取构建生成的正确镜像SHA:构建步骤日志显示镜像ID为sha256:d50f982905da16a31b64fa91ef9955c4c2e1019974cddd7a6c7b05cfe0789200,但部署步骤使用的是7ad5bdb63555eac101ffc3711ba82de5bb52d581(即github.sha对应的Git提交哈希)。

问题原因

  • docker/build-push-action@v1默认会将github.sha作为镜像的内容哈希标签,镜像实际的SHA值和Git提交哈希强制绑定;但v2版本的参数逻辑发生变化,tags参数仅用于设置镜像的自定义标签,不会将标签值与镜像内容SHA关联。
  • 当前配置中,${{ github.sha }}只是给镜像添加的一个自定义标签,和镜像实际生成的内容SHA(镜像ID)是两个独立概念。部署步骤引用github.sha时,实际调用的是Git提交哈希对应的标签,而非镜像内容的真实SHA值,当同一Git提交下重新构建镜像(内容变化),就会出现标识不匹配的情况。

修复方案

要获取docker/build-push-action@v2构建生成的镜像实际SHA,需利用该action的输出参数,具体步骤如下:

  1. 在构建步骤中添加id标识,启用输出参数;
  2. 在部署步骤中引用构建步骤输出的镜像SHA值。

修改后的代码示例:

- name: Build image push to aliyun
  uses: docker/build-push-action@v2
  id: build-image
  with:
    registry: ${{ secrets.ALI_DOCKER_HUB_REGISTRY }}
    username: ${{ secrets.ALIYUN_DOCKER_REPO_USER_NAME }}
    password: ${{ secrets.ALIYUN_DOCKER_REPO_USER_PASSWORD }}
    tags: ${{ github.sha }}
    dockerfile: Dockerfile
    repository: reddwarf-pro/chat-server
    path: '.'

- name: deploy to cluster
  uses: steebchen/kubectl@v2.0.0
  with:
    config: ${{ secrets.KUBE_CONFIG_DATA }}
    command: set image --record deployment/chat-server-service chat-server-service=registry.cn-hongkong.aliyuncs.com/reddwarf-pro/chat-server:${{ steps.build-image.outputs.digest }} -n reddwarf-pro

说明:

  • steps.build-image.outputs.digest是docker/build-push-action@v2输出的镜像内容SHA(格式为sha256:xxxxxx),可直接用于镜像引用;
  • 若需保留github.sha作为标签,也可以同时使用标签和digest,例如registry.cn-hongkong.aliyuncs.com/reddwarf-pro/chat-server:${{ github.sha }}@${{ steps.build-image.outputs.digest }},既保留标签标识,又能确保引用到正确的镜像内容。

内容的提问来源于stack exchange,提问作者spark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 17:52:43