CloudBuild内でビルドするコンテナ内からプライベートリポジトリを参照する方法

結論 先日、cloudbuild上でdocker buildするときに--sshを渡す方法だとうまく動作しないと書きましたが、再検証したら動いたのでメモします。 おそらく、known_hostsを追加していなかったとかそんな感じだと思われます・・・ださい。 追検証の体なので、そういう形式で書いていますので、結論だけ知りたい方は最下部に行ってください。 検証ログ on Local 適当なプライベートリポジトリ marufeuille/privare_repository_test を用意しローカル環境で以下を実行すると問題なくクローンできます(公開鍵は設定済みです) # git clone git@github.com:marufeuille/privare_repository_test.git Cloning into 'privare_repository_test'... remote: Enumerating objects: 3, done. remote: Counting objects: 100% (3/3), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (3/3), done. では、このRepositoryを docker build 時にcloneすることを考えます。 次のようなDockerfileを考えます。 FROM ubuntu:22.04 RUN apt update && apt install -y openssh-client git RUN git clone git@github.com:marufeuille/privare_repository_test.git そしてこれをbuildすると当然落ちます。 # docker build -t test ....

2022-06-27

CloudBuild内でビルドするコンテナ内のpoetryからプライベートリポジトリを参照する方法

注意事項 その後の検証で --ssh オプションでも同等に動作することの検証が取れたのでこちらを参照してください。 はじめに 長いタイトルになってしまいましたが、表題のとおりです笑 cloudbuild内でプライベートリポジトリを参照する方法も、docker build内でプライベートリポジトリを参照する方法もどちらも色々と記事があったのですが、併せると中々なかったのでメモしておきます やったこと 結論 ざっくりいうと、以下のようにすれば動きます。 ポイントは private repositoryの秘密鍵はSecretManager経由で渡す docker buildはBUILDKITを有効化した上で、秘密鍵を–secretオプションでマウントする Dockerfile内では--mountオプションで秘密鍵を利用する steps: - name: 'gcr.io/cloud-builders/git' secretEnv: ['SSH_KEY'] entrypoint: 'bash' args: - -c - | echo "$$SSH_KEY" >> /root/.ssh/id_rsa chmod 400 /root/.ssh/id_rsa ssh-keyscan -t rsa github.com > /root/.ssh/known_hosts volumes: - name: 'ssh' path: /root/.ssh - name: gcr.io/cloud-builders/docker:latest dir: k8s_pipelines entrypoint: bash args: - -c - |- set -eux docker build --secret id=ssh,src=/root/.ssh/id_rsa -f Dockerfile -t tag-name:latest ....

2022-06-26