我成功地在每次提交到GitHub上触发了Google构建。但是,我们在GitHub上有许多不同的源代码存储库(项目),它们都使用Maven和Spring,我希望所有这些项目都使用相同的cloudbuild.yaml (或共享模板)。这样,我们就不需要在所有项目中复制cloudbuild.yaml (在大多数项目中基本上是一样的)。
例如,让我们只在GitHub上使用两个不同的项目,A和B。它们的cloudbuild.yaml文件看起来可能是这样的(但在我们实际的项目中要复杂得多):
项目A:
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文件中重用,那就太好了:
项目A:
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谷歌云的构建是否存在这样的东西?如我前面所述,如何在不同构建中导入/重用构建步骤?实现这一目标的推荐方法是什么?
发布于 2022-09-07 07:51:11
我联系了Google支持部门,他们告诉我,目前这是不可用的。他们意识到了这个问题,这是他们正在做的事情(没有eta在什么时候可以使用)。
同时,他们的建议是使用泰克顿。
发布于 2022-10-22 11:27:53
在上有两个现成的解决方案:
gcloud builds submit最终,无论您决定如何,您最终都会在项目构建配置中得到这样的结果:
- 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运行参数。
https://stackoverflow.com/questions/73618292
复制相似问题