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的输出参数,具体步骤如下:
- 在构建步骤中添加
id标识,启用输出参数; - 在部署步骤中引用构建步骤输出的镜像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
相关产品推荐
相关产品推荐

