Git

Gitlab-runner 사용해서 Gradle 빌드 해보기

황동리 2024. 7. 25. 16:53
반응형

이번엔 Gitlab-runner 사용해서 Gradle 빌드 해보겠습니다.


1. Gitlab Project에 build 할 때 필요한 파일 업로드

저 같은 경우에는 Gitlab에서 Project를 하나 생성을 한 후에 빌드에 필요한 파일들을 모두 올려두었습니다.

 

 

2. 원격 서버에 SSH 키 생성 및 Pipeline 변수 설정

.gitlab-ci.yml 파일로 Run Pipeline 하기 전에 원격 서버(10.10.92.10)에서 해주어야 할 일이 있습니다.

 

1. SSH 키 생성

$ ssh-keygen -t rsa -b 4096

 

위 명령어를 입력하면 두 개의 파일이 생성 됩니다.
id_rsa (개인 키)
id_rsa.pub (공개 키)

 

2. 서버의 인증된 키에 공개 키 추가

앞서 생성된 공개 키를 원격 서버(10.10.92.10)에 있는 사용자(저 같은 경우엔 smrcadmin이라는 user)의 authorized_keys 파일에 추가

$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authrozied_keys

 

3. Gitlab CI/CD 변수에 개인 키 추가

 

Gitlab 프로젝트 설정 -> CI/CD -> Variable

 

Add variable

 

Value에 들어갈 id_rsa파일의 내용은
-----BEGIN OPENSSH PRIVATE KEY-----로 시작하고
-----END OPENSSH PRIVATE KEY------로 끝나야 합니다.

3. .gitlab-ci.yml 파일 작성

이제 .gitlab-ci.yml 파일을 작성해봅시다.

기본적으로 CI/CD templates은 아래 링크에 있습니다.
(https://docs.gitlab.com/ee/ci/examples/)

# Pipeline이 실행될 Docker 이미지 입니다.
image: gradle:alpine

# 실제로 build, test, deploy 단계가 실행되기 전, gradle:alpine 이미지로 생성한 컨테이너에서 아래 스크립트를 실행 해줍니다.
before_script:
# jdk 17 설치
  - apk add --no-cache openjdk17 
# scp 명령어 실행을 위한 설치
  - apk add --no-cache openssh 
# SSH 키 저장할 디렉터리 생성
  - mkdir -p ~/.ssh
# 환경변수 SSH_PRIVATE_KEY에 저장된 비밀 키를 id_rsa 파일로 저장
  - echo "$SSH_PRIVATE_KEY" | tr -d '\r' > ~/.ssh/id_rsa
# id_rsa 파일의 권한 변경
  - chmod 600 ~/.ssh/id_rsa
# 원격 호스트의 키를 known_hosts 파일에 추가
  - ssh-keyscan 10.10.92.10 >> ~/.ssh/known_hosts
# Gradle 사용자 홈 디렉토리를 현재 작업 디렉토리 안의 .gradle로 설정
  - GRADLE_USER_HOME="$(pwd)/.gradle"
# 설정한 GRADLE_USER_HOME을 환경 변수로 설정
  - export GRADLE_USER_HOME

# Pipeline의 각 단계 정의
stages:
  - build
  - deploy

build:
  stage: build
# 빌드 캐시를 사용하여 프로젝트를 빌드하고, 빌드 중 발생한 에러의 스택 트레이스 출력
  script: gradle --build-cache assemble --stacktrace
  cache:
# 브랜치 이름을 캐시 키로 사용합니다.
    key: "$CI_COMMIT_REF_NAME"
# 캐시를 생성하고 저장 합니다.    
    policy: push
# 캐시에 포함될 디렉토리를 지정합니다.   
    paths:
      - build
      - .gradle
# 빌드 산출물로 build/libs 디렉토리 내의 모든 JAR 파일을 포함합니다.      
  artifacts:
    paths: 
      - build/libs/*.jar


deploy:
  stage: deploy
# scp 명령어를 사용하여 빌드 산출물 모두 원격 서버(10.10.92.10)로 옮깁니다.
  script:  
    - scp build/libs/*.jar smrcadmin@10.10.92.10:/home/smrcadmin/
  environment: production
# deploy 단계에서 실행되는 작업은 build 단계의 결과물을 필요로 하도록 의존성 걸어줍니다.  
  dependencies:
    - build

 

 

4. 동작 확인

정상적으로 진행이 되었는지 확인 해보겠습니다.

Gitlab 프로젝트에 들어와서 왼쪽 메뉴에 CI/CD -> Pipelines 클릭하면 그 동안 진행 되었던 과정들이 나옵니다.

저는 정상적으로 완료되어 passed라고 나와있습니다.

 

 

그러면 이제 원격 서버(10.10.92.10)에 접속해서 .jar 파일이 제대로 있는지 확인 해보겠습니다.

 

 

보시다시피 scp 명령어에서 정의한 디렉터리에 jar파일이 있는 것을 확인 할 수 있습니다.


다음에는 빌드된 jar 파일을 가지고 Docker 이미지를 생성해서 Harbor 레지스트리에 넣어보도록 하겠습니다.

반응형