Gitlab之GitLab CI 持續(xù)集成

? ? ? ? ? ??

(前言)

什么是GitLab CI 选泻???

gitlab-ci全稱是gitlab continuous integration焰情,也就是基于gitlab的持續(xù)集成工具珠移。中心思想是當(dāng)每一次push到gitlab的時(shí)候倔丈,都會(huì)觸發(fā)一次腳本執(zhí)行灰嫉,然后腳本的內(nèi)容包括了測(cè)試郊酒,編譯遇绞,部署等一系列自定義的內(nèi)容键袱。高版本的GitLab 自帶了GitLab CI,所以不需要另外安裝。

什么是GitLab-Runner摹闽?

GitLab-Runner是腳本執(zhí)行的承載者蹄咖,GitLab-CI事先注冊(cè)好GitLab-Runner,再push 代碼付鹿,對(duì)應(yīng)的Runner就會(huì)執(zhí)行你所定義的腳本澜汤。

環(huán)境

Centos7??GitLab(8.0版本以上,因?yàn)?/b>8.0版本之后才支持gitlab-ci)?Docker?Git?GitLab-Runner

步驟

安裝GitLab-CI這個(gè)不用安裝了 裝好GitLab就自帶了

安裝GitLab-Runner在centOS上    安裝gitlab-ci-multi-runner

配置.gitlab-yml文件

? 安裝GitLab-Runner

I.正常安裝

(Runner服務(wù)器可以GitLab所在服務(wù)器,也可以是程序需要部署的服務(wù)器舵匾,也可以是其它服務(wù)器俊抵。)

$curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multirunner/script.rpm.sh | sudo bash $ yum install gitlab-ci-multi-runner

II.docker鏡像安裝

[1]先獲取 gitlab-runner鏡像

sudo docker pull gitlab/gitlab-runner:latest

[2]啟動(dòng) gitlab-runner container

docker run -d --name gitlab-runner --restart always \ -v /srv/gitlab-runner/config:/etc/gitlab-runner \ -v /var/run/docker.sock:/var/run/docker.sock \?gitlab/gitlab-runner:latest

[3]注冊(cè)runner(docker容器的話則是進(jìn)入容器內(nèi)執(zhí)行以下指令)

gitlab-ci-multi-runner register

二??

注冊(cè)runner首先,進(jìn)入到你的 gitlab 項(xiàng)目網(wǎng)頁(yè)坐梯,找到 Settings -> CI/CI -> Runner Settings徽诲,然后找到項(xiàng)目對(duì)應(yīng)的 urltoken? 然后它會(huì)詢問(wèn)一些必要的認(rèn)證信息和配置信息,以下是個(gè)例子如下圖:


gitlab-runner注冊(cè)前需要的URL和token


gitlab-runner注冊(cè)成功后

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/ci )

https://your-gitlab-host/ci

Please enter the gitlab-ci tokenfor?this runnerxxx

Please enter the gitlab-ci descriptionfor?this runnermy-runner

INFO[0034] fcf5c619 Registering runner... succeeded

Please enter the executor: shell, docker, docker-ssh, ssh?docker

Please enter the Docker image (eg. ruby:2.1):maven:3-jdk-8

INFO[0037] Runner registered successfully. Feel free to start it, butif?it'srunning already the config should be automatically reloaded!

然后刷新網(wǎng)頁(yè),如下圖:可以看到Runner注冊(cè)成功?另外吵血,我們可以通過(guò)指令gitlab-ci-multi-runner?list查詢你注冊(cè)的runner谎替,用指令gitlab-ci-multi-runner status查看runner服務(wù)是否運(yùn)行中。

提升構(gòu)建速度

因?yàn)槲覀兪荕aven項(xiàng)目 配置中的maven:3-jdk-8實(shí)際就是docker image.每次構(gòu)建因?yàn)槎际窃讵?dú)立的container里蹋辅,maven的.m2文件并不會(huì)被多次構(gòu)建公用院喜,所以每次maven都需要重新從maven庫(kù)中下載依賴的jar包,這其實(shí)是沒(méi)必要的晕翠。

由于我們?cè)赿ocker

container 里構(gòu)建項(xiàng)目喷舀,我們可以使用docker的volume將.m2文件在多個(gè)container之間共享。

