连接到 Cloud Build

本页面介绍如何配置 Cloud Build 以将构建的工件存储在 Artifact Registry 代码库中。

准备工作

  1. 如果 Artifact Registry 中不存在目标代码库,请创建新代码库
  2. 如果 Cloud Build 与您的代码库位于不同的项目中,或者如果您使用用户指定的服务帐号运行构建,请向包含代码库的项目中的构建服务帐号授予 Artifact Registry Writer 角色

    默认 Cloud Build 服务帐号有权对同一 Google Cloud 项目中的代码库执行以下操作:

配置 Docker 构建

授予对目标代码库的权限后,您就可以配置 build 了。

如需配置 build,请执行以下操作:

  1. 在构建配置文件中,添加用于构建和标记映像的步骤。

    steps:
    - name: 'gcr.io/cloud-builders/docker'
      args: [ 'build', '-t', '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}', '.' ]
    images:
    - '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}'
    

    此代码段使用 Cloud Build 替代变量。如果要使用相同的构建配置文件将映像推送到不同环境(如测试、预演或生产环境)的代码库,此方法会非常有用。

    • ${_LOCATION}${_REPOSITORY}${_IMAGE} 是代码库位置、代码库名称和映像的用户定义的替代项。您可以在构建时指定这些变量的值。
    • $PROJECT_ID 是 Cloud Build 使用构建的 Google Cloud 项目 ID 解析的默认替代变量

      • 如果运行 gcloud builds submit 命令,Cloud Build 将在 gcloud 会话中使用活跃项目 ID。
      • 如果您使用构建触发器,Cloud Build 将使用运行 Cloud Build 的项目的 ID。

      或者,您也可以使用用户定义的替代变量(而不是 $PROJECT_ID),以便在构建时指定项目 ID。

  2. 准备好运行构建时,请为用户定义的替代变量指定值。例如,此命令将替换:

    • us-east1(适用于代码库位置)
    • my-repo(用于代码库名称)
    • my-image 用于映像名称
    gcloud builds submit --config=cloudbuild.yaml \
      --substitutions=_LOCATION="us-east1",_REPOSITORY="my-repo",_IMAGE="my-image" .
    

配置 Go build

授予对目标代码库的权限后,您就可以配置 build 了。以下说明介绍了如何配置 build,以将 Go 模块上传到 Go 代码库。

