ci/cd: test9 #9
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |