连接到 Cloud Build

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

准备工作

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

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

    • 上传和下载工件
    • 在 Artifact Registry 中创建 gcr.io 仓库

配置 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 会使用 build 的 Google Cloud 项目 ID 对其进行解析。

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

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

  2. 准备好运行 build 后,请为用户定义的替换项指定值。例如,此命令会进行以下替换:

    • 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. 如需在 build 中将 Go 模块上传到 Go 代码库,请将以下步骤添加到 build 配置文件中:

    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 会替换为 build 的 Google Cloud 项目 ID。

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

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

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

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

    • 将代码库位置中的区域 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. 准备好运行 build 后,请为用户定义的替换项指定值。例如,此命令会进行以下替换:

    • 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 设置身份验证。请务必在 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 scope 的名称。使用镜重可确保您始终从正确的代码库发布和安装软件包。
    • 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 项目目录。您可以在运行命令以运行 build 时指定目录。

    例如,以下命令会从名为 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
    
  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 会使用 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. 准备好运行 build 后,请为用户定义的替换项指定值。例如,此命令会进行以下替换:

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