如需配置 build,请执行以下操作:

  1. 如需将 Go 模块上传到构建中的 Go 代码库,请将以下步骤添加到构建配置文件中:

    steps:
    - name: gcr.io/cloud-builders/gcloud
    args:
    - 'artifacts'
    - 'go'
    - 'upload'
    - '--project=$PROJECT_ID'
    - '--location=${_LOCATION}'
    - '--repository=${_REPOSITORY}'
    - '--module-path=${_MODULE_PATH}'
    - '--version=$TAG_NAME'
    

    构建配置文件包含 Cloud Build 替代内容。如果您想使用相同的构建配置文件将软件包上传到不同环境(如测试、预演或生产环境)的代码库,此方法会非常有用。

    • ${_LOCATION}${_REPOSITORY}${_MODULE_PATH} 是用户定义的代码库位置、代码库名称和模块路径的替代内容。您可以在构建时指定这些变量的值。
    • $PROJECT_ID$TAG_NAME 是 Cloud Build 将其替换为以下内容的默认替代变量

      • $PROJECT_ID 会替换为构建的 Google Cloud 项目 ID。

        • 如果运行 gcloud builds submit 命令,Cloud Build 将在 gcloud 会话中使用活跃项目 ID。
        • 如果您使用构建触发器,Cloud Build 将使用运行 Cloud Build 的项目的 ID。

        或者,您也可以使用用户定义的替代变量(而不是 $PROJECT_ID),以便在构建时指定项目 ID。

      • $TAG_NAME 替换为您的标记名称,以支持将 Git 标记用作版本号的 Go 惯例。

  2. 如需从 Go 代码库安装软件包,请将以下步骤添加到构建配置文件中:

    • 将代码库位置中的区域级 Artifact Registry 端点添加到 .netrc 文件中。
    • 运行凭据帮助工具以刷新 OAuth 令牌。
    • 运行 go run 命令。您也可以将此位置更改为 go build 以编译模块,更改为 go test 以运行测试,或更改为 go mod tidy 以下载依赖项。

    对于 go 命令步骤,GOPROXY 会设置为托管专用依赖项的 Artifact Registry 代码库。如果模块具有公共依赖项,您可以将公共代理添加到以英文逗号分隔的 GOPROXY 列表中。

    steps:
    - name: golang
      entrypoint: go
      args: ['run', 'github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0', 'add-locations', '--locations=${_LOCATION}']
      env:
      # Set GOPROXY to the public proxy to pull the credential helper tool
      - 'GOPROXY=https://proxy.golang.org'
    - name: golang
      entrypoint: go
      args: ['run', 'github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0', 'refresh']
      env:
      # Set GOPROXY to the public proxy to pull the credential helper tool
      - 'GOPROXY=https://proxy.golang.org'
    - name: golang
      entrypoint: go
      args: ['run', '.']
      env:
      - 'GOPROXY=https://${_LOCATION}-go.pkg.dev/${_PROJECT_ID}/${_REPOSITORY}'
    options:
      env:
      # Disable GO sumdb checks for private modules.
      - 'GONOSUMDB=${_MODULE_PATH}'
    
  3. 准备好运行构建时,请为用户定义的替代变量指定值。例如,此命令将替换:

    • us-east1(适用于代码库位置)
    • my-project 作为项目 ID
    • my-repo(用于代码库名称)
    • example.com/greetings 用于模块路径
    gcloud builds submit --config=cloudbuild.yaml \
      --substitutions=_LOCATION="us-east1",_PROJECT_ID="my-project",_REPOSITORY="my-repo",_MODULE_PATH="example.com/greetings" .
    

配置 Java build

授予对目标代码库的权限后,您就可以配置 build 了。以下说明介绍了如何配置 build,以将 Java 软件包上传到 Maven 制品库。

如需配置 build,请执行以下操作:

  1. 为 Maven 设置 authentication。请务必在 pom.xml 文件中指定正确的目标项目和代码库。

  2. 在 Cloud Build 构建配置文件中,添加使用 Maven 上传软件包的步骤:

    steps:
    - name: gcr.io/cloud-builders/mvn
      args: ['deploy']
    
  3. 构建配置文件准备就绪后,请使用以下命令启动构建:

    gcloud builds submit
    

配置 Node.js build

授予对目标代码库的权限后,您就可以配置 build 了。以下说明介绍了如何配置构建,以将 Node.js 软件包上传到 npm 代码库。

如需配置 build,请执行以下操作:

  1. 将 Artifact Registry 代码库添加到 Node.js 项目的 .npmrc 文件中。该文件位于 package.json 文件所在的目录中。

    @SCOPE:registry=https://LOCATION-npm.pkg.dev/PROJECT_ID/REPOSITORY
    //LOCATION-npm.pkg.dev/PROJECT_ID/REPOSITORY:always-auth=true
    
    • SCOPE-NAME 是要与代码库关联的 npm 范围的名称。使用范围可确保您始终从正确的代码库发布和安装软件包。
    • PROJECT_ID 是您的 Google Cloud 项目 ID。
    • LOCATION 是代码库的单区域或多区域位置
    • REPOSITORY 是代码库的名称。
  2. 向项目中的 package.json 文件添加一个脚本,以刷新用于向代码库进行身份验证的访问令牌。

    "scripts": {
     "artifactregistry-login": "npx google-artifactregistry-auth"
    }
    
  1. 在构建配置文件中,添加将软件包上传到代码库的步骤。

    steps:
    - name: gcr.io/cloud-builders/npm
      args: ['run', 'artifactregistry-login']
    - name: gcr.io/cloud-builders/npm
      args: ['publish', '${_PACKAGE}']
    

    ${_PACKAGE} 是 Cloud Build 替代项,代表您的 Node.js 项目目录。您可以在运行命令来运行构建时指定目录。

    例如,以下命令会从名为 src 的目录上传软件包:

    gcloud builds submit --config=cloudbuild.yaml \
        --substitutions=_PACKAGE="src" .
    

