部署GitLab
1.1 問(wèn)題
本案例要求搭建一臺(tái)GitLab服務(wù)器,要求如下:
- 準(zhǔn)備環(huán)境(容器環(huán)境)
- 安裝GitLab
1.2 方案
實(shí)驗(yàn)環(huán)境準(zhǔn)備(沿用DAY01的實(shí)驗(yàn)環(huán)境):
1)準(zhǔn)備兩臺(tái)RHEL8虛擬機(jī),主機(jī)名分別為develop和git。
2)develop主機(jī)的IP地址為192.168.4.10,不需要配置網(wǎng)關(guān)和DNS。
3)git主機(jī)的IP地址為192.168.4.20,不需要配置網(wǎng)關(guān)和DNS。
4)給develop和git兩臺(tái)主機(jī)配置可用的YUM源。
備注:跨網(wǎng)段走路由,相同網(wǎng)段不需要配置網(wǎng)關(guān)就可以互聯(lián)互通!
實(shí)驗(yàn)拓?fù)淙鐖D-1所示。

圖-1
1.3 步驟
實(shí)現(xiàn)此案例需要按照如下步驟進(jìn)行。
步驟一:環(huán)境準(zhǔn)備(在192.168.4.20主機(jī)操作)
1)防火墻、SELinux。
[root@git ~]# firewall-cmd --set-default-zone=trusted
[root@git ~]# setenforce 0
[root@git ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config
2)修改sshd默認(rèn)端口。
因?yàn)镚it是通過(guò)SSH協(xié)議形式訪問(wèn),后面需要啟動(dòng)GitLab容器,該容器需要占用22端口,而電腦的sshd服務(wù)也需要占用22端口(端口沖突),所以需要提前修改sshd默認(rèn)端口,將端口修改為2022。
注意:修改后需要重新登錄一次虛擬機(jī)(重新登錄需要指定端口)。
[root@git ~]# vim /etc/ssh/sshd_config
Port 2022 #17行
[root@git ~]# systemctl restart sshd
[root@git ~]# exit
ssh -p 2022 192.168.4.20 #真機(jī)
3)準(zhǔn)備容器環(huán)境。
提示:gitlab_zh.tar在第二階段素材目錄中,需要先將該素材拷貝到192.168.4.20主機(jī)。(比如拷貝到/root目錄)
[root@git ~]# dnf -y install podman
[root@git ~]# podman load < ./gitlab_zh.tar
[root@git ~]# podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/gitlab_zh latest 1f71f185271a 2 years ago 1.73 GB
4)創(chuàng)建數(shù)據(jù)目錄
容器無(wú)法持久保存數(shù)據(jù),需要將真機(jī)目錄和容器目錄綁定,實(shí)現(xiàn)數(shù)據(jù)永久保存。
[root@git ~]# mkdir -p /srv/gitlab/{config,logs,data}
步驟二:?jiǎn)?dòng)GitLab容器(192.168.4.20操作)
tar包較大,內(nèi)存需要3000
1)啟動(dòng)容器
[root@git ~]# touch /etc/resolv.conf
#如果沒(méi)有該文件則創(chuàng)建文件,防止無(wú)法podman run啟動(dòng)容器
[root@git ~]# podman run -d -h gitlab --name gitlab \
-p 443:443 -p 80:80 -p 22:22 \
--restart=always \
-v /srv/gitlab/config:/etc/gitlab \
-v /srv/gitlab/logs:/var/log/gitlab \
-v /srv/gitlab/data:/var/opt/gitlab \
gitlab_zh
注釋:
-d將容器放入后臺(tái)啟動(dòng)。
-h設(shè)置容器的主機(jī)名為gitlab。
--name設(shè)置容器名稱為gitlab。
-p進(jìn)行端口映射,將git主機(jī)的443、80、22端口和git上面運(yùn)行的容器端口綁定
這樣以后任何人訪問(wèn)git主機(jī)(192.168.4.20)的22端口也就是在訪問(wèn)容器里面的22端口,任何人訪問(wèn)git主機(jī)(192.168.4.20)的80端口也就是訪問(wèn)容器里面的80端口。
-v將git主機(jī)上面的目錄和容器里面的目錄綁定,git主機(jī)的/srv/gitlab/config目錄對(duì)應(yīng)容器里面的/etc/gitlab/目錄,其他目錄同理。
最后的gitlab_zh是鏡像名稱。
開(kāi)發(fā)----gitlab-----jenkins-----制作容器鏡像-----啟動(dòng)容器
2)配置systemd,實(shí)現(xiàn)容器開(kāi)機(jī)自啟動(dòng)(選做實(shí)驗(yàn))
生成service文件,-n是容器的名稱,給gitlab容器生成service文件
[root@git ~]# cd /usr/lib/systemd/system
[root@git ~]# podman generate systemd -n gitlab --files
[root@git ~]# cd ~
設(shè)置開(kāi)機(jī)自啟動(dòng)
[root@git ~]# systemctl enable container-gitlab.service
3)初始化登錄密碼(真機(jī)使用瀏覽器訪問(wèn)GitLab頁(yè)面)
# firefox http://192.168.4.20
GitLab默認(rèn)用戶名為root,第一次訪問(wèn)需要設(shè)置密碼,效果如圖-2所示。

