目次
ToggleProblem
Githubのプライベートリポジトリにあるモジュールを使用するGo langのソースコードをCloud buildでビルドするとCloud buildはプライベートリポジトリのモジュールを取得できないため、 go buildで失敗します。
cloudbuild.yamlの例:
cloudbuild.yamlの例:
options: env: - GO111MODULE=on volumes: - name: go-modules path: /go steps: - name: golang:1.11 dir: . args: ["go", "test", "./..."] - name: golang:1.11 dir: . args: ["go", "build", "-o", {build target file path}] env: ["CGO_ENABLED=0"]
このcloudbuild.yamlを実行すると、以下のようなエラーが表示されます。
optionsStep #0: go: github.com/dssolutioninc/{private repository name}@{version}: git fetch -f origin refs/heads/*:refs/heads/* refs/tags/*:refs/tags/* in /go/pkg/mod/cache/vcs/960bac95cc27711ae0971346df7b6c2f5b0d755d5c6f5e45bea54c22cf6501c6: exit status 128: Step #0: fatal: could not read Username for 'https://github.com': terminal prompts disabled Step #0: go: error loading module requirements Finished Step #0
この問題を解決する方法
- キーペアを生成
- 公開鍵をデプロイ鍵としてプライベートリポジトリに追加
-
クラウドKMSを利用した暗号化秘密鍵の生成
https://cloud.google.com/cloud-build/docs/access-private-github-repos -
cloudbuild.yamlに以下の設定を追加
a) 暗号化された秘密鍵の復号化
b) githubの署名を追加
~/.ssh/known_hosts
c) httpsアクセスの代わりにsshアクセスを使用するためのgit設定の追加
cloudbuild.yamlの例:
optionsStepoptions: env: - GO111MODULE=on volumes: - name: go-modules path: /go - name: "ssh" path: /root/.ssh steps: - name: 'gcr.io/cloud-builders/gcloud' dir: . entrypoint: 'bash' args: - '-c' - | gsutil cp gs://{encrypted private key file path} dev_id_rsa.enc gcloud kms decrypt --ciphertext-file=./dev_id_rsa.enc --plaintext-file=/root/.ssh/id_rsa --location={location of key ring} --keyring={keyring name} --key={key name} - name: 'gcr.io/cloud-builders/git' dir: . entrypoint: 'bash' args: - '-c' - | chmod 600 /root/.ssh/id_rsa cat </root/.ssh/config Hostname github.com IdentityFile /root/.ssh/id_rsa EOF mv ./kms/dev/known_hosts /root/.ssh/known_hosts cat /root/.ssh/id_rsa git config --global url."git@github.com:".insteadOf "https://github.com/" - name: golang:1.11 dir: . args: ["go", "test", "./..."] - name: golang:1.11 dir: . args: ["go", "build", "-o", {build target file path}] env: ["CGO_ENABLED=0"]