由此我們需要做一些變更淋肾,我們?cè)赗unner的服務(wù)器上打開(kāi)/srv/gitlab-runner/config/config.toml文件硫麻。將maven

.m2目錄加到volumes中。如下圖


四樊卓、配置.gitlab-ci.yml

GitLab

CI的一切工作拿愧,都是由.gitlab-ci.yml來(lái)配置的。

詳細(xì)文檔可以參考這里(https://docs.gitlab.com/ee/ci/yaml/README.html#stage)

首先碌尔,在項(xiàng)目根目錄下創(chuàng)建.gitlab-ci.yml文件(編輯完要提交到gitlab 才能生效):

配置完成后浇辜,當(dāng)你在項(xiàng)目push代碼到gitlab的時(shí)候,就會(huì)觸發(fā)gitlab-ci唾戚,然后執(zhí)行你定義的代碼柳洋。可以在CI/CD →Pipelines 看到所有狀態(tài)的Pipelines? ? ? running表示正在運(yùn)行叹坦,passed表示通過(guò)了熊镣。


ps:有個(gè)容易遇到的坑,當(dāng)你卡在pending不動(dòng)的時(shí)候,可以看看你的runner是否設(shè)置了'無(wú)tag標(biāo)簽也運(yùn)行'

回到你的runner绪囱,點(diǎn)編輯,然后测蹲,勾選第二項(xiàng)Run untagged jobs


運(yùn)行日志可以在這里查看:


在.gitlab-ci.yml配置里配置將構(gòu)建好的文件推動(dòng)到目標(biāo)服務(wù)器

1.首先給GitLab-Runner的docker容器生成SSH秘鑰ssh-key


生成的私鑰放在.ssh/下,如圖:


2.將生成的私鑰id_rsa.pub文件里的公鑰復(fù)制到目標(biāo)服務(wù)器的/.ssh/authorized_keys里面,(如果沒(méi)有authorized_keys這個(gè)文件的話則手動(dòng)創(chuàng)建)

如下圖:


1.首先將docker容器里生成的公鑰作為變量存放在gitlab-ci環(huán)境中,如下圖:


2.在runner容器里和目標(biāo)服務(wù)器的/etc/ssh/ssh_config里進(jìn)行如下配置


3.gitlab-ci.yml配置文件如下:


(圖中test.sh腳本可根據(jù)實(shí)際應(yīng)用情況編寫,我是在項(xiàng)目的根目錄建的腳本,因?yàn)檎麄€(gè)項(xiàng)目的路徑在runner執(zhí)行器中執(zhí)行的時(shí)候?yàn)榕R時(shí)路徑 下圖為test.sh)


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市鬼吵,隨后出現(xiàn)的幾起案子扣甲,更是在濱河造成了極大的恐慌,老刑警劉巖齿椅,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件文捶,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡媒咳,警方通過(guò)查閱死者的電腦和手機(jī)粹排,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)涩澡,“玉大人顽耳,你說(shuō)我怎么就攤上這事∶钔” “怎么了射富?”我有些...
    開(kāi)封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)粥帚。 經(jīng)常有香客問(wèn)我胰耗,道長(zhǎng),這世上最難降的妖魔是什么芒涡? 我笑而不...
    開(kāi)封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任柴灯,我火速辦了婚禮,結(jié)果婚禮上费尽,老公的妹妹穿的比我還像新娘赠群。我一直安慰自己,他們只是感情好旱幼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布查描。 她就那樣靜靜地躺著,像睡著了一般柏卤。 火紅的嫁衣襯著肌膚如雪冬三。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天缘缚,我揣著相機(jī)與錄音勾笆,去河邊找鬼。 笑死忙灼,一個(gè)胖子當(dāng)著我的面吹牛匠襟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播该园,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼酸舍,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了里初?” 一聲冷哼從身側(cè)響起啃勉,我...
    開(kāi)封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎双妨,沒(méi)想到半個(gè)月后淮阐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡刁品,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年泣特,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挑随。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡状您,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出兜挨,到底是詐尸還是另有隱情膏孟,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布拌汇,位于F島的核電站柒桑,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏噪舀。R本人自食惡果不足惜魁淳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望与倡。 院中可真熱鬧先改,春花似錦、人聲如沸蒸走。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)比驻。三九已至该溯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間别惦,已是汗流浹背狈茉。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留掸掸,地道東北人氯庆。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓蹭秋,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親堤撵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子仁讨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354