连接到 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. 准备好运行构建后,请为用户定义的 替换。例如,此命令将替换为:

    • 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。以下说明介绍了如何配置构建 将 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. 准备好运行构建后,请为用户定义的 替换。例如,此命令将替换为:

    • 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。以下说明介绍了如何配置 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 项目的 substitution 目录。您可以在运行命令以运行 build。

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

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

配置 Python build

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

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

如需配置 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 使用 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" .