本页面介绍如何配置 Cloud Build 以将构建的工件存储在 Artifact Registry 代码库中。
准备工作
- 如果 Artifact Registry 中不存在目标代码库,请创建新代码库。
如果 Cloud Build 与您的代码库位于不同的项目中,或者如果您使用用户指定的服务帐号运行构建,请向包含代码库的项目中的构建服务帐号授予 Artifact Registry Writer 角色。
默认 Cloud Build 服务帐号有权对同一 Google Cloud 项目中的代码库执行以下操作:
- 上传和下载工件
- 在 Artifact Registry 中创建 gcr.io 存储库
配置 Docker 构建
授予对目标代码库的权限后,您就可以配置 build 了。
如需配置 build,请执行以下操作:
在构建配置文件中,添加用于构建和标记映像的步骤。
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。- 如果运行
准备好运行构建时,请为用户定义的替代变量指定值。例如,此命令将替换:
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,请执行以下操作:
如需将 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 惯例。
如需从 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}'
- 将代码库位置中的区域级 Artifact Registry 端点添加到
准备好运行构建时,请为用户定义的替代变量指定值。例如,此命令将替换:
us-east1
(适用于代码库位置)my-project
作为项目 IDmy-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,请执行以下操作:
为 Maven 设置 authentication。请务必在
pom.xml
文件中指定正确的目标项目和代码库。在 Cloud Build 构建配置文件中,添加使用 Maven 上传软件包的步骤:
steps: - name: gcr.io/cloud-builders/mvn args: ['deploy']
构建配置文件准备就绪后,请使用以下命令启动构建:
gcloud builds submit
配置 Node.js build
授予对目标代码库的权限后,您就可以配置 build 了。以下说明介绍了如何配置构建,以将 Node.js 软件包上传到 npm 代码库。
如需配置 build,请执行以下操作:
将 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
向项目中的
package.json
文件添加一个脚本,以刷新用于向代码库进行身份验证的访问令牌。"scripts": { "artifactregistry-login": "npx google-artifactregistry-auth" }
在构建配置文件中,添加将软件包上传到代码库的步骤。
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,请执行以下操作:
在包含 Cloud Build 构建配置文件的目录中,创建一个名为
requirements.txt
且包含以下依赖项的文件:twine keyrings.google-artifactregistry-auth
- Twine 用于将软件包上传到 Artifact Registry。
- keyrings.google-artifactregistry-auth 是一个 Artifact Registry 密钥环后端,负责通过 Artifact Registry 对 pip 和 Twine 进行身份验证。
如需将 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。- 如果运行
如需从 Python 代码库安装软件包,请在构建配置文件中添加一个运行
pip install
命令的步骤。steps: - name: python entrypoint: pip args: - 'install' - '--index-url' - 'https://${_LOCATION}-python.pkg.dev/$PROJECT_ID/${_REPOSITORY}/simple/' - '${_PACKAGE}' - '--verbose'
此代码段包含了一个额外的
${_PACKAGE}
替换软件包名称。准备好运行构建时,请为用户定义的替代变量指定值。例如,此命令将替换:
us-east1
(适用于代码库位置)my-repo
(用于代码库名称)my-package
用于软件包名称
gcloud builds submit --config=cloudbuild.yaml \ --substitutions=_LOCATION="us-east1",_REPOSITORY="my-repo",_PACKAGE="my-package" .