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

使用GitHub Action部署Cloud Run时日期标签镜像找不到问题

问题分析

你遇到的核心问题是GitHub Actions的env字段不会执行Shell命令:

  • 你在env里定义IMAGE_TAG: $(date "+%F-%H%M"),这个变量的实际值是字符串$(date "+%F-%H%M"),而非执行date命令生成的日期字符串。
  • 构建阶段的run脚本在Shell环境中执行,所以${{ env.IMAGE_TAG }}会被Shell解析为实际日期,推送的镜像标签是正确的。
  • 但部署阶段调用google-github-actions/deploy-cloudrun时,变量被原样传递给gcloud命令,导致镜像地址变成us-central1-docker.pkg.dev/***/samples/static-site:$(date "+%F-%H%M"),这个标签的镜像根本不存在,自然报错。

另外,你的deploy1步骤里的image字段末尾多了一个多余的单引号,这也是语法错误。

解决方案

要让IMAGE_TAG成为实际的日期字符串,需要在Shell步骤中生成并注入环境变量,而非直接在env字段里写Shell命令。具体步骤如下:

1. 移除env中的IMAGE_TAG定义

删除原配置中env块里的IMAGE_TAG: $(date "+%F-%H%M")行。

2. 添加步骤生成并设置IMAGE_TAG环境变量

在构建镜像的步骤之前,新增一个步骤来生成日期标签并写入GitHub Actions的环境变量:

- name: Generate image tag
  run: |
    echo "IMAGE_TAG=$(date "+%F-%H%M")" >> $GITHUB_ENV

3. 修正deploy1步骤的语法错误

去掉image字段末尾多余的单引号,正确写法应为:

image: ${{ env.GAR_LOCATION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.REPOSITORY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}

4. 统一构建步骤中的镜像地址(可选但推荐)

构建步骤里的docker tag命令硬编码了us-central1-docker.pkg.dev和${{ secrets.GKE_PROJECT }},建议改成使用env变量,保持一致性:

docker tag ${{ env.GAR_LOCATION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.REPOSITORY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} \
  ${{ env.GAR_LOCATION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.REPOSITORY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}
修改后的完整配置示例
name: Build and Deploy to Cloud Run
on:
  push:
    branches: ["master"]
  workflow_dispatch:

env:
  PROJECT_ID: ${{ secrets.GKE_PROJECT }}
  REPOSITORY: samples                       # Add your repository name here.
  GAR_LOCATION: xxxx                        # Add your repository region name here.
  IMAGE_NAME: static-site                   # Add your image name here.

jobs:
  build-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Generate image tag
        run: |
          echo "IMAGE_TAG=$(date "+%F-%H%M")" >> $GITHUB_ENV

      ### Build and Push the Docker image to Google Artifact Registry (GAR) ###
      - name: Build and Push to Artifact Registry
        run: |-
          docker build -t ${{ env.GAR_LOCATION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.REPOSITORY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} .
          docker tag ${{ env.GAR_LOCATION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.REPOSITORY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} \
            ${{ env.GAR_LOCATION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.REPOSITORY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}                                                                                                
          docker push ${{ env.GAR_LOCATION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.REPOSITORY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}

      ### Deploy to Cloud RUN (hello-cloud-run) ###
      - name: Deploy to Cloud RUN (hello-cloud-run) 
        id: 'deploy1'
        uses: 'google-github-actions/deploy-cloudrun@v2'
        with:
          service: 'hello-cloud-run'
          region: 'asia-south1'
          flags: '--port=80 --allow-unauthenticated'
          image: ${{ env.GAR_LOCATION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.REPOSITORY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}
        
      - name: 'Show output'
        run: echo ${{ steps.deploy1.outputs.url }}

      ### Deploy to Cloud RUN (ui-services) ###
      - name: Deploy to Cloud RUN (ui-services)
        id: 'deploy2'
        uses: 'google-github-actions/deploy-cloudrun@v2'
        with:
          service: 'ui-services'
          region: 'europe-west2'
          flags: '--port=80 --allow-unauthenticated'
          image: ${{ env.GAR_LOCATION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.REPOSITORY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}

      - name: 'Show output'
        run: echo ${{ steps.deploy2.outputs.url }}

注意:原配置中缺少jobs和runs-on的定义,这是GitHub Actions的必填项,已补充完整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 00:23:11