はじめに

こんにちは!アイレット株式会社DX開発事業部の小澤です。

今回は、CodePipelineでのパイプライン構築時にCodeBuildを使って外部リポジトリからサブモジュールを取得する方法についてまとめました。

前提

AWSのCodePipelineにて、Bitbucket CloudのリポジトリをSourceとしてビルド、デプロイを行うパイプライン構築を行なっておりました。

その際、サブモジュールの取得のためにgit submodule syncgit submodule updateをしただけでは取得ができませんでしたので、その対処法になります。

対処法

紹介する方法は、CodeBuild内でリポジトリをクローンするやり方です。

まず、以下にbuildspec.ymlのサンプルを置いておきます。

version: 0.2
env:
  secrets-manager:
    # リポジトリの認証情報をSecrets Managerから取得する
    GIT_USER: "your-secret-arn:username"
    GIT_TOKEN: "your-secret-arn:token"
phases:
  build:
    commands:
      #  Gitの認証ヘルパーを設定し、Secrets Managerから取得した情報を書き込む
      - git config --global credential.helper store
      - echo "https://${GIT_USER}:${GIT_TOKEN}@bitbucket.org" > ~/.git-credentials
      # 認証が通る状態で--recursiveをつけてクローンする
      - git clone --recursive https://bitbucket.org/owner/repo.git
      # クローンしたリポジトリの階層へ移動する
      - cd repo
    # 以降にDockerビルドなどのコマンドを記述
    - docker build -t my-app .

このbuildspec.ymlについて詳しく解説します。

まず認証情報はSecrets Managerに格納し、ここで取得して環境変数として設定しています。

version: 0.2
env:
  secrets-manager:
    # リポジトリの認証情報をSecrets Managerから取得する
    GIT_USER: "your-secret-arn:username"
    GIT_TOKEN: "your-secret-arn:token"

次に、buildフェーズにて取得した認証情報をGitの認証ヘルパーへ書き込みます。

#  Gitの認証ヘルパーを設定し、Secrets Managerから取得した情報を書き込む
- git config --global credential.helper store
- echo "https://${GIT_USER}:${GIT_TOKEN}@bitbucket.org" > ~/.git-credentials

その状態でクローンをします。
–recursiveをつけることで、サブモジュールも一緒に取得することができます。

# 認証が通る状態で--recursiveをつけてクローンする
- git clone --recursive https://bitbucket.org/owner/repo.git

以降のビルドはクローンしたリポジトリの階層で行ってください。

- cd repo

その後ビルドのためのコマンドを記述してください。

この方法で外部リポジトリからサブモジュールを取得できるようになると思いますので参考になりましたら幸いです。