首页 > 解决方案 > 为什么 google cloud build 对于这两个命令的运行方式不同?

问题描述

我们运行这两个命令(第一个是异步的,另一个是同步运行的)

#async BUT does something funky and doesn't run the Dockerfile image as-is
gcloud alpha builds triggers run staging-deploy --branch master

# sync BUT runs the image the way it's supposed to run!!!
gcloud builds submit --config cloudbuild.yaml

两者都在使用我们的 cloudbuild.yaml

steps:
- name: gcr.io/$PROJECT_ID/continuous-deploy
  args: ['${_SERVICE}', '${_DOWNLOAD_URL}']
  timeout: 1000s
substitutions:
    _SERVICE: none
    _DOWNLOAD_URL: none
timeout: 1100s

我们的 Dockerfile 非常非常简单

FROM gcr.io/google.com/cloudsdktool/cloud-sdk:alpine

RUN mkdir -p ./monobuild
COPY . ./monobuild/
WORKDIR "/monobuild"
#NOTE: This file in google cloud build trigger MUST be in root of monorepo BUT I don't know why
#NOTE: This command receives any arguments to docker
#ie. for "docker run {image} {args}", it receives the args
ENTRYPOINT ["./downloadAndExtract.sh"]

Sooo,当我运行 SECOND 命令时,它完全使用服从 Dockerfile 的 docker 映像。当我运行第一个命令时,它忽略了我所有的 Dockerfile 内容并尝试在我的 git repo 中运行脚本(这非常令人沮丧,而不是我想要的)。

我们有这个目录结构

- gitroot
   - stagingDeploy
        - Dockerfile
        - deployStaging.sh # part of Dockerfile
        - cloudbuild.yaml
   - prodDeploy
        - Dockerfile
        - prodDeploy.sh #part of Docker file
        - cloudbuild.yaml

当然,只有第二个命令适用于这个目录结构。第一个命令无法找到 deployStaging.sh 直到我们从我们的 gitrepo 根目录 ln -s stagingDeploy/deployStaging.sh 并且我们有大约 5 个部署目录,现在我们的 git repo 根目录被完全污染了。

至少可以说非常令人沮丧,我们不确定如何清理它,因此 prodDeploy 包含所有 prod 部署脚本和暂存,暂存脚本并删除所有根文件。

当然,我们现在有一个损坏的 git repo 目录结构,其中包含来自各种不同构建的根目录中的大量文件(有时会因文件名称相同而意外冲突)。

编辑:关于 twitter 的配置并没有太多可分享的,因为每个人都只是指向 yaml 文件都是这样的

在此处输入图像描述 谢谢,院长

标签: google-cloud-platformgoogle-cloud-build

解决方案


推荐阅读