配置 Python build

授予对目标代码库的权限后,您就可以配置 build 了。以下说明介绍了如何配置 build,以将 Python 软件包上传到 Python 代码库,并使用 pip 安装该软件包。

如需构建 Python 应用并将其容器化,然后将其推送到 Docker 代码库,请参阅 Cloud Build 文档中的构建 Python 应用

如需配置 build,请执行以下操作:

  1. 在包含 Cloud Build 构建配置文件的目录中,创建一个名为 requirements.txt 且包含以下依赖项的文件:

    twine
    keyrings.google-artifactregistry-auth
    
    • Twine 用于将软件包上传到 Artifact Registry。
    • keyrings.google-artifactregistry-auth 是一个 Artifact Registry 密钥环后端,负责通过 Artifact Registry 对 pip 和 Twine 进行身份验证。
  2. 如需将 Python 软件包上传到构建中的 Python 代码库,请将以下步骤添加到构建配置文件中:

    steps:
    - name: python
      entrypoint: pip
      args: ["install", "-r", "requirements.txt", "--user"]
    - name: python
      entrypoint: python
      args:
      - '-m'
      - 'twine'
      - 'upload'
      - '--repository-url'
      - 'https://${_LOCATION}-python.pkg.dev/$PROJECT_ID/${_REPOSITORY}/'
      - 'dist/*'
    

    在此代码段中,第一步会安装 Twine 和 Artifact Registry 密钥环后端。第二步:将构建的 Python 文件上传到 dist 子目录。调整 requirements.txt 和已构建的 Python 文件的路径(如果它们与代码段不匹配)。

    代码库路径包含 Cloud Build 替代内容。如果您想使用相同的构建配置文件将软件包上传到不同环境(如测试、预演或生产环境)的代码库,此方法会非常有用。

    • ${_LOCATION}${_REPOSITORY} 是用户定义的代码库位置、代码库名称和软件包名称的替代项。您可以在构建时指定这些变量的值。
    • $PROJECT_ID 是 Cloud Build 使用构建的 Google Cloud 项目 ID 解析的默认替代变量

      • 如果运行 gcloud builds submit 命令,Cloud Build 将在 gcloud 会话中使用活跃项目 ID。
      • 如果您使用构建触发器,Cloud Build 将使用运行 Cloud Build 的项目的 ID。

      或者,您也可以使用用户定义的替代变量(而不是 $PROJECT_ID),以便在构建时指定项目 ID。

  3. 如需从 Python 代码库安装软件包,请在构建配置文件中添加一个运行 pip install 命令的步骤。

      steps:
      - name: python
        entrypoint: pip
        args:
        - 'install'
        - '--index-url'
        - 'https://${_LOCATION}-python.pkg.dev/$PROJECT_ID/${_REPOSITORY}/simple/'
        - '${_PACKAGE}'
        - '--verbose'
    

    此代码段包含了一个额外的 ${_PACKAGE} 替换软件包名称。

  4. 准备好运行构建时,请为用户定义的替代变量指定值。例如,此命令将替换:

    • us-east1(适用于代码库位置)
    • my-repo(用于代码库名称)
    • my-package 用于软件包名称
    gcloud builds submit --config=cloudbuild.yaml \
      --substitutions=_LOCATION="us-east1",_REPOSITORY="my-repo",_PACKAGE="my-package" .