이번엔 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 레지스트리에 넣어보도록 하겠습니다.
'Pipeline' 카테고리의 다른 글
Github Action 이란 ? (0) | 2024.12.19 |
---|---|
주먹구구식 Gradle 빌드/배포 자동화 (Gitlab-runner, ArgoCD) (1) | 2024.08.13 |
Gitlab runner 사용해서 CI 해보기 (1) | 2024.06.14 |
Jenkins Pipeline을 사용하여 이미지 빌드 및 푸시 해보기 (Github, Harbor) (1) | 2024.05.09 |
Helm을 사용하여 Jenkins 설치해보기 (1) | 2024.04.19 |