将制品存储在 Artifact Registry 中

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

准备工作

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

    默认的 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 会将其解析为 build 的 Google Cloud 项目 ID。

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

      或者,您也可以使用用户定义的替换项(而非 $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。以下说明介绍了如何配置构建 将 Go 模块上传到 Go 代码库。

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

  1. 如需将 Go 模块上传到 build 中的 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 会替换为 build 的 Google Cloud 项目 ID。

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

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

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

  2. 如需从 Go 代码库安装该软件包,请将以下步骤添加到 您的构建配置文件执行以下操作:

    • 将代码库位置中的区域性 Cloud Build 端点添加到 .netrc 文件。
    • 运行凭据帮助程序工具以刷新 OAuth 令牌。
    • 运行 go run 命令。您还可以将该值更改为 go build,以 编译模块,使用 go test 运行测试,或者使用 go mod tidy 下载 依赖项

    对于 go 命令步骤,GOPROXY 会设置为托管私有依赖项的 Cloud Build 代码库。您可以 将公共代理添加到以英文逗号分隔的 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 以将 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 项目的 substitution 目录。您可以在运行命令以运行 build。

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

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

配置 Python 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 和您的 如果与代码段不匹配,则会发生此错误。

    代码库路径包含 Cloud Build 替换项。如果您希望 使用相同的构建配置文件将软件包上传到代码库 例如测试环境、预演环境或生产环境

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

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

      或者,您也可以使用用户定义的替换项(而非 $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" .
    

后续步骤