이번 챕터에서는 EC2 서버에 애플리케이션을 배포하는 방법에 대해서 알아보겠다.
깃허브에 runner를 세팅하고 build가 끝나면 EC2 서버에서 해당 runner를 실행하여 자동으로 배포가 되게 한다.
1. github action deploy job 추가
github action의 yml 파일에 deploy 관련 내용을 추가한다. 내가 실행할 도커 컨테이너의 이름은 spring-template이다. deploy 시 해당 도커 컨테이너가 올라와있으면 중단 후 이미지를 삭제한다. 그리고 도커 허브에 올려놓은 이미지를 받아와서 컨테이너를 서버에 올린다.
name: Java CI with Gradle
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew build
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{secrets.DOCKERHUB_USERNAME}}
password: ${{secrets.DOCKERHUB_TOKEN}}
- name: build and release to DockerHub
env:
NAME: goohoon # 계정 명
REPO: spring-template # 레포 이름
run: |
docker build -t $REPO .
docker tag $REPO:latest $NAME/$REPO:latest
docker push $NAME/$REPO:latest
- name: send custom message with args
uses: appleboy/telegram-action@master
with:
to: ${{ secrets.TELEGRAM_TO_ID }}
token: ${{ secrets.TELEGRAM_TOKEN }}
args: ${{ github.actor }} 님의 소스 코드가 반영 됐습니다.
deploy:
needs: build
name: Deploy
runs-on: [ self-hosted, label-development ]
steps:
- name: Docker run
run: |
sudo docker ps -q --filter "name=spring-template" | grep -q . && sudo docker stop "spring-template" && sudo docker rmi "goohoon/springboot-template"
sudo docker run -d --name spring-template --rm -p 8080:8080 goohoon/springboot-template
2. runners 추가 및 EC2 서버에서 실행
Settings를 들어간다.
runners 메뉴에 접속하여 runners를 생성한다. 그리고 EC2 서버에 접속해서 다음 명령어를 통해 다운 및 run.sh 스크립트를 실행한다.
생성된 Runners에 label-development를 추가한다.
스크립트를 실행해두면 서버에서 deploy 시 자동으로 지정해둔 명령어를 실행하는 것을 볼 수 있다.
runner 설치 이후 service 로 등록해서 서버가 부팅되면 자동 실행되도록 아래 스크립트를 실행한다.
sudo ./svc.sh install
sudo ./svc.sh start
'DevOps' 카테고리의 다른 글
AWS Elastic Beanstalk (1) - 구축 (0) | 2021.12.12 |
---|---|
Elastic Stack(ELK Stack) 설치 (0) | 2021.11.28 |
CI/CD 구축하기(3) - 텔레그램 알림 설정 (0) | 2021.08.25 |
CI/CD 구축하기(2) - Docker Hub (1) | 2021.08.25 |
CI/CD 구축하기(1) - Github Action 이란? (3) | 2021.08.25 |