Feature/137: μ΄μμλ² λ°°ν¬ #2
This file contains 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: Daily Phrase Prod API CI/CD | |
on: | |
pull_request: | |
branches: | |
- main | |
types: | |
- closed | |
workflow_dispatch: | |
jobs: | |
build-and-deploy: | |
runs-on: ubuntu-latest | |
if: github.event.pull_request.merged == true | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Set up JDK 17 | |
uses: actions/setup-java@v3 | |
with: | |
java-version: '17' | |
distribution: 'temurin' | |
- name: Create application.yml | |
run: | | |
mkdir -p ./src/main/resources/ | |
echo "${{ secrets.APPLICATION_YML }}" > ./src/main/resources/application.yml | |
- name: Create firebase directory | |
run: mkdir -p ./src/main/resources/firebase/ | |
- name: Create JSON | |
uses: jsdaniell/[email protected] | |
with: | |
name: "firebase-adminsdk.json" | |
json: ${{ secrets.SECRET_JSON }} | |
dir: "./src/main/resources/firebase/" | |
- name: Grant execute permission for Gradlew | |
run: chmod +x ./gradlew | |
- name: Build with Gradle | |
run: ./gradlew bootJar -x test -Pprofile=prod | |
- name: Upload build artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: build-artifact | |
path: build/libs/*.jar | |
- name: Download build artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: build-artifact | |
path: . | |
- name: Prepare app.jar for Docker build | |
run: | | |
JAR_FILE=$(ls build/libs/*.jar | head -n 1) | |
cp $JAR_FILE app.jar | |
- name: Install or Update AWS CLI | |
run: | | |
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" | |
unzip awscliv2.zip | |
sudo ./aws/install --update | |
- name: Configure AWS CLI | |
run: | | |
aws configure set aws_access_key_id ${{ secrets.AWS_ACCESS_KEY_ID }} | |
aws configure set aws_secret_access_key ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
aws configure set default.region ${{ secrets.AWS_REGION }} | |
- name: Log in to AWS ECR | |
run: | | |
aws ecr get-login-password --region ${{ secrets.AWS_REGION }} | docker login --username AWS --password-stdin ${{ secrets.AWS_ECR_REPOSITORY_URL }} | |
- name: Build Docker image | |
run: | | |
docker build --build-arg SPRING_PROFILES_ACTIVE=prod --build-arg COLLECTOR_IP=${{ secrets.EC2_HOST }} -t ${{ secrets.AWS_ECR_REPOSITORY_URL }}:${{ github.sha }} . | |
- name: Push Docker image to ECR | |
run: | | |
docker push ${{ secrets.AWS_ECR_REPOSITORY_URL }}:${{ github.sha }} | |
- name: Deploy to EC2 instance | |
uses: appleboy/ssh-action@master | |
with: | |
host: ${{ secrets.EC2_HOST }} | |
username: ${{ secrets.EC2_USERNAME }} | |
key: ${{ secrets.EC2_SSH_KEY }} | |
port: 22 | |
script: | | |
aws ecr get-login-password --region ${{ secrets.AWS_REGION }} | docker login --username AWS --password-stdin ${{ secrets.AWS_ECR_REPOSITORY_URL }} | |
# Docker μ΄λ―Έμ§ pull | |
docker pull ${{ secrets.AWS_ECR_REPOSITORY_URL }}:${{ github.sha }} | |
# κΈ°μ‘΄ 컨ν μ΄λ μ€μ§ λ° μ κ±° | |
docker stop dailyphrase-prod-api || true | |
docker rm dailyphrase-prod-api || true | |
# μλ‘μ΄ Docker 컨ν μ΄λ μ€ν | |
docker run -d --name dailyphrase-prod-api -e SPRING_PROFILES_ACTIVE=prod -p 8080:8080 ${{ secrets.AWS_ECR_REPOSITORY_URL }}:${{ github.sha }} |