GitLab Runner-1
설치 부터 .gitlab-ci.yml 작성까지
1. GitLab 설치
1.1 docker-compose.yml
1.2 root 관리자 암호 변경
2. GitLab Runner 설치
3. CI/CD Jobs 생성
3.1 pwsh 설치
3.2 config.toml 파일 수정
3.3 PATH 변수의 사용
🔖 Reference
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 관리자 암호 변경
2. GitLab Runner 설치
테스트할 프로젝트를 만들고 플랫폼에 맞는 GitLab Runner 를 설치한다.
install GitLab Runner and ensure it’s running. 링크를 클릭하면 다운로드 링크로 이동하게 된다.
다운로드한 파일을 루트 아래에 GitLab-Runner 라는 폴더를 만들고 gitlab-runner.exe 로 이름을 변경하여 이동 시킨다.
I-01 에서 보이는 Show runner installation instructions 을 클릭하면 플랫폼 별로 설치 방법은 안내하는 팝업을 볼 수 있다.
I-01 에서 확인 가능한 url 과 token 을 register
명령어로 등록한다.
페이지를 새로 고침 하면 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 파일을 생성한다 이 파일은 프로젝트 루트 경로에 위치해야 한다. 커밋하고 푸쉬 한 다음 결과를 확인 해보자.
Pipelines 은 CI/CD 최상위 구성요소로서 커밋 메시지 브랜치, 트리거 시킨 사용자 스테이지의 상태 등의 정보를 확인 가능하며 통과, 실패 여부도 알 수 있다.
CI/CD>Jobs 을 클릭하면 좀 더 세부적인 내용을 확인 가능한데 Jobs 은 해야 할 일에 대한 정의로서 파이프라인의 구성요소 이며 여기서 실제적인 코드 테스트, 컴파일 등이 이루어 진다.
에러가 발생하면 잡은 failed 로 처리 된다. 위 에러 로그는 pwsh 를 찾을 수 없어 발생한 에러 인데 해결에는 두 가지 방법이 있다.
- 최신 powershell 의 설치
- config.toml 파일의 수정
3.1 pwsh 설치
현재 자신의 powershell 버전이 5.1 이라면 위와 같은 에러가 뜬다 버전 확인은 $PSVersionTable
로 가능하다.
7.x 버전대로 오면서 powershell 대신 pwsh 를 PATH에 등록하고 사용하게 되므로 I-10 과 같은 에러가 발생한 것이다. 버전 업그레이드를 위해 Winget 커맨드를 사용해 설치 하자.
job 을 retry 하기 전에 gitlab-runner 서비스를 재 시작 해주어야 한다.
이제 pwsh 에러 없이 제대로 job 이 수행 된다. 아직 해결해야 할 에러가 남았지만 그전에 7.x 버전을 설치 하지 않고 pwsh 에러를 해결 할 수 있는 다른 방법을 알아보자.
3.2 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 에서 계속 발생한 것 이다.
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 해보자.
드디어 첫 번째 잡이 성공적으로 종료 되었다. 다음 스토리에선 .gitlab-ci.yml 파일을 다양한 시나리오에서 사용하기 위한 키워드와 그 사용법에 대해 알아본다.