Skip to content

Merge pull request #98 from prgrms-be-devcourse/feature/#97 #41

Merge pull request #98 from prgrms-be-devcourse/feature/#97

Merge pull request #98 from prgrms-be-devcourse/feature/#97 #41

name: cd-dev-with-docker-compose
on:
push: # 아래 브랜치에 push되면 작동
branches: [ "develop" ]
# 작업들
jobs:
# 작업 명(본인이 지으면 됨)
deploy-ec2:
environment: develop # 환경 develop
runs-on: ubuntu-latest # 대여해주는 서버
env:
REDIS_HOST: ${{ secrets.LOCAL_REDIS_HOST }}
REDIS_PORT: ${{ secrets.REDIS_PORT }}
REDIS_PASSWORD: ${{ secrets.REDIS_PASSWORD }}
steps:
- uses: actions/checkout@v3 # 코드 저장소에 올려둔 코드 CI 서버 내려받은 후 특정 브랜치 전환하는 행위
- name: Set up JDK 17
uses: actions/setup-java@v3 # 요청한 자바 버전 다운로드하고 설정
with:
java-version: '17' # 지바 버전에 따라 다르게 설정 필요
distribution: 'temurin'
- name: Build with Gradle # 빌드 작업
uses: gradle/gradle-build-action@v2
with:
arguments: build
# 도커에 로그인
- name: docker hub login
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
# 도커 파일을 빌드하고 도커 허브 레파지토리에 푸쉬
- name: docker build & push
uses: docker/build-push-action@v4
with:
context: . # 경로 지정
push: true # docker에 push할지 여부
tags: ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPOSITORY }}:${{ secrets.DOCKER_TAG }} # push할 저장소와 태그
# 공통으로 사용되는 환경변수 파일 만들기
- name: make common env
run: |
cd ./deploy
echo '#!/bin/sh' >> .env
echo 'DOCKER_USERNAME=${{ secrets.DOCKER_USERNAME }}' >> .env
echo 'DOCKER_REPOSITORY=${{ secrets.DOCKER_REPOSITORY }}' >> .env
echo 'DOCKER_TAG=${{ secrets.DOCKER_TAG }}' >> .env
# spring에서 사용되는 환경변수 파일 만들기
- name: make spring env
run: |
cd ./deploy
echo '#!/bin/sh' >> spring.env
echo 'DATABASE_DEV_MYSQL_CLASSNAME=${{ secrets.DATABASE_DEV_MYSQL_CLASSNAME }}' >> spring.env
echo 'DATABASE_DEV_MYSQL_PASSWORD=${{ secrets.DATABASE_DEV_MYSQL_PASSWORD }}' >> spring.env
echo 'DATABASE_DEV_MYSQL_URL=${{ secrets.DATABASE_DEV_MYSQL_URL }}' >> spring.env
echo 'DATABASE_DEV_MYSQL_USERNAME=${{ secrets.DATABASE_DEV_MYSQL_USERNAME }}' >> spring.env
echo 'REDIS_HOST=${{ secrets.REDIS_HOST }}' >> spring.env
echo 'REDIS_PORT=${{ secrets.REDIS_PORT }}' >> spring.env
echo 'REDIS_PASSWORD=${{ secrets.REDIS_PASSWORD }}' >> spring.env
# docker-compose 파일과 env파일 EC2 서버로 전달하기
- name: send file to EC2
uses: appleboy/scp-action@master
with:
host: ${{ secrets.EC2_INSTANCE_HOST }}
port: ${{ secrets.EC2_INSTANCE_PORT }}
username: ${{ secrets.EC2_INSTANCE_USERNAME }}
key: ${{ secrets.EC2_INSTANCE_PRIVATE_KEY }}
source: "./deploy/*" # github action 서버 내부 경로
target: "~/dev/deploy" # ec2 서버 내부 경로
strip_components: 1 # 덮어쓰기할 file depth
- name: deploy EC2
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.EC2_INSTANCE_HOST }}
port: ${{ secrets.EC2_INSTANCE_PORT }}
username: ${{ secrets.EC2_INSTANCE_USERNAME }}
key: ${{ secrets.EC2_INSTANCE_PRIVATE_KEY }}
script: |
docker pull ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPOSITORY }}:${{ secrets.DOCKER_TAG }}
cd ~/dev/deploy
docker-compose -p tickerparis-dev-1 down
docker-compose -p ticketparis-dev-1 up -d
docker image prune -f