圖-2
設(shè)置密碼后即可使用新設(shè)置的密碼登錄(密碼要8位,有字母符號(hào)數(shù)字組成),效果如圖-3所示。

圖-3
配置GitLab
2.1 問(wèn)題
沿用練習(xí)一,配置GitLab,具體要求如下:
- 創(chuàng)建GitLab用戶和組
- 創(chuàng)建GitLab項(xiàng)目
- 客戶端管理GitLab項(xiàng)目
- 上傳代碼
2.2 步驟
實(shí)現(xiàn)此案例需要按照如下步驟進(jìn)行。
步驟一:創(chuàng)建用戶和組
1)創(chuàng)建用戶,點(diǎn)擊GitLab頁(yè)面的小扳手圖標(biāo),創(chuàng)建用戶,效果如圖-4所示。

圖-4
創(chuàng)建jerry用戶,點(diǎn)擊《編輯》設(shè)置用戶的密碼,效果如圖-5所示。

圖-5
2)創(chuàng)建組
點(diǎn)擊GitLab頁(yè)面的小扳手圖標(biāo),創(chuàng)建組,效果如圖-6所示。

圖-6
設(shè)置組名稱(組名稱為devops)以及可見(jiàn)等級(jí)(等級(jí)為公開(kāi)),效果如圖-7所示。

圖-7
3)將用戶加入到組(將jerry用戶加入devops組),效果如圖-8所示。

圖-8
步驟二:創(chuàng)建GitLab項(xiàng)目
1)創(chuàng)建項(xiàng)目,效果如圖-9所示。

圖-9
2)設(shè)置項(xiàng)目名稱、組、可見(jiàn)等級(jí),效果如圖-10所示。

圖-10
步驟三:管理GitLab項(xiàng)目
1)客戶端使用密碼管理GitLab項(xiàng)目(在192.168.4.10主機(jī)操作)
[root@develop ~]# git config --global user.name "Administrator"
[root@develop ~]# git config --global user.email "admin@example.com"
[root@develop ~]# git clone http://192.168.4.20/devops/myproject.git
[root@develop ~]# cd myproject
[root@develop myproject]# touch README.md
[root@develop myproject]# git add README.md
[root@develop myproject]# git commit -m "add README"
[root@develop myproject]# git push -u origin master
Username for 'http://192.168.4.20': jerry #這里輸入用戶名
Password for 'http://jerry@192.168.4.20': #這里輸入密碼
2)客戶端生成SSH密鑰(在192.168.4.10主機(jī)操作)
[root@develop myproject]# rm -rf /root/.ssh/known_hosts #刪除之前的ssh遠(yuǎn)程記錄
[root@develop myproject]# ssh-keygen #生成ssh密鑰文件
[root@develop myproject]# cat ~/.ssh/id_rsa.pub #查看密鑰文件
ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQDPVwP8E7TtKha9H8Ec+CU2n19aIPo9sUa/pdM7gRaf0yG+Bcdy
Q7Hgi6pI51IhX6tat46L5tLkAY7urVeEmnPtUk/TVIUc0smJPXYKIggOCr2dDd9s1S0
3)使用jerry用戶登錄GitLab頁(yè)面
jerry用戶第一次登錄頁(yè)面需要重置一次密碼,密碼可以與舊密碼相同。效果如圖-11所示。

