Skip to content

[infra] deploy μˆ˜μ • #29

[infra] deploy μˆ˜μ •

[infra] deploy μˆ˜μ • #29

Workflow file for this run

name: Deploy to Production
on:
push:
branches:
- main
env:
AWS_REGION: ap-northeast-2
S3_BUCKET: moviezip-s3-source
CODEDEPLOY_APP_NAME: moviezip-deploy
CODEDEPLOY_DEPLOYMENT_GROUP: moviezip-deploy-group
jobs:
deploy:
runs-on: ubuntu-latest
steps:
# 1. μ½”λ“œ 체크아웃
- name: Checkout source code
uses: actions/checkout@v4
# 2. JDK 17 μ„€μΉ˜
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
# 3. Maven μΊμ‹œ
- name: Cache Maven packages
uses: actions/cache@v3
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
# 4. resources 폴더 생성 및 application-prod.yml μž‘μ„±
- name: Create src/main/resources and write application-prod.yml
shell: bash
env:
APPLICATION: ${{ secrets.APPLICATION_PROD }}
run: |
cd demo
mkdir -p src/main/resources
printf '%s' "$APPLICATION" > src/main/resources/application-prod.yml
echo "== application-prod.yml created =="
# 5. Maven λΉŒλ“œ
- name: Build with Maven
run: |
cd demo
mvn clean package -DskipTests
# 6. zip 파일 생성
- name: Make zip file
run: |
# deploy 디렉토리 생성
mkdir -p deploy
# 파일 볡사
cp docker-compose-blue.yml deploy/ || true
cp docker-compose-green.yml deploy/ || true
cp appspec.yml deploy/ || true
cp Dockerfile deploy/ || true
cp scripts/*.sh deploy/ || true
cp deploy.sh deploy/ || true
# Maven μ‚°μΆœλ¬Ό 볡사
if [ -d "demo/target" ]; then
cp demo/target/*.jar deploy/ || (echo "No jar found in demo/target" && exit 1)
else
echo "demo/target not found; did build step run?" && exit 1
fi
# μ‹€ν–‰ κΆŒν•œ λΆ€μ—¬
chmod -R a+x deploy/*.sh || true
# μƒμ„±λœ deploy λ‚΄μš© 확인 (λ””λ²„κ·Έμš©)
ls -la deploy
ls -la deploy/*.sh
ls -la deploy/*.jar
# zip 생성 (경둜 제거)
zip -r -qq -j spring-build.zip deploy
echo "== spring-build.zip created =="
ls -la spring-build.zip
# 7. AWS 자격증λͺ… μ„€μ •
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v2
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ env.AWS_REGION }}
# 8. S3 μ—…λ‘œλ“œ
- name: Upload to S3
id: s3_upload
run: |
aws s3 cp ./spring-build.zip s3://${S3_BUCKET}/spring-build-${{ github.run_id }}.zip --region ${AWS_REGION}
echo "s3_key=spring-build-${{ github.run_id }}.zip" >> $GITHUB_OUTPUT
# 9. CodeDeploy 배포 (AWS CLI 방식)
- name: Deploy via CodeDeploy
run: |
aws deploy create-deployment \
--application-name ${{ env.CODEDEPLOY_APP_NAME }} \
--deployment-config-name CodeDeployDefault.OneAtATime \
--deployment-group-name ${{ env.CODEDEPLOY_DEPLOYMENT_GROUP }} \
--s3-location bucket=${{ env.S3_BUCKET }},bundleType=zip,key=${{ steps.s3_upload.outputs.s3_key }} \
--region ${{ env.AWS_REGION }}