배포 0. #97
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: coffee-meet CD | |
on: | |
pull_request: | |
branches: | |
- main | |
jobs: | |
test_and_deploy: | |
runs-on: ubuntu-latest | |
steps: | |
- name: 현재 작업중인 Repository를 서브 모듈과 함께 가져온다. | |
uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
token: ${{ secrets.ACTION_TOKEN }} | |
- name: CD 프로세스를 최적화 하기 위해 Gradle 정보를 캐싱한다. | |
uses: actions/cache@v3 | |
with: | |
path: | | |
~/.gradle/caches | |
~/.gradle/wrapper | |
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} | |
restore-keys: | | |
${{ runner.os }}-gradle- | |
- name: JDK 17 설치한다. | |
uses: actions/setup-java@v3 | |
with: | |
java-version: '17' | |
distribution: 'temurin' | |
- name: .env 파일에 깃 Secrets 로부터 값을 가져와 기록한다. | |
run: echo "${{ secrets.ENV_PROPERTIES }}" > ./.env | |
- name: Gradle 명령 실행을 위한 권한을 부여한다. | |
run: chmod +x gradlew | |
- name: Gradle test & build 를 수행한다. | |
run: | | |
./gradlew clean test -Pprofile=test | |
./gradlew clean build | |
- name: 현재 디렉토리에 있는 Dockerfile(Jar)을 이미지 빌드한다. | |
run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/boot-prac-ci . | |
- name: Docker Hub 에 로그인한다. | |
uses: docker/login-action@v2 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: 빌드된 도커 이미지(Jar)를 Docker Hub 에 푸쉬한다. | |
run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/boot-prac-ci:latest | |
- name: ./.env 경로의 환경 변수 파일을 Ec2 서버의 기본 경로에 전달한다. | |
uses: appleboy/scp-action@master | |
with: | |
username: ubuntu | |
host: ${{ secrets.HOST }} | |
key: ${{ secrets.PRIVATE_KEY }} | |
source: "./.env" | |
target: "/home/ubuntu" | |
- name: 기존의 Jar 이미지를 삭제하고, Docker Hub 를 통해 새 Jar 이미지를 실행한다. | |
uses: appleboy/[email protected] | |
with: | |
host: ${{ secrets.HOST }} | |
username: ubuntu | |
key: ${{ secrets.PRIVATE_KEY }} | |
script: | | |
sudo docker ps -q | grep -v $(sudo docker ps -qf "name=redis") | xargs -r sudo docker stop | |
sudo docker ps -aq | grep -v $(sudo docker ps -aqf "name=redis") | xargs -r sudo docker rm | |
sudo docker image prune -a -f | |
sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/boot-prac-ci:latest | |
sudo docker run -d --log-driver=syslog --env-file .env -p 8080:8080 ${{ secrets.DOCKERHUB_USERNAME }}/boot-prac-ci:latest |