설치 과정
사내 원격 레포지토리 서비스를 gitlab을 도입해오기로 하여
gitlab을 설치하게 되었다.
gitlab을 사용하는 방법은 깃랩 온라인 서비스를 사용하는 것과,
깃랩을 설치하여 사용하는 방법이 있다.
돈을 내고 사용할 것은 아니므로 깃랩 커뮤니티 버전을 서버에 설치하여 사용하려고 한다.
깃랩을 서버에 설치하는 방법은 대충 깃랩에서 공식 문서에 나오는 명령어를 통해 설치하는 방법과
도커 이미지를 이용해 사용하는 방법 두 가지가 있다.
도커를 사용하여 설치해보려고 한다.
기준 서버는 우분투 22.04 lts 버전이다.
깃랩은 공식 깃랩 커뮤니티 버전 이미지가 존재한다.

도커 image를 pull 한다.
그냥 바로 실행시켜본다.
docker run -it -d --name gitlab gitlab/gitlab-ce:latest

포트 22, 80, 443을 사용한다.
80, 443은 웹 사이트를 띄우기 위한 포트로 사용하고, ssh는 ssh 를 통한 clone, pull, push 를 사용하기 위해 사용하는 것으로 보인다.
사내에 사용할 깃랩 컨테이너이므로 Docker Compose 환경으로 만들어본다.
version: "3.0"
services:
gitlab:
image: gitlab/gitlab-ce:16.7.7-ce.0
container_name: gitlab
restart: always
volumes:
- $GITLAB_HOME/config:/etc/gitlab
- $GITLAB_HOME/logs:/var/log/gitlab
- $GITLAB_HOME/data:/var/opt/gitlab
ports:
- 80:80
- 443:443
- 5452:22
env_file:
- ./.env
깃랩 공식 홈페이지의 도커를 위한 설정에 추천하는 volume 설정이 존재한다. 원하는 디렉토리를 지정 해 그대로 사용하겠다.
.env 파일:
GITLAB_HOME=/usr/gitlab
GITLAB_OMNIBUS_CONFIG="external_url 'http://gitlab.example.com'"
깃랩 설정 파일은 /etc/gitlab/gitlab.rb
디렉토리에 존재하지만 처음부터 external_url을 설정하는 것으로 해 보겠다. 깃랩 공식 홈페이지의 도커를 위한 설정을 그대로 따라한 것이다.
실행시키고, 컨테이너의 로그를 확인해본다.

실컷 뭔가 돌아가면서 세팅이 시작된다.
깃랩 자체가 사용하는 환경과 그에 따른 설정이 많기 때문에, 이미지를 받아 사용하는 입장에서 이미지를 받아 실행시키는 것은 쉬우나 그만큼 세팅이 오래 걸린다.
좀 기다리다 보면 gitlab 홈페이지가 열린다.

깃랩 이미지를 사용한 깃랩 서비스에서 기본 계정은 root
이며, 비밀번호는 /etc/gitlab/initial_root_password
파일에 24시간 동안 기록되어 있는 상태로 존재한다고 한다.

중간에 password가 기입되어 있다.
password 기입 후 진입 시 진입이 가능하다.

관리자 설정
관리자 계정이므로, 왼쪽 하단에 admin area 버튼이 존재한다.
관리자 화면에서는 기타 다양한 설정이 가능하고, 일반 사용자를 생성하거나 회원가입 허가 등을 할 수 있다.

admin area의 설정에서 CI/CD 설정의 Continuous Integration and Deployment 내에 Auto DevOps라는 항목이 있는데 기본적으로 활성화 되어 있다.
CI/CD를 설정하지 않아도 기본으로 가지고 있는 Auto DevOps 기능으로 파이프라인이 작동하게 할 것인지 여부인데, 설정해 둔 파이프라인이 없을 때에도 파이프라인이 돌다가 실패하므로 꺼 두는 것이 좋다.

그 외에는 알아서 설정한다.
SMTP 설정
보통 깃허브, Bitbucket, 그 외 기타 원격 레포지토리 서비스를 사용하면 이슈 언급 등 기타 많은 상황에서 메일이 오기 마련인데, 깃랩을 깃랩 이미지를 통해 컨테이너로 실행 시 기본으로 SMTP 설정이 되어 있지 않다.
그래서 SMTP 서버를 사용하도록 설정하고, SMTP 서비스를 따로 설치하거나 구글 SMTP 등을 사용하게 하여 메일 서비스를 사용해야 한다.
깃랩 컨테이너 내에 `/etc/gitlab/gitlab.rb` 라는 파일이 각종 설정을 위한 파일이다.
설정 파일 내에 smtp 관련 설정이 주석 처리되어 있는데, 주석 해제 후 구글 SMTP 설정의 정보를 사용했다.
### GitLab email server settings
###! Docs: https://docs.gitlab.com/omnibus/settings/smtp.html
###! **Use smtp instead of sendmail/postfix.**
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.gmail.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "##########@gmail.com"
gitlab_rails['smtp_password'] = "############"
gitlab_rails['smtp_domain'] = "smtp.gmail.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['smtp_pool'] = false
###! **Can be: 'none', 'peer', 'client_once', 'fail_if_no_peer_cert'**
###! Docs: http://api.rubyonrails.org/classes/ActionMailer/Base.html
gitlab_rails['smtp_openssl_verify_mode'] = 'peer'
# gitlab_rails['smtp_ca_path'] = "/etc/ssl/certs"
# gitlab_rails['smtp_ca_file'] = "/etc/ssl/certs/ca-certificates.crt"
### Email Settings
# gitlab_rails['gitlab_email_enabled'] = true
저장 후, 컨테이너 내에서
gitlab-ctl reconfigure
명령어를 사용하거나
컨테이너를 재실행 하면 설정이 반영된다.
SMTP 발송 테스트는 비밀번호를 찾는 화면으로 테스트 해 볼 수 있다.

