首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在多个cloudbuild.yaml项目之间共享(参数化) GitHub?

在多个cloudbuild.yaml项目之间共享(参数化) GitHub?
EN

Stack Overflow用户
提问于 2022-09-06 07:33:43
回答 2查看 187关注 0票数 0

我成功地在每次提交到GitHub上触发了Google构建。但是,我们在GitHub上有许多不同的源代码存储库(项目),它们都使用Maven和Spring,我希望所有这些项目都使用相同的cloudbuild.yaml (或共享模板)。这样,我们就不需要在所有项目中复制cloudbuild.yaml (在大多数项目中基本上是一样的)。

例如,让我们只在GitHub上使用两个不同的项目,A和B。它们的cloudbuild.yaml文件看起来可能是这样的(但在我们实际的项目中要复杂得多):

项目A:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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文件和图像名,步骤是相同的。现在假设有数百个这样的项目,如果我们需要更改或为每个项目添加一个构建步骤,那么它就可能成为维护的噩梦。

在我看来,一个更好的方法是拥有一个可以共享的模板文件:

代码语言:javascript
复制
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文件中重用,那就太好了:

项目A:

代码语言:javascript
复制
steps:
  import:
    gcs: gs:/my-build-bucket/cloudbuild-template.yaml
    parameters: 
      PROJECT_NAME: project-a

项目B:

代码语言:javascript
复制
steps:
  import:
    gcs: gs:/my-build-bucket/cloudbuild-template.yaml
    parameters: 
      PROJECT_NAME: project-b

谷歌云的构建是否存在这样的东西?如我前面所述,如何在不同构建中导入/重用构建步骤?实现这一目标的推荐方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-07 07:51:11

我联系了Google支持部门,他们告诉我,目前这是不可用的。他们意识到了这个问题,这是他们正在做的事情(没有eta在什么时候可以使用)。

同时,他们的建议是使用泰克顿

票数 1
EN

Stack Overflow用户

发布于 2022-10-22 11:27:53

在上有两个现成的解决方案:

最终,无论您决定如何,您最终都会在项目构建配置中得到这样的结果:

代码语言:javascript
复制
 - name: gcr.io/my-project/maven-spring
   args: ['$REPO_NAME', 'project-a']

一些理由

我不认为这是解决“可重用构建代码”问题的唯一可行选择,但我认为它们很好地处理了GCB和其他您可能已经准备好的相关服务。

对于可重用的Docker映像,好处是映像在与构建配置相同的执行上下文中运行,因此可以想象这与使用现有gcr.io/cloud-builders或社区映像的体验类似。

使用gcloud builds submit,好处是您可以在它自己的执行上下文中运行一个完全独立的构建,或者阻塞直到它完成,或者异步运行这些构建。

构建可以使用/workspace上可用的源执行这些常见任务的自定义Docker映像的方法要简单一些。

如果异步构建看起来是正确的选项,那么我想您可以做的是基于gcr.io/cloud-builders/gcloud将一个Docker映像发布到一个共享的Artifact/Container,其中包含了所有的模板,其中执行源将在自动挂载的/workspace路径上可用,并且您可以添加一些更好的操作,比如验证Docker运行参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73618292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档