google-cloud-platform - 为什么 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 文件都是这样的
解决方案
推荐阅读
- wordpress - 将 Gravity Forms 发送到 3rd Party API 并在发送前在 API 中检查重复项
- sql - SQL Server 错误 42000 - 必须声明标量变量
- python - (m, 2), (n, 2) 数组的有效添加
- android - NestedScroll 视图检测滚动状态
- elasticsearch - Elasticsearch 不显示具有相同匹配的所有版本
- c# - 为 ASP.NET Web 窗体 ApiController 启用 Http 选项预检请求
- ionic-framework - 登录一次后无法跳过登录页面 ionic 3
- facebook - 从潜在客户 ID 检索 Facebook 潜在客户详细信息
- android - 做复杂操作时如何不让“APP”卡住【App性能建议】?
- azure - 如何让“HTTPS”/SSL 工作 - 在 Linux 上带有 2 个网站的 Azure WAF(应用程序网关)