【问题标题】:Share (parameterized) cloudbuild.yaml between multiple GitHub projects?在多个 GitHub 项目之间共享(参数化)cloudbuild.yaml?
【发布时间】: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 我认为这不会有帮助。我现在已经更新了这个问题,希望它更清楚。

标签: google-cloud-build


【解决方案1】:

我联系了 Google Cloud 支持,他们告诉我这目前不可用。他们意识到了这个问题,这是他们正在努力的事情(没有关于何时可用的 eta)。

与此同时,他们的建议是使用Tekton

【讨论】:

    猜你喜欢
    • 2017-05-15
    • 2018-03-18
    • 2012-07-22
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多