Skip to content

Merge pull request #83 from review-mate/hotfix #66

Merge pull request #83 from review-mate/hotfix

Merge pull request #83 from review-mate/hotfix #66

Workflow file for this run

# github repository Actions 페이지에 나타낼 이름
name: Development Automation
# event trigger
on:
push:
branches:
- release
permissions:
contents: read
jobs:
####################################################################################################################################
development-automation-prod-server-1:
if: contains(github.ref, 'release')
runs-on: ubuntu-latest
steps:
## jdk setting
- uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin' # https://github.com/actions/setup-java
## gradle caching
- name: Gradle Caching
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
## create application-prod.properties
- name: make application-prod.properties
run: |
mkdir -p ./src/main/resources
cd ./src/main/resources
touch ./application-prod.properties
echo "${{ secrets.PROPERTIES_PROD }}" > ./application-prod.properties
touch ./sonarqube.properties
echo "${{ secrets.SONAR_PROPERTIES }}" > ./sonarqube.properties
shell: bash
## gradle build
- name: Build with Gradle
run: ./gradlew build
## docker build & push to production
- name: Docker build & push to prod
run: |
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
docker build -f Dockerfile-prod -t ${{ secrets.DOCKER_REPO_PROD }} .
docker push ${{ secrets.DOCKER_REPO_PROD }}
## deploy to production AZ 1
- name: Deploy to prod
uses: appleboy/ssh-action@master
id: deploy-prod-az-1
with:
host: ${{ secrets.EC2_DOMAIN_PROD_1 }}
username: ec2-user
key: ${{ secrets.AWS_PEM_KEY }}
port: 22
envs: GITHUB_SHA
script: |
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
sudo docker rm -f $(docker ps -qa)
sudo docker pull ${{ secrets.DOCKER_REPO_PROD }}
sudo docker-compose up -d
sudo docker image prune -f
####################################################################################################################################
development-automation-prod-server-2:
needs: development-automation-prod-server-1
if: contains(github.ref, 'release')
runs-on: ubuntu-latest
steps:
## jdk setting
- uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin' # https://github.com/actions/setup-java
## gradle caching
- name: Gradle Caching
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
## deploy to production AZ 2
- name: Deploy to prod
uses: appleboy/ssh-action@master
id: deploy-prod-az-2
with:
host: ${{ secrets.EC2_DOMAIN_PROD_2 }}
username: ec2-user
key: ${{ secrets.AWS_PEM_KEY }}
port: 22
envs: GITHUB_SHA
script: |
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
sudo docker rm -f $(docker ps -qa)
sudo docker pull ${{ secrets.DOCKER_REPO_PROD }}
sudo docker-compose up -d
sudo docker image prune -f
####################################################################################################################################
## slack alarm
action-slack:
if: success()
needs: [development-automation-prod-server-1, development-automation-prod-server-2]
runs-on: ubuntu-latest
steps:
- name: Slack Alarm
uses: 8398a7/action-slack@v3
with:
status: ${{ job.status }}
author_name: GitHub-Actions development automation
fields: repo,message,commit,author,ref,job,took
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_EC2_DEVELOPMENT_ALARM_WEBHOOK }}
if: always() # Pick up events even if the job fails or is canceled.