CICDメモ
もちろんです!
今日あなたが実際に取り組んだ内容を 「時系列」「目的」「問題」「解決方法」「得られた成果」 の構成で、
再利用できる技術メモとして使えるように まとめました。
📘 今日取り組んだ CI/CD 構築とトラブルシューティングまとめ
🏁 目的
GitHub へ push すると、
EC2 上の Spring Boot アプリが自動でデプロイ&自動起動する CI/CD パイプライン を構築すること。
🧩 全体の流れ
- CodePipeline(Git → Build → Deploy)
- CodeBuild(jar 作成)
- CodeDeploy(EC2 へデプロイ)
- start_server.sh により Spring Boot を自動起動させる
🛠 今日発生した問題と解決の流れ(詳細版)
① CodeDeploy は通るが、Spring Boot が起動しない
🔍 原因候補
appspec.ymlでAfterInstallに start_server.sh を置いていた/home/ec2-user/appの権限が root のまま- start_server.sh 実行時に
Permission deniedが発生していた
✅ 解決
ApplicationStartで start_server.sh を実行するよう appspec.yml を修正/home/ec2-user/appの所有者を ec2-user に変更
sudo chown -R ec2-user:ec2-user /home/ec2-user/app
② start_server.sh 実行時の Permission denied
🔍 症状
手動実行すると:
scripts/start_server.sh: line 17: app.log: Permission denied
🔍 原因
/home/ec2-user/appが root 所有だったため、app.logを書き込めずスクリプトがset -eで強制終了していた。
✅ 解決
- 所有者変更:
sudo chown -R ec2-user:ec2-user /home/ec2-user/app
⭐ 結果
- nohup によるバックグラウンド起動が成功
- Spring Boot が手動実行で正常起動できるように
③ /home/ec2-user/app に scripts がコピーされていない問題
🔍 理解したこと
- CodeDeploy は成果物(zip)の中の scripts を直接実行する
- そのため “scripts が EC2 上にコピーされていなくても起動自体はできる”
👉 ただし、手動デバッグのために appspec.yml で scripts をコピーする構成に変更:
files:
- source: scripts/
destination: /home/ec2-user/app/scripts
④ start_server.sh で Spring Boot のバックグラウンド起動を実現
使用したスクリプト:
#!/usr/bin/env bash
set -e
APP_DIR=/home/ec2-user/app
JAR_NAME=demo-0.0.1-SNAPSHOT.jar
cd "$APP_DIR"
PID=$(pgrep -f "$JAR_NAME" || true)
if [ -n "$PID" ]; then
kill "$PID"
sleep 5
fi
nohup java -jar "$JAR_NAME" > app.log 2>&1 &
⭐ 結果
- CodeDeploy → ApplicationStart で自動起動成功
- 手動実行でも問題なし
⑤ デプロイ後に Spring Boot が自動で起動するようになった
最終確認:
curl http://localhost:8080/hello
出力:
Hello from Spring Boot!
⭐ 結果
- CodePipeline → CodeDeploy → start_server.sh 実行が完全自動化
- push → 自動ビルド → 自動デプロイ → アプリ起動 の流れが完成
🎉 今日で達成できたこと
✅ CodeDeploy の正しい hooks の理解(ApplicationStart/Stop)
✅ 成果物(deployment-archive)の仕組み理解
✅ EC2 権限問題(root → ec2-user)
✅ start_server.sh / stop_server.sh の実務的スクリプト作成
✅ Spring Boot の自動起動を CI/CD に乗せる
✅ ログの読み方(scripts.log)
✅ インフラとアプリの両側からのトラブルシューティングスキル
🏆 最終まとめ(あなたが作り上げたもの)
Git push
→ CodePipeline が起動
→ CodeBuild が jar 作成
→ CodeDeploy が EC2 へデプロイ
→ ApplicationStart で start_server.sh 実行
→ Spring Boot が自動起動
→ http://EC2:8080/hello が即反映
これができているということは、
あなたは実務レベルで “CI/CD が組めるエンジニア” になりました。
本当にお疲れ様です👏🔥
このメモは、次の案件の資料やポートフォリオにも使えます。
必要なら 短い要約版 や LT 資料風PDF などにもまとめ直せますので言ってください!