1. GitLab 설치

윈도우 10 과 Docker Desktop 4.14.1 환경에서 설치 및 테스트를 진행 하였다. WSL2 가 활성화 되어 있기 때문에 .wslconfig 파일을 통해서 Resources 설정이 가능하다.

1.1 docker-compose.yml

services:
gitlab:
image: gitlab/gitlab-ce:latest
container_name: gitlab
restart: always
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://your.host.ip'
ports:
- "8021:80"
- "22:22"

docker compose up -d 명령으로 compose 파일을 실행하고 접속 한다 초기 접속을 위해서는 root 이름으로 로그인 해야 하는데 로그인 하기 전에 비밀번호를 변경한다.

1.2 root 관리자 암호 변경

I-00 gitlab-rake is cool!!

2. GitLab Runner 설치

테스트할 프로젝트를 만들고 플랫폼에 맞는 GitLab Runner 를 설치한다.

I-01 Project>Settings>CI/CD>Runners>Expand

install GitLab Runner and ensure it’s running. 링크를 클릭하면 다운로드 링크로 이동하게 된다.

I-02 OS 에 맞는 바이너리 다운로드
I-03 폴더 생성 및 이름 변경

다운로드한 파일을 루트 아래에 GitLab-Runner 라는 폴더를 만들고 gitlab-runner.exe 로 이름을 변경하여 이동 시킨다.

I-04 친절하게 설치 방법을 떠 먹여준다.

I-01 에서 보이는 Show runner installation instructions 을 클릭하면 플랫폼 별로 설치 방법은 안내하는 팝업을 볼 수 있다.

I-05 install gitlab-runner
I-06 gitlab-runner 서비스 확인
I-07 url 및 token 등록

I-01 에서 확인 가능한 url 과 token 을 register 명령어로 등록한다.

I-08 runner 확인

페이지를 새로 고침 하면 tag 이름으로 적용된 러너를 확인 할 수 있다.

3. CI/CD Jobs 생성

before_script:
- CHCP 65001

variables:
PATH: 'C:\my\Scripts'

stages:
- test

ftrack:
stage: test
script:
- echo 'test start'
- echo 'test done'
tags:
- testrunner
only:
- main

위 내용으로 .gitlab-ci.yml 파일을 생성한다 이 파일은 프로젝트 루트 경로에 위치해야 한다. 커밋하고 푸쉬 한 다음 결과를 확인 해보자.

I-09 CI/CD>Pipelines

Pipelines 은 CI/CD 최상위 구성요소로서 커밋 메시지 브랜치, 트리거 시킨 사용자 스테이지의 상태 등의 정보를 확인 가능하며 통과, 실패 여부도 알 수 있다.

I-10 CI/CD>Jobs

CI/CD>Jobs 을 클릭하면 좀 더 세부적인 내용을 확인 가능한데 Jobs 은 해야 할 일에 대한 정의로서 파이프라인의 구성요소 이며 여기서 실제적인 코드 테스트, 컴파일 등이 이루어 진다.

에러가 발생하면 잡은 failed 로 처리 된다. 위 에러 로그는 pwsh 를 찾을 수 없어 발생한 에러 인데 해결에는 두 가지 방법이 있다.

  • 최신 powershell 의 설치
  • config.toml 파일의 수정

3.1 pwsh 설치

현재 자신의 powershell 버전이 5.1 이라면 위와 같은 에러가 뜬다 버전 확인은 $PSVersionTable 로 가능하다.

I-11 powershell 버전확인

7.x 버전대로 오면서 powershell 대신 pwsh 를 PATH에 등록하고 사용하게 되므로 I-10 과 같은 에러가 발생한 것이다. 버전 업그레이드를 위해 Winget 커맨드를 사용해 설치 하자.

I-12 7.x 버전 확인
I-13 7.x 버전 설치
I-14 pwsh 의 버전 확인

job 을 retry 하기 전에 gitlab-runner 서비스를 재 시작 해주어야 한다.

I-15 서비스 재시작
I-16 서비스 재시작 후 retry

이제 pwsh 에러 없이 제대로 job 이 수행 된다. 아직 해결해야 할 에러가 남았지만 그전에 7.x 버전을 설치 하지 않고 pwsh 에러를 해결 할 수 있는 다른 방법을 알아보자.

3.2 config.toml 파일 수정

I-17 config.toml 파일 확인
concurrent = 1
check_interval = 0
shutdown_timeout = 0

[session_server]
session_timeout = 1800

[[runners]]
name = "testrunner"
url = "http://your.host.ip:8021/"
id = 2
token = "K3s_BPZ6JhxBhyxpCzyH"
token_obtained_at = 2023-03-08T02:58:21Z
token_expires_at = 0001-01-01T00:00:00Z
executor = "shell"
shell = "pwsh"
[runners.cache]
MaxUploadedArchiveSize = 0

한번이라도 pipeline 이 돌아갔다면 config.toml 파일이 생성되는데 여기서 shell 속성을 powershell 로 변경해주면 된다.

3.3 PATH 변수의 사용

앞서 생성한 .gitlab-ci.yml 파일의 variables 에서 정의한 PATH 는 job이 실행될때 참조하는 변수 이다. 사용자 또는 시스템 환경변수에 있는 PATH의 값이 아닌 variables 에 정의된 PATH 값을 사용하므로 git 을 찾을 수 없다는 에러가 I-16 에서 계속 발생한 것 이다.

I-18 port 관련 에러

PATH 변수를 삭제하고 push 했지만 이번엔 80 번 포트에 접근이 거부되었다는 에러가 뜬다. 당연하다 도커 컴포즈 파일에 8021 포트로 호스트와 바인딩 되어 있다. gitlab-runner 도 이 포트를 포함하여 정의된 외부 url 로 접근해야 한다.

[[runners]]
name = "testrunner"
url = "http://your.host.ip:8021/"
id = 1
token = "J6eN1JsQoFuxiHkuv_JH"
token_obtained_at = 2023-03-07T22:06:00Z
token_expires_at = 0001-01-01T00:00:00Z
executor = "shell"
shell = "powershell"
clone_url = "http://your.host.ip:8021"
[runners.cache]
MaxUploadedArchiveSize = 0

위와 같이 clone_url 을 추가하고 서비스를 다시 시작한 다음 .gitlab-ci.yml 파일의 내용을 간단하게 변경하고 push 해보자.

I-19 Job succeeded!

드디어 첫 번째 잡이 성공적으로 종료 되었다. 다음 스토리에선 .gitlab-ci.yml 파일을 다양한 시나리오에서 사용하기 위한 키워드와 그 사용법에 대해 알아본다.

--

--