2023. 9. 11. 00:00ㆍDevOps/GitLab CI CD
windows 에서 WSL2 (Ubuntu 22.04.3) 기준으로 설명 합니다.
repository 는 다음 project 를 활용합니다.
https://yogingang.tistory.com/416
일단 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 을 실행하면 정상 동작한다.
관련영상
'DevOps > GitLab CI CD' 카테고리의 다른 글
Gitlab CI CD - Docker 에서 aws cli 사용하기 (0) | 2023.11.20 |
---|---|
Gitlab CI CD - ASPNET Core 배포 및 DB Migration - Refactoring (1) | 2023.10.09 |
Gitlab CI CD - Docker 에서 host 의 aws 설정 사용하기 (1) | 2023.09.18 |
Gitlab CI CD - ASPNET Core 배포 및 DB Migration (0) | 2023.09.04 |