今天跟大家分享CI/CD流程中的一個重要的階段:版本管理系統。由於筆者的LAB環境需要有一個版本管理的做法,所以就想到非常普遍的Git系統。並且因為想要在本地直接建立專屬環境,所以就想到了gitlab。
本文將說明以下內容:
我想這是最常被問到的第一個問題了吧…我到底要用Gitlab 還是用GitHub?
首先,不管是Gitlab或是GitHub,說穿了就是以Git為基礎建構出來的版本管理系統。基本上Git是由Linus Torvalds為Linux Kernel所設計的版本控制軟體,雖然當初是專門為了Linux所設計,但因為真的太好用,所以許多開源專案也都使用這套方法來進行管理。
為怕有人不清楚,簡單說明它們是什麼:
※ 接下來就是這二套系統的優點:
(1) GitLab:
(2) GitHub:
當然它們也都各自有各自的缺點,例如GitHub如果使用量超過1GB就要轉成付費帳戶,Gitlab相對於GitHub可能資源就沒有這麼龐大,但也相對的具備有完全的控制權的好處。
上述簡單說明了與GitHub的差異,本節就專門針對Gitlab做更進一步的說明。
現在GitLab已分成GitLab CE(社群版)
與GitLab EE(企業版)
。核心程式碼都是相同的。如果不想架設GitLab的話,也可以直接使用gitlab.com的服務。
常見的功能如下:
針對相關設定、記錄檔、資料檔的存放位置,另外需要建立掛載的目錄,可以在家目錄內,也可以另外建立。
※ Gitlab容器所會使用的位置與說明如下:
※ Gitlab使用者權限:
接下來就進入部署階段,大家可以試著跟據這邊提供的做法實際部署看看,Gitlab有許多種部署方式,可以到官網上去看相關文件說明。
以下使用docker image 來進行部署,該image已包含所有需要的元件。安裝的方式有以下三種:
本LAB使用Docker compose
來進行部署,此外官方的Image並沒有包含MTA元件,如果有寄信的需求,建議在另外建立一個Container或服務來實現。
如果要部署在K8S環境,建議使用官方另一個部署的方式(Operator),不然可能造成單點失誤。
此處使用:gitlab/gitlab-ce:latest
#---------------------------------------------------
# S3-1. 建立目錄
#---------------------------------------------------
[root]# mkdir -p /srv/gitlab
[root]# vim /root/.bash_profile
export GITLAB_HOME=/srv/gitlab
#---------------------------------------------------
# S3-2. Change the GitLab Shell SSH port
# GitLab使用SSH來與Git溝通,預設是22 Port,但會與主機相衝
# 可以選擇直接改主機的SSH不要使用22,或是修改GitLab不要用22 Port
#---------------------------------------------------
=> 用docker-compose的話,直接改內容即可
#---------------------------------------------------
# S3-3. 建立docker-compose.yaml
#---------------------------------------------------
[root]# mkdir -p /root/gitlab/
[root]# vim docker-compose.yml
version: '3.6'
services:
gitlab:
image: gitlab/gitlab-ce:latest
container_name: gitlab
restart: always
hostname: 'gitlab.test.example.poc'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.test.example.poc:8929'
gitlab_rails['gitlab_shell_ssh_port'] = 2424
ports:
- '8929:8929'
- '8443:8443'
- '2424:2424'
volumes:
- '$GITLAB_HOME/config:/etc/gitlab'
- '$GITLAB_HOME/logs:/var/log/gitlab'
- '$GITLAB_HOME/data:/var/opt/gitlab'
shm_size: '256m'
[root]# docker-compose up -d
[root]# docker ps
#---------------------------------------------------
# S3-4. 登入Web
#---------------------------------------------------
http://gitlab.test.example.poc:8929
=> 修改初始密碼 (root/P@ssw0rd)
如果沒出現,可以到$GITLAB_HOME/config/initial_root_password取得登入密碼
[root]# docker exec -it gitlab /bin/bash (cat $GITLAB_HOME/config/initial_root_password)
Password: I+UkaZl6xT0iMBBXJ3TIZNor+M+ZnOz//Hhoz01zSHk=
以下是一般安裝完GitLab之後會做的幾件任務,可跟據需求進行安裝設定:
本文將進行Email and Notification
的設定,使用本機的smtp server進行發信。
#-------------------------------------------------
# S4-1. 取得docker host ip
#-------------------------------------------------
[root]# ip a
10.107.88.7
#-------------------------------------------------
# S4-2. 修改docker-compose, 加入本機IP
#-------------------------------------------------
[root]# vim docker-compose.yaml
version: '3.6'
services:
gitlab:
image: gitlab/gitlab-ce:latest
extra_hosts:
- "dockerhost:10.107.88.7"
container_name: gitlab
restart: always
[root]# docker-compose up -d
#-------------------------------------------------
# S4-3. 確認container內部的/etc/hosts
#-------------------------------------------------
[root]# docker exec -it gitlab /bin/bash
root# cat /etc/hosts
10.107.88.7 dockerhost
172.18.0.2 gitlab.test.example.poc gitlab
#-------------------------------------------------
# S4-4. 修改sendmail
#-------------------------------------------------
[root]# yum install sendmail
[root]# vim /etc/mail/sendmail.cf (開啟25 Port可連線)
#註解以下
#O DaemonPortOptions=Port=smtp,Addr=127.0.0.1, Name=MTA
#新增以下
O DaemonPortOptions=Port=smtp,Addr=0.0.0.0, Name=MTA
[root]# systemctl restart sendmail
[root]# nc -v localhost 25s
#-------------------------------------------------
# S4-5. 允許relay清單
#-------------------------------------------------
[root]# vim /etc/mail/access
最後加上
Connect:10.107.88 RELAY
#-------------------------------------------------
# S4-6. 讓gitlab透過host的sendmail寄信
#-------------------------------------------------
[root]# vim /srv/gitlab/config/gitlab.rb
gitlab_rails[‘smtp_enable’] = true
gitlab_rails[‘smtp_address’] = “dockerhost"
gitlab_rails[‘smtp_port’] = 25
#gitlab_rails[‘smtp_user_name’] = “"
#gitlab_rails[‘smtp_password’] = “"
gitlab_rails[‘smtp_domain’] = “dockerhost"
#gitlab_rails[‘smtp_authentication’] = “none"
gitlab_rails[‘smtp_openssl_verify_mode’] = ‘none’
gitlab_rails[‘smtp_enable_starttls_auto’] = false
gitlab_rails[‘smtp_tls’] = false
gitlab_rails[‘smtp_ssl’] = false
gitlab_rails[‘smtp_force_ssl’] = false
#gitlab_rails[‘smtp_pool’] = false
設定寄件者
gitlab_rails[‘gitlab_email_from’] = ‘gitlabuser@test.example.poc’
gitlab_rails[‘gitlab_email_display_name’] = ‘gitlabuser’
設定gitlab admin寄件者
alertmanager[‘admin_email’] = ‘c’
[root]# docker exec -it gitlab /bin/bash
root# gitlab-ctl reconfigure
[2024-02-16T03:19:10+00:00] INFO: Report handlers complete
Infra Phase complete, 7/778 resources updated in 55 seconds
gitlab Reconfigured!
#-------------------------------------------------
# S4-7. 測試localhost寄信
# 此為測試,確認可從gitlab container發信到localhost即可
#-------------------------------------------------
[root]# nc -v localhost 25
EHLO localhost (跟主機打招呼)
MAIL FROM:<gitlabuser@test.example.poc>
RCPT TO:<gitlabuser@test.example.poc>
DATA
SUBJECT: mail server text!
Test!!
今天說明了Gitlab與GitHub的差異與在自已的環境內部署Gitlab來進行測試的分享。筆者實務上Gitlab與GitHub都有在使用。但GitHub的主要內容是做為測試文章的異地備份點,同時GitHub也有自已的App,讓筆者可以隨時透過手機就可以查看自已的筆記內容。
未來也將繼續針對安裝完後的一些實務作法,例如實務上建構出CI/CD的Pipeline,部署在K8S內的做法等等進行分享,也希望大家持續關注。
最後,也希望大家可以給筆者一個鼓勵,如果想要第一時間看到後續的文章也請大家follow我~那我們下期再見~~~
※ References: