CICD/GitLab

[GitLab] GitLab Runner로 CI/CD 구축하기

sooondubu 2025. 9. 22. 17:37

GitLab Runner로 CI/CD 구축하기 

 


1. 개념

GitLab Runner란? 

  • GitLab CI/CD 파이프라인의 작업을 수행하는 에이전트
  • .gitlab-ci.yml 파일에 작업을 정의

GitLab 자체는 코드 저장, 프로젝트 관리, CI/CD 파이프라인 설정 등의 기능은 제공하지만,
컴파일, 테스트, 실행 등의 능력은 존재하지 않는다.

따라서 이러한 동작들을 GitLab Runner가 수행한다.

작동 방식

  1. 작업 요청
    • GitLab 에 코드를 push 하면 CI/CD 파이프라인이 트리거 된다.
  2. 작업 할당
    • GitLab 서버는 실행할 작업을 큐에 넣고, 등록된 Runner에 할당한다.
  3. 작업 실행
    • GitLab Runner 는 할당된 작업(소스 코드 다운로드, 빌드, 배포, 실행 등)을 수행한다.
  4. 결과 보고
    • GitLab Runner 는 작업 과정의 로그, 성공/실패 여부, 아티팩트 등을 GitLab 서버에 전달한다. 개발자는 UI를 통해 실시간으로 확인할 수 있다.

GitLab Runner 종류

  • Shared Runner: GitLab 인스턴스 전체의 모든 프로젝트가 공유해서 사용하는 Runner
  • Group Runner: 특정 그룹에 속한 모든 프로젝트들이 공유해서 사용하는 Runner
  • Specific Runner: 특정 하나의 프로젝트만을 위해 등록된 Runner

Tags

.gitlab-ci.yaml 파일에서 특정 작업(Job)을 특정 Runner에게 할당하기 위해 사용


2. Runner 설치

공식 문서

https://docs.gitlab.com/runner/install/linux-repository/?tab=RHEL%2FCentOS%2FFedora%2FAmazon+Linux#install-gitlab-runner

GitLab 에 업로드 한 Repo 설정 클릭


좌측 메뉴 - CI/CD - Runners - Create instance runner 클릭


Runner는 Tag를 통해 Job의 실행 여부를 체크한다!

Tag 입력 후 Create Runner 클릭


unit_test:
  stage: test
  script: ./gradlew test
  tags:
    - test

build_app:
  stage: build
  script: ./gradlew build
  tags:
    - build

예시) 만약 Runner A의 Tag가 build라면

build_app Job만 실행한다. unit_test 는 실행 X


배포 서버에 해당하는 환경 선택


  1. Runner 등록 명령어 실행
    • 터미널에 복사-붙여넣기
  2. Excutor 선택
    • shell → Runner 서버에서 바로 명령어 실행
    • docker → Runner가 job을 Docker 컨테이너 안에서 실행
    • ssh → 원격 서버에 SSH 접속해서 job 실행
    • kubernetes → K8s 클러스터에서 job 실행
  3. gitlab-runner run
    • foreground로 실행 확인


Online 으로 된 것을 확인한다


3. 환경변수 설정

gitlab-ci.yaml 에 등록하지 못하는 민감한 정보들은 환경변수를 선언하여 사용할 수 있다.



4. 배포

Repo 최상단 경로이 .gitlab-ci.yaml 파일을 작성하여 push 한다.

push 하면 정의한 파이프라인이 실행된다.


# .gitlab-ci.yaml 

stages:
  - build
  - deploy

# 1️⃣ Build 단계
build:
  stage: build
  tags:
    - build
  image: gradle:8.3-jdk17
  script:
    - chmod +x ./gradlew
    - ./gradlew clean build
  artifacts:
    paths:
      - build/libs/
      - run.sh   # run.sh도 artifacts로 저장
    expire_in: 1h   # 필요시 아티팩트 유지 시간 설정

# 2️⃣ Deploy 단계
deploy:
  stage: deploy
  tags:
    - build
  image: openjdk:17-jdk-slim
  script:
    # 배포 디렉터리 생성
    - sudo -u deploy mkdir -p /home/deploy
    # 기존 JAR 삭제 (빌드가 여러 번 되어도 충돌 방지)
    - sudo -u deploy rm -f /home/deploy/*.jar
    # 빌드된 JAR 파일 복사
    - sudo -u deploy cp build/libs/jenkins-practice-0.0.1-SNAPSHOT.jar /home/deploy/app.jar
    # run.sh 복사 및 실행 권한 부여
    - sudo -u deploy cp run.sh /home/deploy/run.sh
    - sudo -u deploy chmod +x /home/deploy/run.sh
    # run.sh 실행
    - sudo -u deploy /home/deploy/run.sh

Repository - Build - Pipelines


빌드의 성공, 실패를 확인할 수 있다


빌드 과정에서 발생하는 로그를 확인할 수 있다.

'CICD > GitLab' 카테고리의 다른 글

[GitLab] GitLab 설치 및 구성하기  (0) 2025.09.19