使用GitLab+Jenkins實(shí)現(xiàn)持續(xù)集成CI環(huán)境的示例代碼
一、持續(xù)集成簡(jiǎn)介
持續(xù)集成:Continuous Integration
簡(jiǎn)單來(lái)說(shuō)就是指,程序員在開(kāi)發(fā)代碼的過(guò)程中,可以頻繁的將代碼部署到主干上,并進(jìn)行自動(dòng)化測(cè)試。
持續(xù)交付:Continuous Delivery
簡(jiǎn)單來(lái)說(shuō)就是指在持續(xù)集成的基礎(chǔ)上,將代碼部署到預(yù)生產(chǎn)環(huán)境。
持續(xù)部署:Continuous Deoloyment
簡(jiǎn)單來(lái)說(shuō)就是指在持續(xù)交付的基礎(chǔ)上,將要部署的代碼實(shí)現(xiàn)自動(dòng)部署,包括持續(xù)交互,持續(xù)部署。
1.GitLab 簡(jiǎn)介
GitLab 是一個(gè)用于倉(cāng)庫(kù)管理系統(tǒng)的開(kāi)源項(xiàng)目。使用 Git 作為代碼管理工具,可以通過(guò) Web 界面來(lái)管理 Git 倉(cāng)庫(kù)。
2.Jenkins 簡(jiǎn)介
Jenkins 是一個(gè)獨(dú)立的開(kāi)源軟件項(xiàng)目,是基于 Java 開(kāi)發(fā)的一種持續(xù)集成工具,用于監(jiān)控持續(xù)重復(fù)的工作,旨在提供一個(gè)開(kāi)放易用的軟件平臺(tái),使軟件的持續(xù)集成變成可能。
作用:
- 保證團(tuán)隊(duì)開(kāi)發(fā)人員提交代碼的質(zhì)量,還能夠減輕軟件發(fā)布時(shí)的壓力;
- 持續(xù)集成中的任何一個(gè)環(huán)節(jié)都是自動(dòng)完成的,無(wú)需太多人工干預(yù),有利于減少重復(fù)過(guò)程以節(jié)省時(shí)間、費(fèi)用和工作量。
Jenkins 特點(diǎn):
- 開(kāi)源免費(fèi);
- 跨平臺(tái),支持所有的平臺(tái)。
- Master/Slave 支持分布式的
build
(構(gòu)建)
3.GitLab 和 GitHub 的區(qū)別
相同點(diǎn):
二者都是基于 Web 的 Git 倉(cāng)庫(kù),在很大程度上 GitLab 是仿照 GitHub 來(lái)做的,它們都提供了分享開(kāi)源項(xiàng)目的平臺(tái)。
不同點(diǎn):
- GitHub 如果要使用私有倉(cāng)庫(kù),超過(guò) 4 個(gè)是需要付費(fèi)的。GitLab 可以在上面創(chuàng)建私人的免費(fèi)倉(cāng)庫(kù)。
- GitLab 讓開(kāi)發(fā)團(tuán)隊(duì)對(duì)他們的代碼倉(cāng)庫(kù)擁有更多的控制。
4.持續(xù)集成系統(tǒng)的工作流程
- 開(kāi)發(fā)者將新版本代碼
push
到 GitLab 遠(yuǎn)程倉(cāng)庫(kù)上; - 隨后 GitLab 會(huì)觸發(fā) Jenkins 來(lái)進(jìn)行拉取到本地(通過(guò) Web Hook 或定時(shí)檢測(cè))
- 最后 Jenkins 會(huì)根據(jù)事先配置好的腳本進(jìn)行 Build。
二、使用 GitLab + Jenkins 實(shí)現(xiàn)持續(xù)集成(CI)環(huán)境
準(zhǔn)備工作
主機(jī)名 | 操作系統(tǒng) | 硬件 | IP 地址 |
---|---|---|---|
GitLab | CentOS 7.4 | 4 G(聯(lián)網(wǎng)狀態(tài)) | 192.168.1.1 |
Jenkins | CentOS 7.4 | 4 G(聯(lián)網(wǎng)狀態(tài)) | 192.168.1.2 |
Apache | CentOS 7.4 | 2 G | 192.168.1.3 |
1.安裝 Gitlab
安裝 Gitlab 所需組件
[root@GitLab ~]# yum install -y curl policycoreutils openssh-server openssh-clients postfix policycoreutils-python
開(kāi)啟 Postfix 郵件服務(wù)
[root@GitLab ~]# systemctl start postfix [root@GitLab ~]# systemctl enable postfix
安裝 Gitlab
[root@GitLab ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.0.2-ce.0.el7.x86_64.rpm [root@GitLab ~]# ls anaconda-ks.cfg gitlab-ce-12.0.2-ce.0.el7.x86_64.rpm [root@GitLab ~]# yum -y localinstall gitlab-ce-12.0.2-ce.0.el7.x86_64.rpm
配置 Gitlab 訪問(wèn)地址
[root@GitLab ~]# sed -i "/^external_url/cexternal_url 'http://192.168.1.1'" /etc/gitlab/gitlab.rb
注意:你們也可以將 IP 地址替換為域名。
重置 Gitlab(時(shí)間較長(zhǎng))
[root@GitLab ~]# gitlab-ctl reconfigure[root@GitLab ~]# netstat -anpt | grep nginx
1)登錄 Gitlab
訪問(wèn):http://192.168.1.1
注意:在 GitLab 中配置的中文并不是全部都是中文,你們可以安裝中文插件,我這邊使用的是谷歌瀏覽器轉(zhuǎn)換。
2)配置郵件報(bào)警
[root@GitLab ~]# vim /etc/gitlab/gitlab.rb # 在第 57 行后添加以下內(nèi)容 gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = 'smtp.qq.com' # SMTP 服務(wù)器 gitlab_rails['smtp_port'] = 465 # SMTP 服務(wù)器端口號(hào) gitlab_rails['smtp_user_name'] = '2085077346@qq.com' # 郵件賬號(hào) gitlab_rails['smtp_password'] = '' # 郵件授權(quán)碼 gitlab_rails['smtp_authentication'] = 'login' gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = true gitlab_rails['gitlab_email_from'] = '2085077346@qq.com'
重置 Gitlab
[root@GitLab ~]# gitlab-ctl reconfigure
登錄控制臺(tái)發(fā)送測(cè)試郵件
[root@GitLab ~]# gitlab-rails console irb(main):001:0> Notify.test_email('ChenZhuang1217@163.com','Test','Hello ZhangSan').deliver_now
查看
修改 GitLab 中 root 用戶的密碼
3)創(chuàng)建群組
點(diǎn)擊創(chuàng)建群組
填寫(xiě)群組信息
創(chuàng)建一個(gè)賬號(hào)
填寫(xiě)用戶信息
給河北彭于晏配置密碼
把新建用戶添加到群組
GitLab 用戶在組中有五種權(quán)限:
Guest
:可以創(chuàng)建問(wèn)題、發(fā)表評(píng)論、不能讀寫(xiě)版本庫(kù)(訪客)Reporter
:可以克隆代碼,不能提交(測(cè)試人員)Deveoper
:可以克隆代碼、開(kāi)發(fā)、提交、上傳(開(kāi)發(fā)人員)Master
:可以創(chuàng)建項(xiàng)目、添加tag
、保護(hù)分支、添加項(xiàng)目成員、編輯項(xiàng)目(運(yùn)維)Owner
:所有事情都可以做,包括設(shè)置項(xiàng)目的訪問(wèn)權(quán)限(老板,但老板一般都在辦公室)
4)創(chuàng)建項(xiàng)目
使用河北彭于晏用戶登錄創(chuàng)建
創(chuàng)建項(xiàng)目
在剛才創(chuàng)建的項(xiàng)目中創(chuàng)建文件
5)配置免密克隆
[root@GitLab ~]# ssh-keygen -t rsa # 配置密鑰對(duì) (三連回車即可) [root@GitLab ~]# cat .ssh/id_rsa.pub # 查看公鑰
將公鑰上傳到 GitLab 中
驗(yàn)證(克隆過(guò)程中不需要輸入密碼即可)
[root@GitLab ~]# git clone git@192.168.1.1:ZhangSan/test.git [root@GitLab ~]# ls anaconda-ks.cfg gitlab-ce-12.0.2-ce.0.el7.x86_64.rpm test [root@GitLab ~]# cd test/ [root@GitLab test]# ls 1.html
2.安裝 Jenkins
安裝 JDK(因?yàn)?Jenkins 是使用 Java 編寫(xiě)的,所以需要先安裝 JDK)
[root@Jenkins ~]# tar xf jdk-8u181-linux-x64.tar.gz [root@Jenkins ~]# ls anaconda-ks.cfg jdk1.8.0_181 jdk-8u181-linux-x64.tar.gz [root@Jenkins ~]# mv jdk1.8.0_181/ /usr/local/java
[root@Jenkins ~]# cat <<END >> /etc/profile JAVA_HOME=/usr/local/java/ PATH=$JAVA_HOME/bin:$PATH CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar export PATH JAVA_HOME CLASSPATH END
[root@Jenkins ~]# source /etc/profile
[root@Jenkins ~]# java -version # 查看 Java 版本 java version "1.8.0_181" Java(TM) SE Runtime Environment (build 1.8.0_181-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
安裝 Jenkins
[root@Jenkins ~]# wget https://pkg.jenkins.io/redhat-stable/jenkins-2.222.4-1.1.noarch.rpm [root@Jenkins ~]# ls anaconda-ks.cfg jenkins-2.222.4-1.1.noarch.rpm [root@Jenkins ~]# yum -y localinstall jenkins-2.222.4-1.1.noarch.rpm
修改配置文件
[root@Jenkins ~]# sed -i '/^JENKINS_USER/cJENKINS_USER="root"' /etc/sysconfig/jenkins
創(chuàng)建軟連接優(yōu)化執(zhí)行路徑
[root@Jenkins ~]# ln -s /usr/local/java/bin/java /usr/bin/
啟動(dòng) Jenkins
[root@Jenkins ~]# systemctl start jenkins [root@Jenkins ~]# netstat -anpt | grep 8080
1)登錄 Jenkins,并安裝相關(guān)插件
訪問(wèn):http://192.168.1.2:8080
點(diǎn)擊繼續(xù)后,會(huì)出現(xiàn)推薦安裝和自定義安裝,我這里選擇的是推薦安裝
2)配置 Jenkins 實(shí)現(xiàn) GitLab 更新代碼
安裝 Jenkins 插件
Credentials # 簽名證書(shū)管理插件 Gitlab # 安裝后從 GitLab 獲取代碼 Git 和 Git Client # 用于 Jenkins 在 GitLab 中拉取源碼 GitLab Hook # GitLab 觸發(fā) Jenkins 構(gòu)建項(xiàng)目 Gitlab Authentication # GitLab 和 Jenkins 認(rèn)證插件 SSH Plugin # 進(jìn)程執(zhí)行 Shell 腳本 Publish Over SSH # 用于通過(guò) SSH 部署應(yīng)用
注意:當(dāng)安裝好 Jenkins 插件后,插件可能會(huì)跟 Jenkins 出現(xiàn)版本差異,不用管,后面我會(huì)對(duì) Jenkins 進(jìn)行升級(jí)操作。
配置 Jenkins 免密拉取 GitLab 代碼
[root@Jenkins ~]# ssh-keygen -t rsa [root@Jenkins ~]# cat .ssh/id_rsa.pub
將公鑰上傳到 GitLab 上
將私鑰上傳到 Jenkins 上
Jenkins 的 root
用戶公鑰在 GitLab 上,私鑰在 Jenkins 上,目的就是為了方便 Jenkins 可以直接拉去 GitLab 上的代碼。
3)在 Jenkins 上創(chuàng)建項(xiàng)目
下載一下代碼
4)將代碼發(fā)布到 Web 服務(wù)器
這邊簡(jiǎn)單說(shuō)一下大致的流程:
- 通過(guò)我們這一系列的操作也可以看出來(lái),首先需要在 GitLab 上創(chuàng)建(上傳)項(xiàng)目,然后 Jenkins 會(huì)將代碼下載到本地;
- 最后可以使用 Jenkins 將代碼發(fā)送給指定服務(wù)器。
在 192.168.1.3
服務(wù)器上操作
[root@Apache ~]# yum -y install httpd [root@Apache ~]# systemctl start httpd
在 Jenkins 上配置 SSH 免密登錄
[root@Jenkins ~]# ssh-copy-id root@192.168.1.3
創(chuàng)建自動(dòng)上傳 Web 代碼的腳本
[root@Jenkins ~]# cat <<END > 1.sh #!/bin/bash scp /var/lib/jenkins/workspace/web/* root@192.168.1.3:/var/www/html/ END [root@Jenkins ~]# chmod +x 1.sh
將腳本添加到 Jenkins 中
發(fā)布項(xiàng)目
5)驗(yàn)證
3.實(shí)現(xiàn) Jenkins 自動(dòng)部署
1)安裝插件
Gitlab Hook Plugin
Build Authorization Token Root
Build Token Trigger
2)配置身份驗(yàn)證令牌
[root@Jenkins ~]# openssl rand -hex 12 038ef13e10ef686193784383
注意:-hex
輸出結(jié)果為 16 進(jìn)制數(shù)據(jù),數(shù)字 12 是指定生成的隨機(jī)字符為 12 字節(jié),即 24 個(gè) 16 進(jìn)制個(gè)數(shù)。
3)在 Jenkins 上配置觸發(fā)器
4)在 GitLab 的項(xiàng)目上配置鏈接和 Token
這里的網(wǎng)址和密鑰令牌都要和 Jenkins 上的匹配。
- 注意:當(dāng)創(chuàng)建鉤子時(shí)出現(xiàn)
Urlis blocked: Requests to the local network are not allowed
- 原因是因?yàn)?GitLab 10.6 版本以后為了安全,不允許向本地網(wǎng)絡(luò)發(fā)送 WebHook 請(qǐng)求。
開(kāi)啟請(qǐng)求
當(dāng)開(kāi)啟請(qǐng)求后,重新創(chuàng)建 Token 值即可。
5)驗(yàn)證
4.Jenkins 版本升級(jí)
下載后之后,我們只需要將 Jenkins 原有的包替換即可
[root@Jenkins ~]# rpm -ql jenkins # 查看 Jenkins 包安裝路徑 [root@Jenkins ~]# systemctl stop jenkins [root@Jenkins ~]# cd /usr/lib/jenkins/ [root@Jenkins jenkins]# mv jenkins.war jenkins-2.222.4.war.bak [root@Jenkins jenkins]# ls jenkins-2.222.4.war.bak jenkins.war [root@Jenkins jenkins]# systemctl start jenkins
查看
到此這篇關(guān)于使用GitLab+Jenkins實(shí)現(xiàn)持續(xù)集成CI環(huán)境的示例代碼的文章就介紹到這了,更多相關(guān)GitLab Jenkins持續(xù)集成CI環(huán)境內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
總結(jié)近幾年P(guān)ytorch基于Imgagenet數(shù)據(jù)集圖像分類模型
在過(guò)去的幾年里,許多深度學(xué)習(xí)模型涌現(xiàn)出來(lái),例如層的類型、超參數(shù)等。在本系列中,我將回顧幾個(gè)最顯著的 deeplearn 圖像分類的模型2021-08-08VSCode + WSL 2 + Ruby環(huán)境搭建圖文詳解
這篇文章主要介紹了VSCode + WSL 2 + Ruby環(huán)境搭建,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06使用roolup構(gòu)建你的lib(實(shí)現(xiàn)步驟)
大家都知道Rollup更加適合用于構(gòu)建lib 而 Webpack, Precel 更加適合開(kāi)發(fā)應(yīng)用。本文,將結(jié)合一個(gè)簡(jiǎn)單的例子說(shuō)說(shuō)如何使用Rollup構(gòu)建自己的lib,感興趣的朋友一起看看吧2021-08-08JetBrains 學(xué)生認(rèn)證教程(Pycharm,IDEA… 等學(xué)生認(rèn)證教程)
這篇文章主要介紹了JetBrains 學(xué)生認(rèn)證教程(Pycharm,IDEA… 等學(xué)生認(rèn)證教程)文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Windows環(huán)境下實(shí)現(xiàn)Jenkins部署的教程詳解
這篇文章主要介紹了Windows環(huán)境下實(shí)現(xiàn)Jenkins部署,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01Http 狀態(tài)代碼 指示(ajax,bs結(jié)構(gòu)用的到)
Http 狀態(tài)代碼主要是方便我們掌握http的一些錯(cuò)誤返回后,知道是什么原因?qū)е碌囊恍﹩?wèn)題,一般結(jié)合監(jiān)聽(tīng)軟件。2009-05-05so easy!10行代碼寫(xiě)個(gè)"狗屁不通"文章生成器功能
這篇文章主要介紹了通過(guò)10行代碼寫(xiě)個(gè)"狗屁不通"文章生成器功能,真的超級(jí)簡(jiǎn)單,感興趣的朋友跟隨腳本之家小編一起看看吧2020-01-01