Skip to content

Enhance main-deploy.yml with new environment variables #53

Enhance main-deploy.yml with new environment variables

Enhance main-deploy.yml with new environment variables #53

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 }} # ๋‚˜๋จธ์ง€ ์„ค์ • ๋‚ด์šฉ
DB_URL: ${{ secrets.DB_URL }}
DB_USERNAME: ${{ secrets.DB_USERNAME }}
DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
REDIS_HOST: ${{ secrets.REDIS_HOST }} # ๋„์ปค ์ปดํฌ์ฆˆ์˜ redis ์„œ๋น„์Šค ์ด๋ฆ„: redis
REDIS_PORT: ${{ secrets.REDIS_PORT }}
MONGODB_URI: ${{ secrets.MONGODB_URI }} # ๋„์ปค ์ปดํฌ์ฆˆ์˜ mongo ์„œ๋น„์Šค ์ด๋ฆ„: mongodb://mongo:27017/dbname
JWT_SECRET: ${{ secrets.JWT_SECRET }}
run: |
cd demo
mkdir -p src/main/resources
# ๊ธฐ์กด APPLICATION ๋‚ด์šฉ์„ ๋จผ์ € ์“ฐ๊ณ , ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๋’ค์— ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์น˜ํ™˜
printf '%s\n' "$APPLICATION" \
| sed "s|\${DB_URL}|$DB_URL|" \
| sed "s|\${DB_USERNAME}|$DB_USERNAME|" \
| sed "s|\${DB_PASSWORD}|$DB_PASSWORD|" \
| sed "s|\${REDIS_HOST}|$REDIS_HOST|" \
| sed "s|\${REDIS_PORT}|$REDIS_PORT|" \
| sed "s|\${MONGODB_URI}|$MONGODB_URI|" \
| sed "s|\${JWT_SECRET}|$JWT_SECRET|" \
> src/main/resources/application-prod.yml
echo "== application-prod.yml created and values inserted =="
# 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 }}