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一直报错说镜像名称无效。
我做了一些排查:
- 在工作流里加了查看原文件的步骤,看到部署模板里的镜像字段格式是对的:
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
- 部署完成后,我用命令查看实际生效的镜像名,结果发现:
gcr.io/my-project-id/pythonapp:${GITHUB_SHA}
${GITHUB_SHA}被完完全全当成了字面字符串替换进去,根本没有解析成实际的GitHub提交SHA值!
现在我有几个疑问想请教大家:
- 像我这样在GitHub Actions的run步骤里使用sed命令是可行的吗?
- 有没有什么办法可以调试这个sed命令的执行过程,找出变量没被正确替换的原因?
- 有没有更可靠的方式来替换部署文件里的变量,避免这种问题?
备注:内容来源于stack exchange,提问作者bionics parv
相关产品推荐
相关产品推荐

