후속편 안내
본 글이 인기가 좋아 후속편을 작성했다. 아래 간단히 배포하는 것 보다 좀 더 세분화 된 내용을 담았다.
글 보러가기
GitHub Actions CI/CD
- 기본적으로 github action에서 호스트로 push하는 방식이다.
GitHub Actions workflow
name: remote ssh command for deploy
on:
push:
# main 브랜치에서만 작동합니다.
branches: [main]
paths-ignore:
- 'README.md'
- 'docs/**'
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: executing remote ssh commands using key
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.KEY }}
port: ${{ secrets.PORT }}
script: |
cd git/swlabs-helper
sh deploy.sh
${{ secrets.HOST }}
를 비롯한 나머지 4개의 환경변수는 Setting – secrets 에서 등록한다.- 주요내용은 main 브랜치에서 push가 일어나면 github의 ubuntu 인스턴스에서 ssh를 통해 원격지의 deploy.sh를 실행시킨다는 내용이다.
deploy.sh 내용 (20210920 업데이트)
#!/bin/bash
source ~/.bash_profile
cd ..
APP_NAME=webboard
REPOSITORY=`pwd`
RELEASE=release
# 저장소로부터 소스를 업데이트 받습니다.
git pull
# gradle 빌드와 jar 파일 패키징 작업을 합니다. (작업 완료시 .jar파일 생성)
sh gradlew build
# .jar 파일 타겟팅
JAR_NAME=$(ls $REPOSITORY/build/libs | grep jar | head -n 1)
JAR_PATH=$REPOSITORY/build/libs/$JAR_NAME
# 현재 실행중인 서버가 있으면 잡아서 종료 시킵니다.
CURRENT_PID=$(pgrep -f $APP_NAME)
if [ -z $CURRENT_PID ]
then
echo ">>>> java process not found."
else
echo ">>>> PID: $CURRENT_PID kill."
kill -15 $CURRENT_PID
sleep 15
fi
# .jar 파일 java 실행합니다.
echo ">>>> $JAR_PATH java execute."
nohup java -jar $JAR_PATH --spring.config.location=classpath:/application.properties --spring.profiles.active=$RELEASE > /dev/null 2> /dev/null < /dev/null &
sleep 5
CURRENT_PID=$(pgrep -f $APP_NAME)
echo ">>>> New PID: $CURRENT_PID"
- 이 스크립트가 하는 내용은 다음과 같다
- 저장소에서 코드 가져오기
- Maven 빌드하기 (package로 jar파일 만들기)
- 재시작을 위한 자바 프로세스 종료
- java -jar 실행으로 스프링부트 기동
GitHubs Atcions test
- https://github.com/platanus-kr/actiontest
- 잘된다.