【发布时间】:2022-09-07 15:51:11
【问题描述】:
我已经成功地在每次提交到 GitHub 时触发了 Google Cloud Build。但是,我们在 GitHub 上有许多不同的源代码存储库(项目),它们都使用 Maven 和 Spring Boot,我希望所有这些项目都使用相同的 cloudbuild.yaml(或共享模板)。这样我们就不需要在所有项目中复制cloudbuild.yaml(在大多数项目中基本上是相同的)。
例如,让我们在 GitHub 上拿两个不同的项目 A 和 B。他们的 cloudbuild.yaml 文件可能看起来像这样(但在我们的实际项目中要复杂得多):
项目一:
steps:
- name: maven:3.8.6-eclipse-temurin-17-alpine
entrypoint: mvn
args: [ \'test\' ]
- name: maven:3.8.6-eclipse-temurin-17-alpine
entrypoint: mvn
args: [ \'package\', \'-Dmaven.test.skip=true\' ]
- name: gcr.io/cloud-builders/docker
args: [ \"build\", \"-t\", \"europe-west1-docker.pkg.dev/projectname/repo/project-a\", \"--build-arg=JAR_FILE=target/project-a.jar\", \".\" ]
images: [ \"europe-west1-docker.pkg.dev/projectname/repo/project-a\" ]
项目B:
steps:
- name: maven:3.8.6-eclipse-temurin-17-alpine
entrypoint: mvn
args: [ \'test\' ]
- name: maven:3.8.6-eclipse-temurin-17-alpine
entrypoint: mvn
args: [ \'package\', \'-Dmaven.test.skip=true\' ]
- name: gcr.io/cloud-builders/docker
args: [ \"build\", \"-t\", \"europe-west1-docker.pkg.dev/projectname/repo/project-a\", \"--build-arg=JAR_FILE=target/project-b.jar\", \".\" ]
images: [ \"europe-west1-docker.pkg.dev/projectname/repo/project-b\" ]
唯一不同的是jar文件和镜像名称,步骤是一样的。现在想象一下拥有数百个这样的项目,如果我们需要为每个项目更改或添加构建步骤,这可能会成为维护的噩梦。
在我看来,更好的方法是拥有一个可以共享的模板文件:
steps:
- name: maven:3.8.6-eclipse-temurin-17-alpine
entrypoint: mvn
args: [ \'test\' ]
- name: maven:3.8.6-eclipse-temurin-17-alpine
entrypoint: mvn
args: [ \'package\', \'-Dmaven.test.skip=true\' ]
- name: gcr.io/cloud-builders/docker
args: [ \"build\", \"-t\", \"europe-west1-docker.pkg.dev/projectname/repo/${PROJECT_NAME}\", \"--build-arg=JAR_FILE=target/${PROJECT_NAME}.jar\", \".\" ]
images: [ \"europe-west1-docker.pkg.dev/projectname/repo/${PROJECT_NAME}\" ]
如果可以将这样的模板文件上传到 GCS,然后在每个项目的 cloudbuild.yaml 文件中重复使用,那就太好了:
项目一:
steps:
import:
gcs: gs:/my-build-bucket/cloudbuild-template.yaml
parameters:
PROJECT_NAME: project-a
项目B:
steps:
import:
gcs: gs:/my-build-bucket/cloudbuild-template.yaml
parameters:
PROJECT_NAME: project-b
Google Cloud Build 是否存在这样的事情?如上所述,您如何在不同的构建中导入/重用构建步骤?实现这一目标的推荐方法是什么?
-
使用substitutions 并在gcloud command 中使用
--substitutions argument或在配置文件中指定它们怎么样? -
@RoopaM 我认为这不会有帮助。我现在已经更新了这个问题,希望它更清楚。