CI/CD를 위한 Gitlab Runner 설정
CI/CD 를 구축 시 편하게 개발할 수 있다. 그것을 위해 Gitlab runner를 사용하려고 한다.
gitlab runner도 도커 공식 이미지로 존재한다.

마찬가지로 이미지 pull 이후 compose 구성 파일에 서비스를 추가한다.
... 생략
gitlab-runner:
container_name: gitlab_runner
image: gitlab/gitlab-runner:ubuntu
restart: always
env_file:
- ./.env
volumes:
- ./gitlab-runner/etc/gitlab-runner:/etc/gitlab-runner
deploy:
resources:
limits:
memory: 1024M
깃랩 러너 설정 이후 생성되는 설정파일이 /ect/gitlab-runner
디렉토리 내에 생성된다고 하여 volume 매핑을 해 두었다.
컨테이너 자체의 메모리 설정도 추가해두었다. 유동적으로 바꿔 쓸 수 있으나 간단하게 사용하기 위해 메모리 제한을 두었다.
gitlab runner 컨테이너만 compose 서비스에서 따로 실행시킨다.
docker compose up -d gitlab-runner
깃랩 러너는 실행 이후, Gitlab 내에서 CI/CD - Runners - new Instance Runner를 통해 신규 러너를 추가한 후 연동한다.

대충 태그 같은것과 깃랩이 돌아가는 플랫폼에 대한 라벨 설정을 한다

Tags의 Run untagged Jobs는 체크 해 두면 편하다. 미 체크 시 태그 설정이 되어 있지 않은 Job는 runner로 실행을 막겠다는 것인데, 굳이 막을 필요는 없을 것 같다.

설정 이후, Create Runner 클릭 시 runner 설정을 위한 가이드가 나온다.

runner 컨테이너 내에서 gitlab-runner register
명령어를 통해 깃랩 러너 등록을 하는 절차이다.
url 항목은 컨테이너 내의 설정에 external_url 설정을 잘 해뒀다면 올바른 url으로 나타날 것이다.
깃랩 러너 컨테이너 내에서 실행시켜본다.
gitlab-runner register 이후 --url 옵션과 --token 옵션을 주면 한 번에 될 줄 알았는데 잘 안되길래, gitlab-runner register
명령어 입력 후 차례차례 시행했다.

세 번째 항목에 Enter a executor는 깃랩러너가 CI 설정 이후 파이프라인 내에서 무슨 실행기를 사용해 어떤 프로그램을 돌릴 것이냐를 선정하는 것 같은데, 그냥 shell으로 선택했다.
정상적으로 register 되었다면,

이런 식으로 온라인이 될 것이다.
그 후 각 프로젝트에서 각자 설정하여 CI/CD 를 위한 파이프라인을 구성하면 된다.
예시 .gitlab-ci.yml:
stages:
- build-deploy
build-deploy-job: # This job runs in the build stage, which runs first.
stage: build-deploy
script:
- echo "send build trigger for Jenkins."
- curl -X POST https://$JENKINS_USER:$JENKINS_API_TOKEN@jenkins.example.com/job/example/build?token=outCall
only:
- main
- develop
### 참고한 글:
https://junhokims.tistory.com/35
https://potato-yong.tistory.com/145
https://velog.io/@hanif/Docker로-GitLab-설치-및-접속하기
깃랩 on Docker 공식 문서: https://docs.gitlab.com/ee/install/docker.html
docker 에서 gitlab 의 external_url 설정시 동작 안하는 문제: https://mansookim.tistory.com/128
깃랩 smtp 설치 및 기타설정 참고: https://hyooi.github.io/서버/2021/11/02/docker-gitlab-smtp.html
smtp 설정: https://flowlog.tistory.com/46
깃랩러너 도커 문서:
https://docs.gitlab.com/runner/install/docker.html
https://docs.gitlab.com/runner/register/index.html
깃랩러너 오류 뜰 때:
