搭建GitLab+Jenkins持续集成环境图文教程
GitLab是一個(gè)代碼倉(cāng)庫(kù),用來(lái)管理代碼。Jenkins是一個(gè)自動(dòng)化服務(wù)器,可以運(yùn)行各種自動(dòng)化構(gòu)建、測(cè)試或部署任務(wù)。所以這兩者結(jié)合起來(lái),就可以實(shí)現(xiàn)開(kāi)發(fā)者提交代碼到GitLab,Jenkins以一定頻率自動(dòng)運(yùn)行測(cè)試、構(gòu)建和部署的任務(wù),幫組開(kāi)發(fā)團(tuán)隊(duì)更高效的集成和發(fā)布代碼。
下面是我最近安裝GitLab+Jenkins環(huán)境的一個(gè)過(guò)程,記錄下來(lái),以備日后參考。
另外,這篇文章雖然很長(zhǎng),講得很瑣碎,但是仍有未能描述清楚的地方,如果按照這篇文章未能搭建成功,請(qǐng)耐心分析,也可從官方文檔 找找靈感,繼續(xù)下去總會(huì)成功的。
環(huán)境
本文將在單機(jī)上搭建一個(gè)GitLab+Jenkins環(huán)境,兩者分別使用不同的端口,操作系統(tǒng)是ubuntu 16,其它系統(tǒng)可去官網(wǎng)找教程。
安裝GitLab
這里參照官網(wǎng)安裝教程,命令和官網(wǎng)是一樣的,不過(guò)有些地方有特殊說(shuō)明,所以,可以直接參照本小節(jié)來(lái)安裝。
1、安裝GitLab依賴(lài)
sudo apt-get install curl openssh-server ca-certificates postfix注意,在安裝postfix的時(shí)候,選擇“internet site”:
然后,“system mail name”填寫(xiě)你的服務(wù)器的IP地址(下面這張圖只是):
為什么要填I(lǐng)P地址呢?
這是因?yàn)?#xff0c;如果自己手上沒(méi)有已注冊(cè)的域名的話,隨便填寫(xiě)一個(gè)域名是解析不了的。而這里填寫(xiě)的域名對(duì)GitLab影響很大,比如我這里隨便填為“qsjn.com”,那我在GitLab中創(chuàng)建的項(xiàng)目默認(rèn)就會(huì)使用“git@qsjn.com”這樣的地址,這就會(huì)帶來(lái)不必要的麻煩。但是,如果你真的有注冊(cè)域名的話,還是建議填寫(xiě)你的注冊(cè)域名。
2、下載和安裝GitLab
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash sudo apt-get install gitlab-ee3、配置GitLab
GitLab默認(rèn)會(huì)占用80、8080和9090端口,很不巧,Jenkins默認(rèn)也會(huì)使用8080端口,所以,這一步操作將會(huì)修改GitLab的默認(rèn)端口為11000、11001和11002,如果你還是希望使用默認(rèn)端口的話,可以跳過(guò)這一步。
sudo vi /etc/gitlab/gitlab.rb(1)將
external_url 'http://127.0.0.1'修改為:
external_url 'http://<你的服務(wù)器地址或域名>:11000'(2)將
# unicorn['port'] = 8080修改為:
unicorn['port'] = 11001(3)將
#prometheus['listen_address'] = 'localhost:9090'修改為:
prometheus['listen_address'] = 'localhost:11002'4、生效配置和啟動(dòng)GitLab
因?yàn)槲覀冃薷牧伺渲?#xff0c;所以使用reconfigure命令重新配置
sudo gitlab-ctl reconfigure另外說(shuō)明一下,平時(shí)未修改配置的話,可以使用:
sudo gitlab-ctl start/stop來(lái)啟動(dòng)和關(guān)閉GitLab.
至此,GitLab安裝完畢
使用GitLab創(chuàng)建一個(gè)項(xiàng)目
1、打開(kāi)http://<你的服務(wù)器IP>:<11000>,登錄進(jìn)去(詳見(jiàn)下面),點(diǎn)擊new group創(chuàng)建一個(gè)項(xiàng)目組,信息可以自己看著填,沒(méi)有關(guān)系
打開(kāi)http://<你的服務(wù)器IP>:<11000>,會(huì)彈出一個(gè)設(shè)置初始密碼的界面,按照要求輸入初始密碼,就會(huì)跳轉(zhuǎn)到登錄頁(yè)面。gitlab管理員用戶(hù)名為root
2、接著在項(xiàng)目組里面創(chuàng)建一個(gè)項(xiàng)目,項(xiàng)目的信息自己看著填,沒(méi)有關(guān)系
3、新建的項(xiàng)目都會(huì)有操作提示,如果對(duì)git不熟悉的話,建議簡(jiǎn)單記一下,特別是global setting , 本文后面會(huì)用到:
安裝Jenkins
本節(jié)參考了官方安裝教程,但會(huì)修改默認(rèn)端口
1、下載Jenkins
這里使用一個(gè)國(guó)內(nèi)的源,速度會(huì)快一點(diǎn),2017年7月左右更新的,現(xiàn)在已經(jīng)不是最新版,不過(guò)裝好之后也可以在界面上進(jìn)行升級(jí):
或者也可使用官方的下載地址,不過(guò)可能會(huì)慢一點(diǎn):
curl -O http://mirrors.jenkins.io/war-stable/latest/jenkins.war2、運(yùn)行Jenkins
sudo nohup java -jar jenkins.war --httpPort=12000 &這里將jenkins的端口修改成12000,并且使用后臺(tái)模式運(yùn)行
至此,Jenkins安裝成功,可以用瀏覽器打開(kāi)http://<服務(wù)器ip>:12000訪問(wèn),然后按照jenkins的提示一步步走就可以了。
打開(kāi)http://<服務(wù)器ip>:12000,首先彈出一個(gè)界面,需要你填自動(dòng)生成的初始密碼,界面上有教程,執(zhí)行sudo vi /root/.jenkins/secrets/initialAdminPassword就看到了
安裝和Git,GitLab插件
用瀏覽器打開(kāi)Jenkins,點(diǎn)擊“系統(tǒng)設(shè)置”
點(diǎn)擊“插件管理”
切換到“可選插件”,分別搜索“GitLab Plugin”和“Git Plugin”,然后點(diǎn)擊“直接安裝”。如果在“可選插件”里沒(méi)有搜到,可能默認(rèn)你已經(jīng)安裝了,可以在“已安裝”里查看
安裝完會(huì)顯示:
配置GitLab插件
打開(kāi)GitLab,點(diǎn)擊“setting”——“Account”,復(fù)制“Private token”備用,如下所示:
打開(kāi)Jenkins,點(diǎn)擊“系統(tǒng)管理”——“系統(tǒng)設(shè)置”,如下所示:
點(diǎn)擊“配置”下拉框,點(diǎn)擊“Gitlab”選項(xiàng),如下所示:
配置GitLab,”Connection Name”隨便填,“Git Host URL”填GitLab的訪問(wèn)地址,然后點(diǎn)“Add”——“jenkins”,如下所示:
在彈出框里,“kind”選擇“GitLab API Token”,將先前復(fù)制的“Private token”粘貼到“API token”輸入框中,然后點(diǎn)擊“Add”,如下所示:
選擇剛剛新建的“Credentials”,如下所示:
設(shè)置完了,要測(cè)試一下能否連接成功,點(diǎn)擊“test connection”,要看到返回“Success”才行,如下所示:
然后點(diǎn)擊頁(yè)面底下的“apply”,再點(diǎn)擊“save”,如下所示:
配置Git插件
打開(kāi)Jenkins,點(diǎn)擊“系統(tǒng)管理”——“系統(tǒng)設(shè)置”
點(diǎn)擊“配置”下拉框,選擇“Git plugin”選項(xiàng)
設(shè)置Git插件的全局配置,然后點(diǎn)擊“apply”——“save”
全局配置就是上文“Gitlab創(chuàng)建項(xiàng)目”部分講到的global setting ,在項(xiàng)目第一次commit前,這些信息都可以在GitLab的項(xiàng)目的首頁(yè)里找到
創(chuàng)建一個(gè)Jenkins Job
在jenkins里,一個(gè)任務(wù)叫做一個(gè)job。一般我們的項(xiàng)目會(huì)有多個(gè)分支,比如開(kāi)發(fā)分支和產(chǎn)品分支,我們可以對(duì)每一個(gè)分支都新建一個(gè)job,比如,我們對(duì)開(kāi)發(fā)分支創(chuàng)建一個(gè)測(cè)試的job,每次有代碼提交就自動(dòng)運(yùn)行一次測(cè)試,對(duì)產(chǎn)品分支創(chuàng)建一個(gè)打包的job,每次有代碼提交就運(yùn)行打包任務(wù)。
不過(guò)在這里,我們只是單純的創(chuàng)建一個(gè)job,來(lái)演示jenkins自動(dòng)運(yùn)行任務(wù)的過(guò)程。首先,點(diǎn)擊“創(chuàng)建一個(gè)新任務(wù)”
“item name”可以隨便起,然后點(diǎn)擊“構(gòu)建一個(gè)自由風(fēng)格的軟件項(xiàng)目”
點(diǎn)擊“OK”
至此,創(chuàng)建一個(gè)Job成功了
生成訪問(wèn)Gitlab的ssh秘鑰
打開(kāi) GitLab,點(diǎn)擊右上角的“setting”—— SSH Keys,就可以進(jìn)入到添加界面,如下所示:
然后按照下面的教程生成SSH Key,并將公鑰粘貼到“Key”里,name可以隨便起,但最好能一看就知道是某個(gè)人或某臺(tái)機(jī)器。此外,點(diǎn)擊“generate it”鏈接可以看到官方的教程。
從gitlab以SSH方式拉取或提交代碼需要用到這個(gè)SSH 秘鑰,哪臺(tái)機(jī)器需要從gitlab上拉取代碼,就在哪臺(tái)機(jī)器上生成一次SHH Key,因此,在jenkins服務(wù)器上,以及你的開(kāi)發(fā)PC上,都需要生成SSH密鑰。
下面分別貼出在windows下和在ubuntu下生成ssh密鑰的步驟,按照你實(shí)際的操作系統(tǒng)進(jìn)行操作:
windows下生成SSH密鑰的步奏
(1) 安裝git
(2) 在任意文件夾—右鍵—點(diǎn)擊“Git Bash Here”
(3) 在Git Bash中運(yùn)行:
ssh-keygen -t rsa -C "<填寫(xiě)一些文字作為注釋,方便管理>" -b 4096接下來(lái)全部按 Enter 使用默認(rèn)值(當(dāng)然也可以設(shè)置密碼,詳見(jiàn)下面?zhèn)渥?#xff09;,這會(huì)生成一對(duì)公鑰和私鑰:
如果這里你在Enter passphrase后面輸入的密碼,則以后每次提交代碼到gitlab都需要輸入這個(gè)密碼,這樣當(dāng)然更加安全,不過(guò)也頗為繁瑣。所以,這里就使用默認(rèn)值,也就是無(wú)密碼。
(4) 復(fù)制公鑰到粘貼板
cat ~/.ssh/id_rsa.pub | clip(5) 回到添加SSH Key的界面,將公鑰粘貼到其中,然后點(diǎn)擊“add key”
ubuntu下生成SSH密鑰的步奏
(1) 運(yùn)行:
ssh-keygen -t rsa -C "<填寫(xiě)一些文字作為注釋,方便管理>" -b 4096全部按 Enter 使用默認(rèn)值(當(dāng)然也可以設(shè)置密碼,詳見(jiàn)下面?zhèn)渥?#xff09;,這會(huì)生成一對(duì)公鑰和私鑰:
如果這里你在Enter passphrase后面輸入的密碼,則以后每次提交代碼到gitlab都需要輸入這個(gè)密碼,這樣當(dāng)然更加安全,不過(guò)也頗為繁瑣。所以,這里就使用默認(rèn)值,也就是無(wú)密碼。
(2) 如果這是jenkins服務(wù)器,則記下私鑰的存放路徑(私鑰、私鑰、私鑰,不是公鑰,重要的事情說(shuō)三遍),下一步將會(huì)用到,否則跳過(guò)這一步:
(3) 打開(kāi)公鑰文件,全選其中文字,復(fù)制到粘貼板:
vi [替換為你的公鑰路徑](3) 回到添加SSH Key的界面,將公鑰粘貼到其中,然后點(diǎn)擊“add key”
至此,在GitLab上創(chuàng)建項(xiàng)目已經(jīng)完成,你可以復(fù)制運(yùn)行項(xiàng)目主頁(yè)上的命令來(lái)同步新項(xiàng)目到本地。
配置Job
打開(kāi)jenkins,進(jìn)入job頁(yè)面:
點(diǎn)擊“配置”:
下面的配置都是在這里頁(yè)面
配置Job的源碼管理
選擇“源碼管理”,選擇“Git”,然后去GitLab中復(fù)制項(xiàng)目地址,粘貼到“Repository URL”,然后點(diǎn)擊“credentials”后面的“Add”按鈕
在彈出頁(yè)面里面:
- Kind 選擇 SSH Username with private key
- Username 填 root
- PrivateKey 選擇 From a file on jenkins master ,然后將服務(wù)器的 私鑰的存放路徑(私鑰、私鑰、私鑰,再說(shuō)三遍) 粘貼進(jìn)去
- passphrase 填創(chuàng)建SSH秘鑰時(shí)的設(shè)置的密碼,未設(shè)置可不填
然后點(diǎn)擊“Add”
在“credentials”里選擇我們剛剛創(chuàng)建的認(rèn)證方式:
如果沒(méi)報(bào)錯(cuò),說(shuō)明成功了,點(diǎn)擊頁(yè)面底部的“apply”。如果出錯(cuò)了,會(huì)在“Repository URL”和“Credentials”之間顯示紅色的錯(cuò)誤信息。
jenkins job默認(rèn)對(duì)master分支進(jìn)行構(gòu)建,你也可以自定義分支。這要求你的Gitlab代碼倉(cāng)庫(kù)中要存在這個(gè)分支,一般來(lái)說(shuō),就是要向代碼倉(cāng)庫(kù)提交一次更改,請(qǐng) 自行完成(Gitlab項(xiàng)目剛創(chuàng)建時(shí)是空的,一個(gè)分支也沒(méi)有,這樣的話,自動(dòng)構(gòu)建時(shí)會(huì)出錯(cuò))
配置Job的構(gòu)建觸發(fā)器
選擇“構(gòu)建觸發(fā)器”,勾選“Pull SCM”,這個(gè)選項(xiàng)會(huì)每隔一段時(shí)間檢查一下GitLab倉(cāng)庫(kù)中代碼是否有更新,有的話就執(zhí)行構(gòu)建操作。日程表如何設(shè)置,在這個(gè)輸入框下面有說(shuō)明。
擴(kuò)展閱讀:
常見(jiàn)構(gòu)建觸發(fā)器、:
- Build after other projects are built 當(dāng)另一個(gè)構(gòu)建任務(wù)完成之后觸發(fā)
- Build periodically 周期性的觸發(fā)
- Build when a change is pushed to GitLab. GitLab CI Service URL: http://191.8.2.112:12000/project/test-go-dev 當(dāng)代碼有更新的時(shí)候觸發(fā),通過(guò)GitLab CI
- GitHub hook trigger for GITScm polling 通過(guò)Github鉤子觸發(fā)
- Poll SCM 定期檢查代碼有無(wú)更新,有更新時(shí)觸發(fā)
這只是個(gè)人理解,具體怎么樣大家可以試試,Poll SCM方式我是試過(guò)的。
配置Job的構(gòu)建腳本
在build欄目里,選擇“jenkins execute shell”,然后輸入你項(xiàng)目的構(gòu)建命令(這依賴(lài)于你的項(xiàng)目,如Maven的maven build,gulp的gulp xxx 等等)
擴(kuò)展閱讀:
jenkins支持多種構(gòu)建腳本,可以自己試一下:
將構(gòu)建狀態(tài)推送回git
點(diǎn)擊“添加構(gòu)建后操作步驟”
選擇“public build status to gitlab”:
點(diǎn)擊“高級(jí)”,填寫(xiě)“build name”:
點(diǎn)擊“應(yīng)用”,點(diǎn)擊“保存”。
完成之后,在gitlab提交代碼觸發(fā)了構(gòu)建之后,gitlab界面上應(yīng)該會(huì)顯示構(gòu)建狀態(tài)圖標(biāo),如下圖所示:
后記
至此,所有工作已經(jīng)完成,現(xiàn)在你提交代碼到GitLab,jenkins會(huì)每隔一段時(shí)間幫你運(yùn)行一次構(gòu)建命令,這樣大家的代碼自動(dòng)集成到一起,出了錯(cuò)的話很快就知道了。
其它問(wèn)題
1、 從git上拉取的腳本的執(zhí)行權(quán)限問(wèn)題
每次jenkins運(yùn)行任務(wù)的時(shí)候,都會(huì)到gitlab上拉取到最新的代碼,放在workspace下。需要注意的是,默認(rèn)拉取的.sh腳本文件是沒(méi)有執(zhí)行權(quán)限的,需要在構(gòu)建命令里面添加:
chmod +x *.sh2、構(gòu)建 shell 用不了nvm,參考
是使用nvm前,加一句:
. ~/.nvm/nvm.sh總結(jié)
以上是生活随笔為你收集整理的搭建GitLab+Jenkins持续集成环境图文教程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: css --- 圣杯布局
- 下一篇: css --- flex:n的解析