github action은 push, merge, pull request 등의 동작이 행해졌을 경우 원하는 동작을 자동으로 동작하도록 스케줄링 해둘 수 있는 서비스이다. 이것을 사용하면 CICD 배포를 구현할 수 있다. 여기서는 모두 github action의 대한 기본적인 사용법은 알고 있다고 생각하겠다.
나는 푸쉬한 파일을 jar로 빌드하여 내 클라우드 서버에 scp로 보내는 동작을 수행할 것이다. 플로우는 아래와 같다.
1. Action
action 할 레포지토리의 action에서 java with gradle 을 가져오자. 이것을 수정해서 위 플로우를 완성할 것이다.
여기서 설정파일을 수정해도되지만, 커밋하고 편집기에서 편집하도록 하자. 파일이름은 마음대로 해도된다. 난
Create Jar And Transmission로 하고 커밋 클릭, 그리고 편집기로가서 pull을 받아주자.
2. github action setting 브랜치 생성 후 checkout
그리고 이제 java with gradle 을 하나하나 살펴보자
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
메인 브랜치에서만 작동할것이고 푸쉬 혹은 풀리퀘스트에서 작동한다.
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0
- name: Build with Gradle Wrapper
run: ./gradlew build
첫번째 job(작업)은 코드 내용을 읽기할 수 있으며, JDK 17을 셋업하고 gradle을 설치하여 gradle wrapper로 레포지토리를 빌드한다.
두번째 작업은 의존성 그래프를 그려 전송하는데 여기서는 크게 중요치 않은 부분이므로 넘어간다.
3. 전송 로직 추가
여기서는 scp를 사용하여 클라우드 서버에 전송할것인데 scp는 ssh 기반으로 파일 전송하는 프로토콜이므로 ssh 보안 패스워드 혹은 RSA키가 필요하다. 나의 경우 RSA키를 분실했지만 비밀번호는 기억해서 비밀번호를 활용한 코드로 작성했다.
단, 패스워드를 그대로 올리는 것은 매우매우 큰 보안 리스크를 초래한다. 그래서 github action에서는 secrets를 제공한다.
레포지토리의 setting -> Secrets and Variables -> Actions -> New repository secret 이동 후 아래 클라우드 서버에 접속하기 위한 비밀번호 입력, 이러면 이제 github action에서 안전하게 비밀번호를 사용할 수 있다.
- name: Install sshpass
run: sudo apt-get install -y sshpass
- name: Copy jar files using password authentication
env:
SSH_PASSWORD: ${{ secrets.SSHPASSWORD }}
run: |
sshpass -p "$SSH_PASSWORD" scp -o StrictHostKeyChecking=no
-P 8080 build/libs/*.jar root@{{아이피주소}}:/home/jarFiles
ssh패스워드를 사용하기 위해 설치하고 아이피주소와 접속 포트는 설정마다 달라서 자기 클라우드 환경에 맞도록 설정하자. 이제 이것을 풀리퀘스트 하고 main에 merge 하고 Action 탭을 확인해보면
클라우드 서버에 파일이 없었다가 자르파일이 생긴것을 확인할 수 있다.
위에서 봤던 플로우를 모두 구현하였다. 다만 이때 도커 이미지로 만들어서 클라우드 환경에서 도커로 실행하는 방법도 있는데 여기서는 우선 깃허브 액션에 집중하였다. 젠킨스의 경우는 클라우드 서버가 두개 이상 필요하다고 해서 금전적으로 부담이 있는 학생들에게 github action은 매우 매력적이며 강력하다.
그리고 이렇게 cicd를 구성하면 나중에 젠킨스도 빠르게 배울 수 있을 것이다.
다음엔 이제 클라우드 환경에서 블루그린 배포를 진행해볼 것이다.
'Dev > Spring Boot' 카테고리의 다른 글
[SpringBoot] Github Action을 사용한 BlueGreen배포 (0) | 2024.12.12 |
---|---|
[Spring Security] 수동 로그인 구현하기 (0) | 2024.10.29 |
[Spring Security] 스프링시큐리티의 기본 로그인을 사용하지 못했던 문제 (0) | 2024.10.27 |
[JPA] 인덱싱을 통한 SELECT 성능 향상 (0) | 2024.10.22 |
Java로 문자열 xml 파일 파싱 (0) | 2024.09.20 |