📝

CodeBuild でビルドディレクトを固定する方法

に公開

pre_build フェーズでビルド用ディレクトリを作成しましょう。

CodeBuild のソースディレクトリについて

Environment variables in build environments - AWS CodeBuild

CODEBUILD_SRC_DIR
The directory path that CodeBuild uses for the build (for example, /tmp/src123456789/src).

CodeBuild で複数のソースに別々のビルドを実行してみた | DevelopersIO

おそらく DOWNLOAD_SOURCE フェーズでプライマリソースとセカンダリソースをソースコードがある S3 や Git リポジトリから、CodeBuild サーバー内の特定のディレクトリへダウンロードしていると思われます。

その際、プライマリソースは CodeBuild サーバーのデフォルトのディレクトリにダウンロードされ、セカンダリソースはソース識別子ごとに別々のディレクトリにダウンロードされるようになっていると思われます。

上述の通り、CodeBuild ではデフォルトで CODEBUILD_SRC_DIR という変数のディレクトリにソースがダウンロードされ、同ディレクトリでビルドが実行されます。
ただし、CODEBUILD_SRC_DIR の src123456789 という値はビルドごとに変化します。
そのため、ビルドディレクトリを固定する必要がある場合には buildspec.yaml で別途定義が必要です。

やってみた

Getting started with CodeBuild - AWS CodeBuild
上記チュートリアルで試してみました。
変更したのは buildspec.yaml のみで、buildspec.yaml に以下の内容を定義しました。

buildspec.yaml
version: 0.2
phases:
  install:
    runtime-versions:
      java: corretto11
  pre_build:
    commands:
      - mkdir -p /fixed/build/path
      - cp -r . /fixed/build/path
      - cd /fixed/build/path
  build:
    commands:
      - pwd
      - mvn install
artifacts:
  files:
    - target/messageUtil-1.0.jar
  base-directory: /fixed/build/path

ポイントは pre_build フェーズです。
pre_build フェーズで以下の処理を行っています。

  • 任意のディレクトリを作成
  • デフォルトのディレクトリから作成したディレクトリに資材をすべてコピー
  • 作成したディレクトリへ移動

上記処理によりビルドディレクトリが作成したディレクトリに固定されます。
なお、アーティファクトのディレクトリも変更したディレクトにあわせています。

上記 buildspec.yaml でビルドを実行した際のログを抜粋してみました。

# CODEBUILD_SRC_DIR 変数の実際のパス
[Container] 2025/04/04 07:52:27.919422 CODEBUILD_SRC_DIR=/codebuild/output/src3804184564/src

# pre_build フェーズでのコマンド実行
[Container] 2025/04/04 07:52:28.913681 Running command mkdir -p /fixed/build/path
[Container] 2025/04/04 07:52:28.922368 Running command cp -r . /fixed/build/path
[Container] 2025/04/04 07:52:28.931226 Running command cd /fixed/build/path

# build フェーズでのコマンド実行
[Container] 2025/04/04 07:52:28.985894 Running command pwd
/fixed/build/path

# 作成したディレクトリでビルド実行
[Container] 2025/04/04 07:52:28.993573 Running command mvn install

# アーティファクトアップロード
[Container] 2025/04/04 07:52:37.316478 Expanding file paths for base directory /fixed/build/path
[Container] 2025/04/04 07:52:37.331511 Phase complete: UPLOAD_ARTIFACTS State: SUCCEEDED

上記ログの通り、pre_build フェーズで作成したディレクトリへ移動することで、build フェーズではデフォルトの CODEBUILD_SRC_DIR 以外でビルドができます。
ビルド完了後、アーティファクト用の S3 バケットにアーティファクトがアップロードされていることも確認できました。

まとめ

今回は CodeBuild でビルドディレクトを固定する方法を紹介しました。
どなたかの参考になれば幸いです。

参考資料

Discussion