요즘 핫하다는 github action 을 사용해 보았습니다.
현재는 NAS에서 구동되고 있는 jenkins 에서 프로젝트 빌드를 한 후 배포를 하고 있습니다. https://lng1982.tistory.com/413
현재 구조
code push -> github -> jenkins -> build -> jar 생성 -> shell script 실행 -> 서버 기동
github action 적용 후 변경되는 구조
code push -> github -> github action 실행 -> build -> jar 생성 -> ssh를 통한 NAS 서버 연결 -> jar 배포, shell script 배포 -> shell script 실행 -> 서버 기동
github action 적용은 어렵지 않았습니다.
프로젝트 하위에 .github > workflows > maven.yml 파일을 생성하였고, 해당 파일 안에 다음과 같이 설정을 추가하였습니다.
name: Java CI with Maven
on:
push:
branches: [ "master" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: checkout repository
uses: actions/checkout@v4
- name: set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: maven
- name: build maven
run: mvn -B clean package --file pom.xml
- name: Extract last commit message
id: extract_commit
run: echo "LAST_COMMIT_MESSAGE=$(git log -1 --pretty=%B)" >> $GITHUB_ENV
- name: upload jar
uses: appleboy/scp-action@master
with:
host: ${{ secrets.REMOTE_HOST }}
username: ${{ secrets.REMOTE_USER }}
password: ${{ secrets.REMOTE_PASSWORD }}
port: ${{ secrets.REMOTE_PORT }}
source: "target/*.jar"
strip_components: 1
target: ${{ secrets.REMOTE_HOME }}/app
- name: upload script
uses: appleboy/scp-action@master
with:
host: ${{ secrets.REMOTE_HOST }}
username: ${{ secrets.REMOTE_USER }}
password: ${{ secrets.REMOTE_PASSWORD }}
port: ${{ secrets.REMOTE_PORT }}
source: "script/*"
strip_components: 1
target: ${{ secrets.REMOTE_HOME }}/app/script
- name: execute remote script
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.REMOTE_HOST }}
username: ${{ secrets.REMOTE_USER }}
password: ${{ secrets.REMOTE_PASSWORD }}
port: ${{ secrets.REMOTE_PORT }}
script_stop: true
script: |
cd ${{ secrets.REMOTE_HOME }}/app/script
chmod +x *.sh
sh send_telegram.sh "${{ env.LAST_COMMIT_MESSAGE }}"
sh start_server.sh "${{ github.run_number }}"
위의 워크플로우를 요약하면 다음과 같습니다.
- 소스 체크아웃
- java 프로젝트 빌드
- 생성된 jar 파일과 shell script를 원격 서버에 전송
- 서버에서 shell script 실행
- 서버 구동
${{ secrets.REMOTE_HOST }} 와 같이 민감한 정보는 github 사이트에서 해당 프로젝트 이동 후 Settings에 들어가시면 됩니다. 왼쪽 메뉴에 Secrets and variables > Actions 를 클릭하면 다음과 같이 Repository secrets 정보를 등록 관리 하실 수 있습니다.
프로젝트 빌드를 github action 으로 이전하게 됨으로써 NAS에서 jenkins를 더이상 운용하지 않아도 되었기에 메모리를 절약 할 수 있었습니다.
'개발툴' 카테고리의 다른 글
OpenAI를 이용하여 비정형 데이터 분석하기 (1) | 2024.12.11 |
---|---|
운영중인 사이트 데이터 2중, 3중 백업하기 (3) | 2024.12.05 |
내가 자동화 스크립트를 만드는 이유? (1) | 2024.12.03 |
시놀로지 NAS에 웹 서버 배포 및 운영 (0) | 2024.05.23 |
maven effective pom 활용 (0) | 2019.08.23 |
Fiddler Filter 기능에 대해서 알아보자 (3) | 2019.04.03 |
메이븐 버전 충돌 해결 (8) | 2017.12.13 |
윈도우 loopback 패킷 캡쳐 (RawCap) (0) | 2017.12.11 |