GCP cloudbuild git推送触发器

Posted

技术标签:

【中文标题】GCP cloudbuild git推送触发器【英文标题】:GCP cloudbuild git push trigger 【发布时间】:2021-03-28 05:06:36 【问题描述】:

每次推送到我的存储库的特定分支时,我都有一个运行构建作业的触发器。

如果我尝试使用以下命令“手动”(不使用触发器)运行构建作业:

# Submit the build job
_cmd = f"gcloud builds submit --no-source --config config['build']['cloudbuild'] --substitutions substitutions"
subprocess.run(_cmd, shell=True, check=True)

它按预期工作并成功完成,没有任何问题。 但是,如果我对我的存储库执行 git push 以使用触发器执行此操作,则在触发器启动构建作业并从我的 cloudbuild YAML 文件中检测到完整结构后,它会在第一步中断执行并显示错误消息:

第一步:

steps:
# Clone repo to Cloud Build environment
- name: 'gcr.io/cloud-builders/git'
  args: ['clone',
         '--branch',"$_BRANCH_NAME",
         '$_REPO_URL', '.',
         '--depth', '1',
         '--verbose']
  id: 'Clone Repo'

错误信息:

fatal: destination path '.' already exists and is not an empty directory.

你知道问题可能是什么吗?

提前致谢!


编辑:

尝试清除git clone前的目录,结果还是一样:

steps:
# Clear Cloud Build environment
- name: 'gcr.io/cloud-builders/git'
  args: ['rm', '-rf', '.']
  id: 'Clear Cloud Build environment'
  
# Clone repo to Cloud Build environment
- name: 'gcr.io/cloud-builders/git'
  args: ['clone',
         '--branch',"$_BRANCH_NAME",
         '$_REPO_URL', '.',
         '--depth', '1',
         '--verbose']
  waitFor: ['Clear Cloud Build environment']
  id: 'Clone Repo'

【问题讨论】:

【参考方案1】:

当您在本地运行作业时,使用 --no-source 不上传文件并使用空的 /workspace 目录运行 Cloud Build

当您使用触发器启动 Cloud Build 时,您的 /workspace 目录已经包含源,并且您的克隆目标目录不为空。

你可以:

要么克隆到另一个目录,然后将内容移动到/workspace。 或者在运行克隆命令之前在您的/workspace 中执行rm -rf

【讨论】:

感谢您的回复 :) 我不确定这是否是您的建议,但我编辑了我的问题以显示我试图做什么。但结果是一样的。它仍然显示相同的错误。我会尝试其他建议,我会尽快提供一些反馈 正常!删除点。像这样args: ['rm', '-rf']【参考方案2】:

显然,通过更改 git clone 的目标目录并更新剩余步骤上的 dir 标签解决了问题:

steps:
# Clone repo to Cloud Build environment
- name: 'gcr.io/cloud-builders/git'
  args: ['clone',
         '--branch',"$_BRANCH_NAME",
         '$_REPO_URL', 'new_workspace/',    # new directory
         '--depth', '1',
         '--verbose']
  id: 'Clone Repo'

# Create the image for the component 1
- name: 'gcr.io/cloud-builders/docker'
  args: ['build',
         '-t', 'gcr.io/$_PROJECT_ID/comp_1:$_IMG_TAG', '.']
  dir: 'new_workspace/implementation/pipeline/components/comp_1'  # update with new directory
  id: 'Build Component Image'

【讨论】:

以上是关于GCP cloudbuild git推送触发器的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Cloud Build 在 GCP 上部署功能?

尝试使用 cloud build (gcp) 部署时出现 URL not found

Google Cloud Builder-构建触发器失败,并显示“未找到请求的资源”

GCP Cloud Build 标签发布

git:推送事件触发

在 GCP cloudbuild.yaml 中指定与“名称”不同的“执行函数”