Skip to content

(24/05/15 - 3) 클로즈 베타 테스트 버전 배포합니다. #16

(24/05/15 - 3) 클로즈 베타 테스트 버전 배포합니다.

(24/05/15 - 3) 클로즈 베타 테스트 버전 배포합니다. #16

# workflow 이름
name: 백엔드 운영서버 배포
# event trigger
on:
# 해당 브랜치로 push 될 때 실행됩니다.
push:
branches:
- main
permissions:
contents: read
jobs:
build:
if: github.repository == 'COFLLL/CoverFlow-BE'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
## JDK Setting
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'corretto'
## application.yml 파일을 생성합니다.
- name: make application.yml
run: |
cd ./src/main/resources
touch ./application.yml
echo "${{ secrets.APPLICATION }}" > ./application.yml
shell: bash
## application-prod.yml 파일을 생성합니다.
- name: make application-prod.yml
if: contains(github.ref, 'main')
run: |
cd ./src/main/resources
touch ./application-prod.yml
echo "${{ secrets.APPLICATION_PROD }}" > ./application-prod.yml
shell: bash
## gradlew 실행 권한 부여
- name: Grant execute permisson for gradlew
run: chmod +x gradlew
- name: Build with Gradle (without Test)
run: ./gradlew clean build -x test --stacktrace
########## CD(Continuous Delivery/Deployment) ##########
## docker hub에 로그인하고 cofl-prod에 이미지를 빌드 & push 합니다.
- name: Docker build & push to prod repo
if: contains(github.ref, 'main')
run: |
docker login -u "${{ secrets.DOCKER_USERNAME_PROD }}" -p "${{ secrets.DOCKER_PASSWORD_PROD }}"
docker build -f Dockerfile-prod -t "${{ secrets.DOCKER_USERNAME_PROD }}"/cofl-prod .
docker push "${{ secrets.DOCKER_USERNAME_PROD }}"/cofl-prod
## AWS EC2 인스턴스에 접속하고 production을 배포합니다.
- name: Deploy to Prod
uses: appleboy/ssh-action@master
id: deploy-prod
if: contains(github.ref, 'main')
with:
host: ${{ secrets.HOST_PROD }} # EC2 인스턴스 퍼블릭 DNS
username: ${{ secrets.USERNAME }} # 인스턴스를 시작하는 데 사용되는 AMI에 정의된 사용자 이름을 입력합니다.
key: ${{ secrets.PRIVATE_KEY }} # 키 페어의 pem 키
# sudo docker-compose up -d
script: |
sudo docker login -u "${{ secrets.DOCKER_USERNAME_PROD }}" -p "${{ secrets.DOCKER_PASSWORD_PROD }}"
sudo docker stop cofl_spring_boot_prod
sudo docker rm -f $(sudo docker ps --filter 'status=exited' -a -q)
sudo docker pull "${{ secrets.DOCKER_USERNAME_PROD }}"/cofl-prod
sudo docker run --name cofl_spring_boot_prod -d --log-driver=syslog -p 8082:8082 -e SPRING_PROFILES_ACTIVE=prod "${{ secrets.DOCKER_USERNAME_PROD }}"/cofl-prod
sudo docker image prune -a -f