Skip to content

ci/cd: test9

ci/cd: test9 #9

Workflow file for this run

name: CI/CD Workflow for Multi-Module Project
on:
push:
branches:
- setting/change-cicd-action
jobs:
ci:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v2
- name: Set up JDK 17
uses: actions/setup-java@v2
with:
java-version: '17'
distribution: 'temurin'
- name: Build and Test Each Module
run: |
./gradlew :ttoklip-api:clean :ttoklip-api:build :ttoklip-api:test
./gradlew :ttoklip-batch:clean :ttoklip-batch:build :ttoklip-batch:test
./gradlew :ttoklip-notification:clean :ttoklip-notification:build :ttoklip-notification:test
- name: Verify Build Artifacts
run: |
echo "Verifying ttoklip-api artifacts..."
ls -la ttoklip-api/build/libs/
echo "Verifying ttoklip-batch artifacts..."
ls -la ttoklip-batch/build/libs/
echo "Verifying ttoklip-notification artifacts..."
ls -la ttoklip-notification/build/libs/
echo "Verifying docker-compose.prod.yml..."
ls -la docker-compose.prod.yml
- name: Save Build Artifacts
uses: actions/upload-artifact@v3
with:
name: build-artifacts
path: |
ttoklip-api/build/libs/ttoklip-api-SNAPSHOT.jar
ttoklip-batch/build/libs/ttoklip-batch-SNAPSHOT.jar
ttoklip-notification/build/libs/ttoklip-notification-SNAPSHOT.jar
docker-compose.prod.yml
- name: Verify Saved Artifacts
run: |
echo "Artifacts saved successfully. Verifying locally before proceeding..."
ls -la ttoklip-api/build/libs/ttoklip-api-SNAPSHOT.jar
ls -la ttoklip-batch/build/libs/ttoklip-batch-SNAPSHOT.jar
ls -la ttoklip-notification/build/libs/ttoklip-notification-SNAPSHOT.jar
ls -la docker-compose.prod.yml
cd:
needs: ci
runs-on: ubuntu-latest
env:
AWS_REGION: "ap-northeast-2"
steps:
- name: Download Build Artifacts
uses: actions/download-artifact@v3
with:
name: build-artifacts
path: ./deploy
- name: Verify and Prepare Deployment Files
run: |
mkdir -p deploy
echo "Checking downloaded files..."
ls -la ./deploy/
# JAR 파일 확인 및 복사
for module in ttoklip-api ttoklip-batch ttoklip-notification; do
echo "Processing $module..."
if [ -f ./deploy/${module}-SNAPSHOT.jar ]; then
echo "Found ${module}-SNAPSHOT.jar at root level."
cp ./deploy/${module}-SNAPSHOT.jar deploy/
elif [ -f ./deploy/${module}/build/libs/${module}-SNAPSHOT.jar ]; then
echo "Found ${module}-SNAPSHOT.jar in build/libs."
cp ./deploy/${module}/build/libs/${module}-SNAPSHOT.jar deploy/
else
echo "No JAR file found for $module."
ls -la ./deploy/
ls -la ./deploy/$module/
ls -la ./deploy/$module/build/libs/
exit 1
fi
done
# docker-compose.prod.yml 확인 및 복사
if [ -f ./deploy/docker-compose.prod.yml ]; then
echo "docker-compose.prod.yml exists. Comparing content..."
if cmp -s ./deploy/docker-compose.prod.yml deploy/docker-compose.prod.yml; then
echo "docker-compose.prod.yml is identical. Skipping copy."
else
echo "docker-compose.prod.yml differs. Overwriting."
cp ./deploy/docker-compose.prod.yml deploy/
fi
else
echo "docker-compose.prod.yml not found in deploy folder. Copying..."
cp ./deploy/docker-compose.prod.yml deploy/
fi
# 배포 패키지 생성
echo "Creating deployment package..."
zip -r deploy-package.zip deploy
- name: Generate New Deployment Folder on EC2
run: |
aws ssm send-command \
--document-name "AWS-RunShellScript" \
--targets "Key=instanceIds,Values=${{ secrets.EC2_INSTANCE_ID }}" \
--parameters 'commands=[
"cd /home/ec2-user/ttoklip/application",
"version=$(($(ls | grep deploy | sed s/deploy//g | sort -n | tail -1)+1))",
"mkdir deploy$version",
"echo $version > /home/ec2-user/ttoklip/application/latest_version.txt"
]' \
--region $AWS_REGION
- name: Upload Deployment Files to EC2
run: |
aws ssm send-command \
--document-name "AWS-RunShellScript" \
--targets "Key=instanceIds,Values=${{ secrets.EC2_INSTANCE_ID }}" \
--parameters 'commands=[
"cd /home/ec2-user/ttoklip/application",
"version=$(cat /home/ec2-user/ttoklip/application/latest_version.txt)",
"unzip -o /home/ec2-user/deploy-package.zip -d deploy$version"
]' \
--region $AWS_REGION
- name: Copy .env to New Deployment Folder
run: |
aws ssm send-command \
--document-name "AWS-RunShellScript" \
--targets "Key=instanceIds,Values=${{ secrets.EC2_INSTANCE_ID }}" \
--parameters 'commands=[
"cd /home/ec2-user/ttoklip/application",
"version=$(cat /home/ec2-user/ttoklip/application/latest_version.txt)",
"cp /home/ec2-user/ttoklip/application/.env /home/ec2-user/ttoklip/application/deploy$version/"
]' \
--region $AWS_REGION
- name: Start Docker Compose on EC2
run: |
aws ssm send-command \
--document-name "AWS-RunShellScript" \
--targets "Key=instanceIds,Values=${{ secrets.EC2_INSTANCE_ID }}" \
--parameters 'commands=[
"cd /home/ec2-user/ttoklip/application",
"version=$(cat /home/ec2-user/ttoklip/application/latest_version.txt)",
"cd deploy$version",
"docker-compose -f docker-compose.prod.yml --env-file .env up -d --build"
]' \
--region $AWS_REGION