본문 바로가기

Dev/Spring Boot

[SpringBoot] Github Action을 사용한 jar빌드 후 전송

728x90

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를 구성하면 나중에 젠킨스도 빠르게 배울 수 있을 것이다.

 

다음엔 이제 클라우드 환경에서 블루그린 배포를 진행해볼 것이다.