如何跨Google Cloudbuild中的后续构建步骤(包括Docker步骤)访问内容

时间:2020-09-29 02:24:52

标签: docker google-cloud-platform google-cloud-build

在Google Cloud Platform中,在多阶段的CloudBuild过程中,可以使用共享的/workspace从一个构建步骤到下一个构建步骤访问内容。 例如,以下cloudbuild.yaml将打印“ hello world”,从第一步开始就可以访问文本hello。

steps:
  - name: gcr.io/cloud-builders/gcloud
    entrypoint: 'bash'
    args: [ '-c', " echo world > sample.txt" ]
  - name: gcr.io/cloud-builders/gcloud
    entrypoint: 'bash'
    args: [ '-c', "echo hello $( < sample.txt)" ]

但是,当涉及到在docker构建步骤中访问此内容时,此方法似乎不起作用。在docker build步骤中似乎没有一种访问文件的方法。

以下步骤作为上述步骤之后的第三步执行时,将执行Dockerfile,但似乎没有使sample.txt文件可用于其中的命令。

  # Build the container image
  - name: gcr.io/cloud-builders/docker
    args: ['build',
           '-t', 'repositoryname:latest',
           '.']

我尝试了以下操作:

  • 在容器内查找名为工作区的默认目录,无济于事。
  • 创建一个跨所有步骤共享的自定义卷(该自定义卷在Dockerfile范围内似乎不可访问。

cloudbuild中是否可以通过一系列步骤(包括docker步骤)逐步构建内容?如果是这样,怎么办?

更新

实际上,这些文件确实保留在工作区环境中。我的问题是无法按以下方式在build命令中使用文件的内容。

  # Build the container image
  - name: gcr.io/cloud-builders/docker
    args: ['build',
           '--build-arg', 'GITHUB_AUTH_TOKEN=$( < sample.txt)',
           '-t', '$_REPO_PATH/$_PROJECT_ID/$_REPO_NAME:$_TAG_NAME',
           '.']

在第一步中,我实际上是使用gcloud从机密管理器中获取机密,然后我想将此作为参数传递给docker构建过程。 我无法使上述构建步骤正常工作,然后读取命令替换对docker参数无效吗?

1 个答案:

答案 0 :(得分:1)

问题来自args解释。这样写,没有任何arg评估。像这样使用脚本模式

  # Build the container image
  - name: gcr.io/cloud-builders/docker
    entrypoint: "bash"
    args: 
      - "-c"
      - |
          docker build --build-arg GITHUB_AUTH_TOKEN=$( < sample.txt) -t $_REPO_PATH/$_PROJECT_ID/$_REPO_NAME:$_TAG_NAME .