And*_*rds 2 google-app-engine app.yaml docker google-cloud-platform google-cloud-build
所以我有一个CloudBuild触发器来构建我的cloudbuild.yaml文件,一切都很好。我还使用gcloud构建器运行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
Run Code Online (Sandbox Code Playgroud)
如您所见,我正在使用所有GCP资源默认具有的ENV变量($PROJECT_ID例如)。在docker命令中,我将其作为参数传递,因此可以ARG在dockerfile中使用该命令:
ARG PROJECT
FROM gcr.io/${PROJECT}/swift:4.2 as builder
WORKDIR /App
#Other commands....
Run Code Online (Sandbox Code Playgroud)
现在,所有这些都可以正常工作,并且我能够构建自己的映像等。现在,我想在最后一步中将其部署到App Engine。唯一的问题是,我使用相同的Dockerfile来使用swift:4.2仅位于我的GoogleContainerRegistry中的基本映像,因此我需要$PROJECT_ID我的项目将其拉出。
我的问题是:有什么方法可以让AppEngine构建环境在部署时将参数传递给构建我的映像的docker构建?我有一个app.yaml文件,并且我知道有一个env_variables:属性,而且我知道我可以使用docker ARG或ENV命令(不记得是哪个)将我$PROJECT_ID放入Dockerfile中。但唯一的问题是,据我所知,AppEngine尚未定义该Property。我能想到的唯一的另一件事是到echo了$PROJECT_ID从云构建步骤的结束app.yaml文件。但是,如果有一种更清洁的方法,我很想听听。谢谢!
我想我已经找到了满足我需求的解决方案。
gcloud app deploy有一个image-url可以指定已经构建的映像而不是重建Dockerfile的标志。所以我最终选择了这个cloudbuild.yaml
- name: 'gcr.io/cloud-builders/gcloud'
args: ['app', 'deploy', '--image-url', 'gcr.io/$PROJECT_ID/$BRANCH_NAME:$SHORT_SHA']
Run Code Online (Sandbox Code Playgroud)
基本上指向我刚刚构建并推送到容器注册表的映像。
| 归档时间: |
|
| 查看次数: |
669 次 |
| 最近记录: |