連結至 Cloud Build

本頁說明如何設定 Cloud Build,將建構的構件儲存在 Artifact Registry 存放區中。

事前準備

  1. 如果目標存放區不在 Artifact Registry 中,請建立新的存放區
  2. 如果 Cloud Build 和存放區位於不同的專案中,或是您使用使用者指定的服務帳戶執行建構作業,請將 Artifact Registry Writer 角色授予專案中存放區的建構服務帳戶。

    預設的 Cloud Build 服務帳戶可對同一個 Google Cloud 專案中的存放區執行下列動作:

設定 Docker 建構作業

授予目標存放區權限後,即可設定建構作業。

如要設定版本,請按照下列步驟操作:

  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 會使用建構的 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 建構作業

授予目標存放區權限後,即可設定建構作業。以下說明如何設定建構作業,以便將 Go 模組上傳至 Go 存放區。

如要設定版本,請按照下列步驟操作:

  1. 如要將 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 標記做為版本號碼。

  2. 如要從 Go 存放區安裝套件,請在建構設定檔中新增下列步驟:

    • .netrc 檔案中,將存放區位置中的區域性 Artifact Registry 端點新增至 .netrc 檔案。
    • 執行憑證輔助程式工具,更新 OAuth 權杖。
    • 請執行 go run 指令。您也可以將其變更為 go build 來編譯模組、go test 來執行測試,或 go mod tidy 來下載依附元件。

    針對 go 指令步驟,GOPROXY 會設為託管私人依附元件的 Artifact Registry 存放區。如果模組有公開依附元件,您可以將公開 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}'
    
  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 建構作業

授予目標存放區權限後,即可設定建構作業。以下說明如何設定建構作業,將 Java 套件上傳至 Maven 存放區。

如要設定版本,請按照下列步驟操作:

  1. 為 Maven 設定驗證。請務必在 pom.xml 檔案中指定正確的目標專案和存放區。

  2. 在 Cloud Build 建構設定檔中,新增使用 Maven 上傳套件的步驟:

    steps:
    - name: gcr.io/cloud-builders/mvn
      args: ['deploy']
    
  3. 建構設定檔準備就緒後,請使用下列指令開始建構:

    gcloud builds submit
    

設定 Node.js 建構作業

授予目標存放區權限後,即可設定建構作業。以下說明如何設定建構作業,將 Node.js 套件上傳至 npm 存放區。

如要設定版本,請按照下列步驟操作:

  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"
    }
    
  3. 在建構設定檔中,新增將套件上傳至存放區的步驟。

    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 應用程式」。

如要設定版本,請按照下列步驟操作:

  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 鑰匙圈後端。第二個步驟會上傳 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。

  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" .
    

使用自行簽署的憑證,在私人登錄檔中儲存構件

如果您有私人憑證授權單位,且需要在私人登錄檔中儲存構件,則可以設定建構設定檔,以便使用自行簽署的憑證。如要這樣做,請新增一個建構步驟,將憑證推送至主機系統,以便後續建構步驟使用該憑證。例如:

- 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