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

GitHub Actions中sed命令未正确替换GKE部署文件变量的问题排查求助

GitHub Actions中sed命令未正确替换GKE部署文件变量的问题排查求助

大家好,我最近在配置GitHub Actions部署到GKE的工作流时遇到了一个棘手的问题,想请各位帮忙排查下~

先跟大家说下我的工作流核心步骤:

- name: Build Docker image in prod
  run: docker build . --tag gcr.io/${{ secrets.GCP_PROJECT_ID }}/pythonapp:${GITHUB_SHA}

# Generates an execution plan for Terraform
- name: Push Docker image in prod
  run: docker push gcr.io/${{ secrets.GCP_PROJECT_ID }}/pythonapp:${GITHUB_SHA}

- name: Connect to GKE
  uses: google-github-actions/get-gke-credentials@v0
  with:
    cluster_name: ${{ secrets.CLUSTER }}
    location: ${{ secrets.CLUSTER_ZONE }}

- name: Lock image version in deployment.yaml
  run: sed -i 's/PROJECT_ID/${{ secrets.GCP_PROJECT_ID }}/g; s/COMMIT_TAG/${GITHUB_SHA}/g' applications/app/app.yaml

- name: Deploy to GKE
  run: kubectl apply -f applications/app/app.yaml

目前构建和推送镜像的步骤都是正常的,我能在GCP容器仓库里看到带GitHub自动生成SHA值的镜像。但问题出在Lock image version这个步骤的sed命令上:虽然步骤显示执行成功,但部署到GKE后,pod一直报错说镜像名称无效。

我做了一些排查:

  1. 在工作流里加了查看原文件的步骤,看到部署模板里的镜像字段格式是对的:
spec:
  replicas: 1
  selector:
    matchLabels:
      app: app
  template:
    metadata:
      labels:
        app: app
    spec:
      containers:
      - name: app
        image: gcr.io/***/pythonapp:$***GITHUB_SHA***
        ports:
        - containerPort: 5000
        imagePullPolicy: Always
  1. 部署完成后,我用命令查看实际生效的镜像名,结果发现:
gcr.io/my-project-id/pythonapp:${GITHUB_SHA}

${GITHUB_SHA}被完完全全当成了字面字符串替换进去,根本没有解析成实际的GitHub提交SHA值!

现在我有几个疑问想请教大家:

  • 像我这样在GitHub Actions的run步骤里使用sed命令是可行的吗?
  • 有没有什么办法可以调试这个sed命令的执行过程,找出变量没被正确替换的原因?
  • 有没有更可靠的方式来替换部署文件里的变量,避免这种问题?

备注:内容来源于stack exchange,提问作者bionics parv

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 10:30:29