Merge pull request #115 from prgrms-be-devcourse/feature/#113 #49
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: 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.LOCAL_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 ticketparis-dev-1 down | |
docker-compose -p ticketparis-dev-1 up -d | |
docker image prune -f |