本頁說明如何設定 Cloud Build,將建構的構件儲存在 Artifact Registry 存放區中。
事前準備
- 如果目標存放區不在 Artifact Registry 中,請建立新的存放區。
如果 Cloud Build 和存放區位於不同的專案中,或是您使用使用者指定的服務帳戶執行建構作業,請將 Artifact Registry Writer 角色授予專案中存放區的建構服務帳戶。
預設的 Cloud Build 服務帳戶可對同一個 Google Cloud 專案中的存放區執行下列動作:
- 上傳及下載構件
- 在 Artifact Registry 中建立 gcr.io 存放區
設定 Docker 建構作業
授予目標存放區權限後,即可設定建構作業。
如要設定版本,請按照下列步驟操作:
在建構設定檔中新增建構及標記映像檔的步驟。
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 建構作業
授予目標存放區權限後,即可設定建構作業。以下說明如何設定建構作業,以便將 Go 模組上傳至 Go 存放區。
如要設定版本,請按照下列步驟操作:
如要將 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
會替換成標記名稱,以支援 Go 慣例,也就是使用 Git 標記做為版本號碼。
如要從 Go 存放區安裝套件,請在建構設定檔中新增下列步驟:
- 在
.netrc
檔案中,將存放區位置新增至地區 Cloud Build 端點。 - 執行憑證輔助程式工具,更新 OAuth 權杖。
- 請執行
go run
指令。您也可以將其變更為go build
來編譯模組、go test
來執行測試,或go mod tidy
來下載依附元件。
針對
go
指令步驟,GOPROXY
會設為代管私人依附元件的 Cloud Build 存放區。如果模組有公開依附元件,您可以將公開 Proxy 新增至以逗號分隔的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}'
- 在
準備執行建構作業時,請為使用者定義的替換項目指定值。例如,這個指令會替換:
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 建構作業
授予目標存放區權限後,即可設定建構作業。以下說明如何設定建構作業,將 Java 套件上傳至 Maven 存放區。
如要設定版本,請按照下列步驟操作:
為 Maven 設定驗證。請務必在
pom.xml
檔案中指定正確的目標專案和存放區。在 Cloud Build 建構設定檔中,新增使用 Maven 上傳套件的步驟:
steps: - name: gcr.io/cloud-builders/mvn args: ['deploy']
建構設定檔準備就緒後,請使用下列指令開始建構:
gcloud builds submit
設定 Node.js 建構作業
授予目標存放區權限後,即可設定建構作業。以下說明如何設定建構作業,將 Node.js 套件上傳至 npm 存放區。
如要設定版本,請按照下列步驟操作:
將 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 版本
授予目標存放區權限後,即可設定建構作業。以下說明如何設定建構作業,以便將 Python 套件上傳至 Python 存放區,並使用 pip 安裝套件。
如要建構及容器化 Python 應用程式,然後將其推送至 Docker 存放區,請參閱 Cloud Build 說明文件中的「建構 Python 應用程式」。
如要設定版本,請按照下列步驟操作:
在包含 Cloud Build 建構設定檔的目錄中,建立名為
requirements.txt
的檔案,並加入下列依附元件:twine keyrings.google-artifactregistry-auth
- Twine 可用於將套件上傳至 Artifact Registry。
- keyrings.google-artifactregistry-auth 是 Artifact Registry 鑰匙圈後端,可處理 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 鑰匙圈後端。第二個步驟會上傳
dist
子目錄中建構的 Python 檔案。如果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" .
使用自行簽署的憑證,在私人登錄檔中儲存構件
如果您有私人憑證授權單位,且需要在私人登錄檔中儲存構件,則可以設定建構設定檔,以便使用自行簽署的憑證。如要這樣做,請新增一個建構步驟,將憑證推送至主機系統,以便後續建構步驟使用該憑證。例如:
- name: gcr.io/cloud-builders/docker
args:
- run
- --rm
- --volume=/etc/docker/certs.d/:/etc/docker/certs.d/
- --volume=certificates:/certificates
- ubuntu
- bash
- -c
- |
cp /certificates/ca.crt /etc/docker/certs.d/quay.apps.cloud.inter
volumes:
- name: certificates
path: /certificates