本页面介绍了如何配置 Cloud Build 以存储构建的 将工件放在 Artifact Registry 代码库中
准备工作
- 如果目标代码库不存在于 Artifact Registry 中,请创建新代码库。
如果 Cloud Build 和代码库位于不同的项目中,或者您使用的是用户指定的服务账号来运行 build,请向包含代码库的项目中的 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 会将其解析为 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。以下说明介绍了如何配置构建 将 Go 模块上传到 Go 代码库。
如需配置 build,请执行以下操作:
如需在 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 标记作为版本号的惯例
如需从 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}'
- 在代码库中添加区域性 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 设置身份验证。请务必在
pom.xml
文件中指定正确的目标项目和代码库。在 Cloud Build 构建配置文件中,添加使用 Maven 上传软件包的步骤:
steps: - name: gcr.io/cloud-builders/mvn args: ['deploy']
构建配置文件准备就绪后,使用以下命令启动构建:
gcloud builds submit
配置 Node.js build
向目标代码库授予权限后,您就可以 配置 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 项目的 substitution 目录。您可以在运行命令以运行 build。例如,以下命令会从名为
src
的目录中上传软件包:gcloud builds submit --config=cloudbuild.yaml \ --substitutions=_PACKAGE="src" .
配置 Python build
向目标代码库授予权限后,您就可以 配置 build。以下说明介绍了如何配置构建 将 Python 软件包上传到 Python 代码库,并使用 pip。
构建 Python 应用并进行容器化,然后将其推送到 Docker 代码库,请参阅构建 Python 应用 Cloud Build 文档。
如需配置 build,请执行以下操作:
在包含 Cloud Build 构建配置文件的目录中,创建一个名为
requirements.txt
的文件,并添加以下依赖项:twine keyrings.google-artifactregistry-auth
- Twine 适用于 将软件包上传到 Artifact Registry。
- keyrings.google-artifactregistry-auth 是负责处理 使用适用于 pip 和 Twine 的 Artifact Registry 进行身份验证。
要将 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" .