圖-11
4)上傳密鑰
將剛剛192.168.4.10上面創(chuàng)建的密鑰文件內(nèi)容上傳到GitLab。
點(diǎn)擊右上角賬戶圖標(biāo),點(diǎn)擊《設(shè)置》,點(diǎn)擊展開(kāi)按鈕,點(diǎn)擊《SSH密鑰》,然后將develop主機(jī)生成的密鑰文件內(nèi)容復(fù)制到GitLab上面。效果如圖-12、圖-13所示。

圖-12

圖-13
5)使用密鑰管理GitLab項(xiàng)目
首先要查看下基于SSH連接方式的鏈接,如圖-14所示。

圖-14
[root@develop myproject]# git remote remove origin
[root@develop myproject]# git remote add \
origin git@192.168.4.20:devops/myproject.git
重要備注:
前面的案例使用http協(xié)議訪問(wèn)clone了服務(wù)器的代碼倉(cāng)庫(kù),這里把之前的http服務(wù)器信息刪除(remove:刪除),然后在添加新的服務(wù)器信息(add:添加),使用ssh協(xié)議訪問(wèn)服務(wù)器。
[root@develop myproject]# echo hello word >> README.md
[root@develop myproject]# git add .
[root@develop myproject]# git commit -m "modify readme"
[root@develop myproject]# git push -u origin master
6)上傳靜態(tài)頁(yè)面代碼(代碼在第二階段素材lnmp_soft.tar.gz中)
需要提前將真機(jī)的網(wǎng)頁(yè)素材scp拷貝到develop虛擬機(jī)用戶的家目錄,解壓lnmp_soft.tar.gz,在該壓縮包里面有一個(gè)www_template.zip文件。
[root@develop ~]# dnf -y install unzip tar
[root@develop ~]# unzip www_template.zip
[root@develop ~]# cp -r www_template/* myproject/
[root@develop](mailto:root@develop) ~]# cd myproject/
[root@develop](mailto:root@develop) myproject]# git add .
[root@develop](mailto:root@develop) myproject]# git commit -m "web site"
[root@develop](mailto:root@develop) myproject]# git push -u origin master
[root@develop](mailto:root@develop) myproject]# git tag v1
[root@develop](mailto:root@develop) myproject]# git push -u origin v1
通過(guò)tag可以給代碼設(shè)置版本標(biāo)簽,如v1,v2,v3等等。
部署Jenkins
3.1 問(wèn)題
沿用練習(xí)二,部署CI/CD環(huán)境,部署Jenkins,具體要求如下:
- 準(zhǔn)備實(shí)驗(yàn)環(huán)境
- 部署Jenkins、初始化Jenkins
- 管理Jenkins插件、調(diào)整系統(tǒng)配置
3.2 方案
實(shí)驗(yàn)環(huán)境準(zhǔn)備:
1)5臺(tái)RHEL8虛擬機(jī),主機(jī)名分別為develop、git、jenkins、web1和web2。
2)develop主機(jī)的IP地址為192.168.4.10,不需要配置網(wǎng)關(guān)和DNS。
3)git主機(jī)的IP地址為192.168.4.20,不需要配置網(wǎng)關(guān)和DNS。
4)jenkins主機(jī)的IP地址為192.168.4.30,不需要配置網(wǎng)關(guān)和DNS。
5)web1和web2主機(jī)的IP地址分別為192.168.4.100和192.168.4.200,不需要配置網(wǎng)關(guān)和DNS。
6)所有主機(jī)都需要配置可用的系統(tǒng)YUM源,設(shè)置防火墻信任所有,SELinux放行所有。
備注:跨網(wǎng)段走路由,相同網(wǎng)段不需要配置網(wǎng)關(guān)就可以互聯(lián)互通!實(shí)驗(yàn)拓?fù)淙鐖D-15所示。

