Search
Duplicate

Gitlab CI/CD 파이프라인 구축하기

Created time
2024/04/07 14:16
Last edited time
2024/06/15 14:14
Status
Done
tag

들어가기에 앞서

참고한 자료를 바탕으로 비전문가가 정리한 글이므로 오류가 있을 수 있습니다.
오류에 대한 피드백은 언제든지 환영합니다. 부디 댓글로 알려주시길 바랍니다. 감사합니다.

Gitlab Runner

Gitlab CI/CD 구축에 있어서 가장 먼저 해야하는 일은 CI/CD 작업을 실행하는 데 사용되는 도구인 Gitlab Runner 설치입니다. 이 글은 공식문서의 linux 설치(Ubuntu) 기준으로 작성했습니다. 아래 공식 문서의 설치 방법을 참고 바랍니다.
설치한 runner는 /usr/local/bin 에서 확인 가능합니다.

gitlab runner 등록

gitlab runner를 설치 완료하셨다면 등록을 할 차례입니다. runner 등록은 Gitlab 인스턴스와 연결하는 프로세스입니다. Gitlab 인스턴스에서 작업을 선택할 수 있도록 runner를 등록해야 합니다.
아래 명령어를 통해 등록을 진행하시면 됩니다.
혹시 gitlab-runner가 실행이 안 되고 있다면 실행을 한 후 등록을 진행해 주세요.
sudo gitlab-runner start sudo gitlab-runner register
Bash
복사
등록에 있어 필요한 정보인 인스턴스 URL토큰은 CI/CD 파이프라인을 추가하려는 리포지토리 내부의 Settings > CI/CD > Runners 탭에 존재합니다.
첫 번째 입력해야하는 값은 서버의 인스턴스를 입력해야하는데 위 이미지에 보이는 Register the runner with this URL 하단에 해당하는 부분을 입력하시면 됩니다.
gitlab-runner register 명령어 입력 직후 모습
두 번째 입력해야 하는 값은 gitlab runner 등록 토큰인데, 마찬 가지로 And this registration token 하단에 위치한 값을 입력하시면 됩니다.
URL과 token을 제외한 나머지 입력 값들은 본인 상황에 맞게 입력하시면 됩니다. 참고로 저는 runner executer를 shell로 설정했습니다.
등록이 정상적으로 완료되면 Specific runners탭 아래에 해당 러너가 보입니다.

gitlab runner 설정

concurrent = 3 check_interval = 0 [session_server] session_timeout = 1800 [[runners]] name = "Random Picker" url = "http://gitlab.obp:8100/" id = 13 token = "ABCDEFG123456" token_obtained_at = 2024-04-06T04:28:18Z token_expires_at = 0001-01-01T00:00:00Z executor = "shell" [runners.custom_build_dir] [runners.cache] [runners.cache.s3] [runners.cache.gcs] [runners.cache.azure]
TOML
복사
위의 gitlab runner 설정은 sudo su를 통해 슈퍼유저로 접속 후/etc/gitlab-runner/config.toml 에서 확인 가능하며, gitlab runner의 구성 파일으로서 그 중 “Random Picker”라는 이름을 가진 runner가 메인으로 사용되고 있습니다. 아래는 각 설정에 대한 간략한 설명입니다.
1.
concurrentcheck_interval:
concurrent: Runner가 동시에 실행할 수 있는 작업 수입니다. 여기서는 3로 설정되어 있어서 한 번에 3개의 작업이 실행됩니다.
check_interval: 새로운 작업을 확인하는 간격으로, 0으로 설정되어 있어 Runner가 계속해서 새로운 작업을 확인합니다.
2.
[session_server]:
session_timeout: Runner 세션의 타임아웃 시간으로, 여기서는 1800초(30분)로 설정되어 있습니다.
3.
[[runners]]:
[[runners]] 섹션은 각각의 GitLab Runner 인스턴스를 정의합니다.
name: Runner의 이름입니다.
url: GitLab 인스턴스의 URL입니다.
id: Runner의 고유 ID입니다.
token: Runner가 GitLab과 통신하기 위한 토큰입니다.
executor: Runner가 사용하는 실행자(executor)입니다.

.gitlab-ci.yml 작성하기

gitlab runner에 대한 설정을 모두 마치셨다면 다음은 runner가 무엇을 수행할지 적어놓는 파일인 .gitlab-ci.yml을 작성할 차례입니다.
일반적으로 build, test, deploy 단계로 나눠서 작성하지만, 아래 예시에서는 간단하게 build, deploy만 나눠서 설명하겠습니다.
stages: - build - deploy default: tags: # default tag for gitlab runner - develop services: - docker:24.0.9-dind build-job: stage: build script: - echo "Compiling the code..." - echo "build" - docker build -t back:latest -f $CI_PROJECT_DIR/packages/back/Dockerfile . only: - master deploy-job: stage: deploy script: - echo "Start deploy ..." - cd $CI_PROJECT_DIR/packages/back - docker-compose -f ./app.yml up -d after_script: - docker rmi $(docker images -f "dangling=true" -q) || true & only: - master variables: TYPEORM_USERNAME: "$TYPEORM_USERNAME" TYPEORM_PASSWORD: "$TYPEORM_PASSWORD" TYPEORM_DATABASE: "$TYPEORM_DATABASE" TYPEORM_URL: "$TYPEORM_URL" TYPEORM_ENTITIES: "$TYPEORM_ENTITIES" KAKAO_RESTAPI_KEY: "$KAKAO_RESTAPI_KEY" KAKAO_JAVASCRIPT_KEY: "$KAKAO_JAVASCRIPT_KEY" PRIVATE_TOKEN: "$PRIVATE_TOKEN"
YAML
복사
1.
stages:
이 부분은 각 작업의 순서를 정의합니다. 여기서는 앞서 말씀드렸듯이 builddeploy라는 두 개의 작업이 있습니다.
2.
default:
이 부분은 GitLab Runner에 대한 기본 설정을 지정합니다. 여기서는 Runner에 develop 태그가 할당되어 있습니다.리포지토리에 등록한 러너의 태그와 일치해야 정상적으로 작동합니다.
3.
services:
작업에서 사용할 Docker 서비스를 정의합니다. 저는 소스코드를 도커 이미지로 빌드하고 컨테이너 형태로 배포하기 위해서 해당 부분을 작성했습니다.
4.
build-job:
build 작업에 대한 설정입니다.
stagebuild로 지정되어 있습니다.
only는 이 작업이 master 브랜치에서만 실행됨을 나타냅니다.
5.
deploy-job:
deploy 작업에 대한 설정입니다.
stagedeploy로 지정되어 있습니다.
after_script는 작업 실행 후에 실행되는 스크립트입니다. 여기서는 dangling된 Docker 이미지 정리를 위해 사용됩니다.
6.
variables:
환경 변수를 정의합니다. 이 변수들은 스크립트 내에서 사용됩니다. 여기서는 데이터베이스 연결 정보와 API 키 등이 정의되어 있습니다.
사전에 리포지토리에서 작성한 값들이 파이프라인 실행 중에 삽입되며 예를 들어, $KAKAO_JAVASCRIPT_KEY 변수는 GitLab의 변수 설정 또는 리포지토리에 직접 작성된 값으로 대체됩니다.

참고