最近、全く更新出来ていなかった。
もう少し一つ一つの記事を軽い気持ちで書いてみてもいいのかもしれない(個人ブログだし)。
記事一覧はこちら
概要
JenkinsやCodeBuildなど、Dockerデーモンを叩ける環境でMavenを使ったJavaアプリケーションのビルドの高速化をする方法です
利用するJava, Mavenのバージョンを統一しつつ、Mavenの ~/.m2/repository/*
をキャッシュさせたいという需要がありました
上で名前を上げましたが、CodebuildとかGithub Actionsとかではビルドするときのイメージを指定する形になっているし、S3キャッシュなどのマネージドのキャッシュ機構があるので、前述の需要は簡単に満たせたりします
なので、どちらかというと、VMから直で泥臭くコンテナビルドするときに使える方法になります
方法
この手法でビルドを動かしてみている環境はJenkinsなのですが、Dockerの --cache-from
を一緒に利用することで、ビルド時間を半分以下にすることができました。
MY_PRIVATE_REPOSITORY=aws_account_id.dkr.ecr.region.amazonaws.com:sample-app/maven # 最初の1回と定期的に下記を実施 # ベースイメージのmavenコンテナにセキュリティアップデートとかを入れるため docker pull maven:3.6-amazoncorretto-8 docker tag maven:3.6-amazoncorretto-8 ${MY_PRIVATE_REPOSITORY}:sample-app docker push ${MY_PRIVATE_REPOSITORY}:sample-app # ビルド CONTAINER_ID=$(docker run -d --rm --volume $(pwd):/workspace --workdir '/workspace' ${MY_PRIVATE_REPOSITORY}:sample-app sleep 1800s) # バックエンドで起動 docker exec ${CONTAINER_ID} mvn -U package -Pdev docker commit ${CONTAINER_ID} ${MY_PRIVATE_REPOSITORY}:sample-app # ダウンロードしたライブラリをコンテナに閉じ込める docker stop ${CONTAINER_ID} docker push ${MY_PRIVATE_REPOSITORY}:sample-app