圖-15
1.開(kāi)發(fā)寫(xiě)代碼-----上傳git
2.jenkins 訪問(wèn)git拉取代碼
(可以調(diào)用測(cè)試腳本,可以打包,可以編譯)
3.jenkins把結(jié)果放入一個(gè)FTP共享
4.web1、web2訪問(wèn)共享獲取代碼
步驟一:環(huán)境準(zhǔn)備
1)設(shè)置防火墻和SELinux(僅以一臺(tái)主機(jī)為例,其他所有主機(jī)都需要操作)
[root@git ~]# firewall-cmd --set-default-zone=trusted
[root@git ~]# setenforce 0
[root@git ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config
2)安裝依賴軟件(git、postfix、java JDK)。
注意:僅在jenkins主機(jī)操作!
[root@jenkins ~]# dnf -y install git
[root@jenkins ~]# dnf -y install postfix
[root@jenkins ~]# dnf -y install mailx
[root@jenkins ~]# dnf -y install java-11-openjdk
[root@jenkins ~]# systemctl enable postfix --now
備注:Git(版本控制軟件)、postfix(郵件服務(wù)器軟件)、mailx(郵件客戶端軟件)、openjdk(Java JDK工具)。
步驟二:部署、初始化Jenkins
1)安裝、啟動(dòng)Jenkins。
[root@jenkins ~]# dnf -y install ./jenkins-2.164.3-1.1.noarch.rpm
[root@jenkins ~]# systemctl enable jenkins
[root@jenkins ~]# systemctl start jenkins
#設(shè)置jenkins服務(wù)為開(kāi)機(jī)自啟動(dòng)服務(wù),并立刻啟動(dòng)該服務(wù)
2)初始化Jenkins
真機(jī)瀏覽器訪問(wèn)Jenkins頁(yè)面(firefox http://192.168.4.30:8080)。
第一次訪問(wèn)會(huì)提示初始密碼的位置(密碼在/var/lib/Jenkins/secrets/initialAdminPassword文件中),效果如圖-16所示。

圖-16
初始化時(shí)選擇不安裝插件,效果如圖-17和圖-18所示。

圖-17

圖-18
使用默認(rèn)的admin用戶登錄,完成初始化操作,效果如圖-19,圖-20,圖-21所示。

圖-19

圖-20

圖-21
步驟三:管理Jenkins插件、系統(tǒng)配置
1)重置管理員密碼。
重置密碼如圖-22所示。

圖-22
使用新密碼重新登錄,如圖-23所示。

圖-23
2)插件管理。
查看插件列表,效果如圖-24、圖-25所示。

圖-24

圖-25
拷貝插件文件到Jenkins目錄,Jenkins插件目錄為插件目錄:/var/lib/jenkins/plugins/。
Jenkins插件文件在第二階段素材目錄:jenkins_plugins.tar.gz。
插件包含:中文插件、Git插件等。
需要提前將真機(jī)素材拷貝到Jenkins虛擬機(jī)。
警告:cp拷貝時(shí)需要-p選項(xiàng)保留權(quán)限!!!
[root@jenkins ~]# tar -xf jenkins_plugins.tar.gz
[root@jenkins ~]# cp -rp jenkins_plugins/* /var/lib/jenkins/plugins/
[root@jenkins](mailto:root@jenkins) ~]# systemctl restart jenkins
重新登錄Jenkins網(wǎng)頁(yè)控制臺(tái),如圖-26所示。

圖-26
再次查看插件列表,效果如圖-27、圖-28所示。

圖-27

圖-28
3)調(diào)整系統(tǒng)設(shè)置,配置郵箱,效果如圖-29、圖-30所示。

圖-29

圖-30
附加思維導(dǎo)圖,如圖-31所示。

圖-31