Google Cloud Builder - 如何触发子目录中的构建配置?

Google Cloud Builder - how to trigger build configuration in a subdirectory?

我正在尝试建立一个 Google Cloud Builder 构建触发器来自动构建我的 ASP .NET Core application 并将其部署到 Google AppEngine。

使用当前 cloudbuild.yaml:

   steps:
   - name: 'gcr.io/cloud-builders/dotnet'
     args: [ 'publish', '-c', 'Release' ]

   - name: 'gcr.io/cloud-builders/gcloud'
     args: ['app','deploy','./bin/Release/netcoreapp2.1/publish/app.yaml']

我已经使用 cloud-build-local 工具测试了本地构建工作。

这两种方法在本地有效:

  1. 来自应用程序子目录cloud-build-local --config=cloudbuild.yaml --dryrun=false .
  2. 来自 存储库根目录cloud-build-local --config=clearbooks-rest-aspnetcore/cloudbuild.yaml --dryrun=false clearbooks-rest-aspnetcore

Build Trigger 定义似乎部分支持存储库根目录的子目录中的配置文件(方法 2),但它似乎假定代码始终存在于存储库根目录中。

如何配置 Cloud Builder 以在存储库的子目录中开始构建?

解决办法是更新cloudbuild.yaml

  1. 在构建步骤中添加 dir: 选项
  2. 为部署步骤
  3. 提供正确的app.yaml位置

这是工作 cloudbuild.yaml:

steps:
- name: 'gcr.io/cloud-builders/dotnet'
  args: [ 'publish', '-c', 'Release' ]
  dir: 'clearbooks-rest-aspnetcore'

- name: 'gcr.io/cloud-builders/gcloud'
  args: ['app','deploy','clearbooks-rest-aspnetcore/bin/Release/netcoreapp2.1/publish/app.yaml']

在本地测试时,运行 cloud-build-local 在存储库根目录中,从不在应用程序子目录中:

cloud-build-local --config=clearbooks-rest-aspnetcore/cloudbuild.yaml --dryrun=false .

这反映了 Cloud Build 的工作方式:

  1. 修正路径cloudbuild.yaml
  2. 源的当前目录

我正在开发一个示例项目 Spring 使用 App Engine 启动,目录结构是这样的。

google-cloud
      - appengine-spring-boot
      - appflexengine-spring-boot

下面是适用于我的 cloudbuild.yaml 文件。

steps:
  - name: 'gcr.io/cloud-builders/mvn'
    dir: "appengine-spring-boot"
    #args: [ 'package','-f','pom.xml','-Dmaven.test.skip=true' ]
    args: [ 'clean', 'package']
  - name: "gcr.io/cloud-builders/gcloud"
    dir: "appengine-spring-boot"
    args: [ "app", "deploy" ]
    timeout: "1600s"