docker - 来自 Google Cloud Build Dockerfile 的 Google AppEngine ENV 变量

标签 docker google-app-engine google-cloud-platform app.yaml 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

正如您所见,我使用的是所有 GCP 资源默认具有的 ENV 变量。(例如 $PROJECT_ID)。在 docker 命令中,我将其作为参数传递,以便我可以在 dockerfile 中使用 ARG 命令:

ARG PROJECT
FROM gcr.io/${PROJECT}/swift:4.2 as builder
WORKDIR /App
#Other commands....

现在所有这些都工作正常,我可以构建我的图像等。现在我想在最后一步中部署到应用程序引擎。 唯一的问题是,我使用相同的 Dockerfile 来使用仅位于 GoogleContainerRegistry 中的 swift:4.2 基础镜像,因此我需要 $PROJECT_ID 来拉取我的项目那个。

我的问题是:有什么方法可以让 AppEngine 构建环境将参数传递给在部署时构建我的镜像的 docker 构建吗?我有一个 app.yaml 文件,并且我知道有一个 env_variables: 属性,并且我知道我可以使用 docker ARGENV 命令(不记得是哪一个)将我的 $PROJECT_ID 放入我的 Dockerfile 中。但据我所知,唯一的问题是 AppEngine 没有定义该属性。我唯一能想到的就是将 Cloud Builder 步骤中的 $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']

基本上指向我刚刚构建并推送到容器注册表的镜像。

关于docker - 来自 Google Cloud Build Dockerfile 的 Google AppEngine ENV 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52064804/

相关文章:

docker - 为什么不以分离模式执行Docker入口点脚本?

macos - Docker for Mac 虚拟机 IP

linux - docker build 无法连接到 http 服务器,即使它可以在命令行上访问

python - Google App Engine for Python 中的引用文献列表

google-cloud-platform - 如何授予服务帐户访问特定 key 的权限?

google-cloud-platform - 您可以将 Google Cloud Web 控制台登录限制在某个 IP 地址范围内吗?

machine-learning - 谷歌云作业提交培训陷入困境

linux - libgit2 alpine linux docker 错误

google-app-engine - 是否可以防止 Google App Engine 上的 DoSing?

android - 根据 Android 应用程序版本使用特定的应用程序引擎版本