⚙️ Devops/⛏ Git

GitLab CI/CD 구성하기

iseunghan 2023. 3. 13. 16:05
반응형

목표

GitLab에서 CI/CD를 하는 것

개발 환경

HOST

  • Mac OS X

SERVER

  • Ubuntu 20.04 LTS
  • GitLab Version : v14.5.0
  • Docker version 20.10.17, build 100c701

Gitlab Runner 설치

<aside> 💡 Gitlab 버전과 Gitlab-Runner의 버전을 꼭 일치시켜주세요!

</aside>

Docker로 설치하기

docker run -d --name gitlab-runner-v14.5.0 \\
--restart always \\
--volume /srv/gitlab-runner/config:/etc/gitlab-runner: \\
--volume /var/run/docker.sock:/var/run/docker.sock \\
gitlab/gitlab-runner:v14.5.0
  • docker-compose (잘안됨)
#docker-compose.gitlab 파일 작성
sudo vi /opt/gopath/src/gitlab/docker-compose.gitlab.runner.yml
gitlab-runner:
 container_name: gitlab-runner
 image: 'gitlab/gitlab-runner:v14.5.0'
 restart: always
 volumes:
  - '/srv/gitlab-runner/config:/etc/gitlab-runner'
  - '/var/run/docker.sock:/var/run/docker.sock'
#docker-compose로 컨테이너 실행
docker-compose -f /opt/gopath/src/gitlab/docker-compose.gitlab.runner.yml up -d

GitLab-runner 연동하기

Gitlab project Settings -> CI/CD -> Runners

도커 접속

$ docker container exec -it gitlab-runner bash

shell이용해서 scp를 한다면 executor를 shell로 설정해준다.

Runner 등록

두 가지 방법이 존재한다.

1. 비대화식 등록

gitlab-runner register -n \
--url http://<IP> \
--registration-token <TOKEN> \
--description gitlab-runner \
--executor docker \
--docker-image docker:latest \
--docker-volumes /var/run/docker.sock:/var/run/docker.sock

옵션 설명

--url GitLab 인스턴스 URL
--registration-token Project 의 token
--description 설명
--executor 빌드를 실행하는 데 사용할 수 있는 여러 실행 프로그램
--docker-image Docker를 실행 프로그램으로 선택한 경우 사용할 이미지
--docker-volumes Docker를 실행 프로그램으로 선택한 경우 사용할 볼륨

2. 대화식 등록

gitlab-runner register
# URL
# TOKEN
# runner 이름
# 특정 Tag로 커밋시 동작
# 실행프로그램
root@207d1b9b0beb:/# gitlab-runner register
Runtime platform                                    arch=amd64 os=linux pid=30 revision=f0a95a76 version=14.5.0
Running in system-mode.

Enter the GitLab instance URL (for example, https://gitlab.com/):
https://gitlab.example.com/
Enter the registration token:
katSLz2sjkHZ21nkazYs-_6cb
Enter a description for the runner:
[207d1b9b0beb]: gitlab-runner-140
Enter tags for the runner (comma-separated):
deploy
Registering runner... succeeded                     runner=ktSLz2jk
Enter an executor: parallels, kubernetes, custom, docker, ssh, virtualbox, docker+machine, docker-ssh+machine, docker-ssh, shell:
docker
Enter the default Docker image (for example, ruby:2.6):
openjdk:11.0-jdk-oracle
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

3. 등록 확인

초록불이 들어오면 정상적으로 된것이다!

.gitlab-ci.yml 작성

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

image: openjdk:11-oracle

cache:
    paths:
    - .gradle/wrapper
    - .gradle/caches

build-job:       # This job runs in the build stage, which runs first.
  stage: build
  before_script:
    - chmod +x ./gradlew
  script:
    - echo "build start.."
    - ./gradlew build

deploy-job:      # This job runs in the deploy stage.
  stage: deploy  # It only runs when *both* jobs in the test stage complete successfully.
	before_script:
		- apt update
		- apt install openssh-client -y
  script:
    - echo "Deploying application..."
    - sshpass -p "$DEPLOY_PASSWORD" scp ./build/libs/*.jar "$USER"@"$DEPLOY_IP":~/BUILD_JAR/test.jar
    - echo "success deploy!"

main으로 커밋

main 브랜치로 커밋 시 정상적으로 CI/CD가 실행되는 것을 볼 수 있다.

왼쪽 탭 CI/CD → Pipelines에 보면 pass가 된것을 확인할 수 있다!

 

TroubleShooting

HTTP Basic Authenticated : Access Denied 뜰 때, 깃랩 버전과 Gitlab-runner의 버전을 체크하자.

💡 현재 사용중인 Gitlab 버전과 같은 Gitlab-runner를 사용해야 한다.

 

This job is stuck because the project doesn't have any runners online assigned to it. even though i have added runner and it is alive

 

ERROR This job is stuck because the project doesn't have any runners online assigned to it. even though i have added runner and

Despite of the fact runner is alive. Why this error is coming

devops.stackexchange.com

runner 설정에서 untaged jobs 체크를 해준다.

REFERENCES

GitLab Runner 를 사용하여 GitLab CI 구성하기

GitLab-CI Runner가 동작하지 않을 때 해봐야 할 것들

How to check the version of GitLab?

Docs archives | GitLab | GitLab

GitLab CI/CD + SSH 공개키를 이용한 자동배포

반응형