GitHub Actions推送Docker镜像到仓库后如何获取SHA值用于K8s部署
问题解答
核心问题答复
github.sha 是 GitHub Actions 内置的全局默认变量,你不需要额外手动设置,也不需要导出为环境变量,整个工作流的所有步骤都可以直接通过 ${{ github.sha }} 调用,它的值是触发当前工作流的 Git 提交对应的 40 位完整哈希值。
现有配置的潜在问题修正
你当前的配置存在两处不匹配的问题,直接运行会找不到镜像:
- 你在部署步骤中使用
${{ github.repository }}作为镜像前缀,这个变量是你的 GitHub 代码仓库地址,和你推送到阿里云的镜像仓库地址不匹配 - 构建步骤开启了
tag_with_sha: true,该参数生成的镜像标签格式为sha-<Git SHA前7位>,和github.sha的40位完整哈希值不匹配
方案1:直接用完整SHA作为镜像标签(推荐)
修改构建步骤配置,取消 tag_with_sha 参数,手动指定用 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 }} repository: reddwarf-pro/dolphin-post path: 'dolphin-post'
对应的部署步骤调整为:
- name: deploy to cluster uses: steebchen/kubectl@v2.0.0 with: config: ${{ secrets.KUBE_CONFIG_DATA }} command: set image --record deployment/my-app container=${{ secrets.ALI_DOCKER_HUB_REGISTRY }}/reddwarf-pro/dolphin-post:${{ github.sha }} - name: verify deployment uses: steebchen/kubectl@v2.0.0 with: config: ${{ secrets.KUBE_CONFIG_DATA }} version: v1.21.0 command: rollout status deployment/my-app
方案2:保留原有打标规则
如果要保留 tag_with_sha: true 的标签格式,只需要调整部署步骤的镜像标签写法,截取SHA前7位拼接即可:
- name: deploy to cluster uses: steebchen/kubectl@v2.0.0 with: config: ${{ secrets.KUBE_CONFIG_DATA }} command: set image --record deployment/my-app container=${{ secrets.ALI_DOCKER_HUB_REGISTRY }}/reddwarf-pro/dolphin-post:sha-${{ github.sha.substring(0,7) }}
内容的提问来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

