Gitlab CI CD - Linux 에서 Gitlab-Runner 설치 및 활용

2023. 9. 11. 00:00DevOps/GitLab CI CD

반응형

windows 에서 WSL2 (Ubuntu 22.04.3) 기준으로 설명 합니다. 

repository 는 다음 project 를 활용합니다. 

https://yogingang.tistory.com/416

 

Rest API Template 만들기 - EP 10 (Refactoring - Features)

이제 UnitTest 를 만들었으니 기존 코드들에서 재사용 가능한 부분들을 refactoring 해보자 또한 design 적으로 수정할 부분이 있다면 이 부분들도 refactoring 해보자 UnitTest 를 만들기 전에는 이러한 수정

yogingang.tistory.com

일단 project 를 Gitlab 에 commit 하자

project 를 선택하고 왼쪽 메뉴를 확인하자.

다음 순서를 따라 click 한다. 

Settings --> CI/CD --> Runners (Expand) --> New project runner

아래와 같이 설정한다.  그리고 Create runner 버튼을 누른다.

아래 페이지에서 How do I install GitLab Runner? 를 클릭하자

아래 Guide 대로 runner 를 설치하자

wsl 에서 root 계정 사용할 수 있도록 설정하기

# PowerShell 에서 다음 처리

# root 로 접속
# wsl root 사용하기
wsl --user root

# 접속되면 아래 이용해 password 변경
 passwd
 # 종료하고 나와서
 # 다시 wsl 에서 우분투를 실행하자
 su 
 # 패스워드 입력 후 root 으로 연결되는 것을 확인하자

 

이미 이전에 gitlab-runner 를 설정 하였으나 정상적으로 동작하지 않아서

다시 설치 및 설정 하려는 경우 아래를 따라한다.

gitlab-runner 삭제
# 모든 runner 삭제
$ gitlab-runner unregister --all-runners

# gitlab-runner 제거
$ sudo gitlab-runner uninstall

# gitlab-runner 클라이언트 삭제
$ sudo rm -rf /usr/local/bin/gitlab-runner

# 추가한 사용자 제거
$ sudo userdel gitlab-runner
$ sudo rm -rf /home/gitlab-runner/

Docker network 설정

이제 각 container 들이 container 명으로 서로 통신 가능하도록 docker 에서 network 를 설정하자

docker network create my_network

mysql 을 dbms 로 사용할 것이니 mysql 을 설치하자

docker pull mysql
docker run -d --restart unless-stopped --name mysql-container -e MYSQL_ROOT_PASSWORD=1234 -p 3306:3306 --network my_network mysql:latest

gitlab-runner 설치

# 1. gitlab-runner install
# Download the binary for your system
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64

# Give it permission to execute
sudo chmod +x /usr/local/bin/gitlab-runner

# Create a GitLab Runner user
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash

# Install and run as a service
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start

# 2. gitlab-runner 를 docker user 로 등록
sudo -u gitlab-runner -H docker info
sudo usermod -aG docker gitlab-runner

# 3. gitlab-runner register
gitlab-runner register  --url https://gitlab.com  --token xxxxxxx

이제 gitlab page 로 이동하자 

Settings -> ci/cd --> Variables 을 실행하자

add variable 에서 다음과 같이 설정하자

# key                          value
CONTAINER_NAME          api-server-container
DB_CONNECTION           Server=mysql-container;Port=3306;Database=api-server;user=root;password=1234
DB_CONNECTION_STRING    Server=127.0.0.1;Port=3306;Database=api-server;user=root;password=1234
IMAGE_NAME              api-server

 

UnitTest 실행을 위한 dotnet sdk 설치

apt install dotnet-sdk-7.0

설치시 not found 관련 오류가 생기면 다음과 같이 처리한다. 

sudo apt clean && sudo apt autoclean
sudo apt update

그리고 다시 sdk 설치를 실행한다. 

 

efbundle.exe 생성하기

EF core 6 이상에서 사용가능하다.

# linux 64 기준으로 dotnet 이 깔려 있지 않아도 실행 
dotnet ef migrations bundle --project Infrastructure --startup-project ApiServer --context MySqlContext --self-contained -r linux-x64 -v -o ./ApiServer/efbundle.exe -f

 

 

PipeLine 설정

variables:
  CONTAINER_NAME: $CONTAINER_NAME
  IMAGE_NAME: $IMAGE_NAME
  DB_CONNECTION_STRING: $DB_CONNECTION_STRING
  DB_CONNECTION: $DB_CONNECTION
  
before_script:
  - |
    echo "Stopping and removing container:" $CONTAINER_NAME 
    docker stop $CONTAINER_NAME 2> /dev/null || true
    docker rm $CONTAINER_NAME 2> /dev/null || true
    docker rmi $IMAGE_NAME 2> /dev/null || true
  - pwd
  - cd ApiServer
  - echo "Running efbundle..."
  - chmod +x efbundle.exe
  - ./efbundle.exe --connection $DB_CONNECTION_STRING
  - cd ../UnitTest
  - dotnet test -e ConnectionStrings__Server=$DB_CONNECTION_STRING
  - cd ..

stages:          # List of stages for jobs, and their order of execution
  - build


docker_build:
  stage: build
  script:
    - echo "docker building the code..."
    - docker buildx build -t $IMAGE_NAME -f Dockerfile .
    - docker run 
      -e ConnectionStrings__Server=$DB_CONNECTION 
      -e Logging__LogLevel__Default="Warning"
      --name $CONTAINER_NAME -d --restart unless-stopped -p 5006:80 
      --network my_network $IMAGE_NAME
    - echo "docker build complete."

이제 save 하면 자동으로 pipeline 을 실행 할 텐데 오류가 날수 있다. 

 

Job failed: prepare environment: exit status 1 오류 발생시

위와 같은 오류가 나면 다음과 같이 처리하자

# /home/gitlab-runner 에서 .bash_logout 삭제
cd /home/gitlab-runner
rm .bash_logout

이제 다시 Pipeline 을 실행하면 정상 동작한다. 

 

관련영상

https://youtu.be/2hUDCAwZmSA

 

반응형