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 に以下の内容を定義しました。
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