はじめに
ローカルでCodeBuildを実行しようといろんな記事を参考にしましたが、うまく起動できず、困ったので、同じように困った人の解決になればよいと思って記事にしました。
準備
事前に以下、インストールが必要になります。
- git
- docker
docker image ダウンロード
AmazonLinux2のARM版
AmazonLinux2のARM版のイメージがあるので、こちらをダウンロードします。
ここがハマりポイントで、単純に検索しただけでは、x86_64版しか見つからず、そっちを使ってしまい、うまくビルドできなかった
docker pull public.ecr.aws/codebuild/amazonlinux2-aarch64-standard:3.0
エージェントのDockerイメージダウンロード
こちらもARM版をダウンロードします。
docker pull public.ecr.aws/codebuild/local-builds:aarch64
コンテナ起動シェルダウンロード
コンテナを起動する、シェルファイルをダウンロードして、実行権限を付与します。
curl -OL https://raw.githubusercontent.com/aws/aws-codebuild-docker-images/master/local_builds/codebuild_build.sh
chmod +x codebuild_build.sh
buildspec.ymlの作成
buildspec.ymlファイルを作成します。
version: 0.2
phases:
install:
commands:
- echo 'Hello World'
このときのディレクトリ構成は以下の状態です。
codebuild/
buildspec.yml
codebuild_build.sh
CodeBuild実行
以下、コマンドを実行すると、CodeBuildがローカルで実行できます。
./codebuild_build.sh -i public.ecr.aws/codebuild/amazonlinux2-aarch64-standard:3.0 -a output -l public.ecr.aws/codebuild/local-builds:aarch64
おまけ
CodeBuildからローカルで起動してる別コンテナに接続したい
buildspec.ymlで例えばmysqlというコンテナに接続したい、とするとcodebuild_build.shを少し編集するとできるようになります。
簡単に説明すると、CodeBuildコンテナのネットワークにmysqlコンテナのネットワークを所属させてあげれば、可能になります。
※もしかしたら、別の方法もあるのかも知れませんが、この方法でも可能です。
変数は適当にdocker_command2としてます。
所属させたいコンテナのネットワーク名はdocker network list
を実行すればわかります。
docker_command2="docker network connec agent-resources_default ネットワーク名(mysqlコンテナが所属ネットワーク名)
eval $docker_command2