所以我有一个 CloudBuild 触发器来构建我的cloudbuild.yaml
文件,这一切都很好。我还使用 gcloud builder 运行 docker 命令将 ENV 变量传递给我的Dockerfile
. 例如:
steps:
- name: 'gcr.io/$PROJECT_ID/swift:4.2'
args: ['test']
id: 'Running unit tests'
- name: 'gcr.io/cloud-builders/docker'
args: ['build','--build-arg', 'PROJECT=$PROJECT_ID','-t', 'us.gcr.io/$PROJECT_ID/$BRANCH_NAME:$SHORT_SHA', '.']
id: 'Building docker image'
- name: 'gcr.io/cloud-builders/docker'
args: ["push", "us.gcr.io/$PROJECT_ID/$BRANCH_NAME:$SHORT_SHA"]
id: 'Pushing built image to registry'
- name: 'gcr.io/cloud-builders/gcloud'
args: ['app', 'deploy']
id: 'Deploying to AppEngine'
timeout: 1800s # 30 minute timeout
如您所见,我使用的是所有 GCP 资源默认具有的 ENV 变量。($PROJECT_ID
例如)。在 docker 命令中,我将它作为参数传递,因此我可以ARG
在 dockerfile 中使用该命令:
ARG PROJECT
FROM gcr.io/${PROJECT}/swift:4.2 as builder
WORKDIR /App
#Other commands....
现在所有这些工作正常,我可以构建我的图像等。现在我想在最后一步部署到应用程序引擎。唯一的问题是我使用相同的 Dockerfile 来使用swift:4.2
仅位于我的 GoogleContainerRegistry 中的基本映像,所以我需要$PROJECT_ID
我的项目来提取它。
我的问题是:有没有办法让 AppEngine 构建环境在部署时将参数传递给构建我的映像的 docker build?我有一个app.yaml
文件,我知道有一个env_variables:
属性,我知道我可以使用 dockerARG
或ENV
命令(不记得是哪个)来获取我$PROJECT_ID
的 Dockerfile。但唯一的问题是据我所知,AppEngine 没有定义该属性。我能想到的唯一另一件事是echo
从$PROJECT_ID
Cloud Builder 步骤到app.yaml
文件末尾。但如果有更清洁的方法,我很想听听。谢谢!