使用GitLabCI持續(xù)集成

使用持續(xù)集成應(yīng)該是一個(gè)軟件開發(fā)工程師的自覺煮甥。 ——沃茲基.索德

前言

在實(shí)際工作中可缚,為了防止當(dāng)前分支大幅度偏離主干一铅,開發(fā)人員每天都會(huì)頻繁地將代碼集成到主干。如果不使用持續(xù)集成典予,人工重復(fù)進(jìn)行編譯部署等工作甜滨,無(wú)疑是低效且易出錯(cuò)的。所以持續(xù)集成的優(yōu)點(diǎn)顯而易見:

  1. 減少人工編譯部署過程中的低級(jí)錯(cuò)誤
  2. 縮短開發(fā)周期瘤袖,快速進(jìn)行版本迭代
  3. 隨時(shí)可部署
  4. 讓開發(fā)人員專心coding(高效)

目錄

  • 為什么要用GitLab CI/CD
  • 一點(diǎn)理論
  • 一點(diǎn)實(shí)踐
  • 一點(diǎn)問題

為什么要用GitLab CI/CD

GitLab8.0之后衣摩,GitLab CI就已經(jīng)集成在GitLab里了。使用GitLab CI可以說(shuō)是非常的簡(jiǎn)單方便捂敌,先看下預(yù)覽圖

GitLab CI 預(yù)覽圖.png

作者之前也嘗試了Jenkins艾扮。Jenkins作為老牌的持續(xù)集成框架,在這么多年的發(fā)展中占婉,積累很多優(yōu)秀的插件工具泡嘴,不可否認(rèn)它具有很多GitLab CI不具備的功能,但是Jenkins的使用復(fù)雜度跟GitLab CI 相比還是高了不止一點(diǎn)(不信往下看)逆济。而且我覺得Jenkins的頁(yè)面設(shè)計(jì)太out酌予。如果你跟我一樣是個(gè)初學(xué)者磺箕,還是建議你從GitLab CI開始嘗試。

Jenkins 主界面(來(lái)自網(wǎng)絡(luò)).jpg

一點(diǎn)理論

在實(shí)踐之前我們先介紹一些GitLab CI的相關(guān)概念抛虫。

pipeline

每次代碼提交就會(huì)觸發(fā)一次pipeline松靡。一次pipeline可以看成一次構(gòu)建任務(wù)。構(gòu)建任務(wù)一般會(huì)包含:安裝依賴建椰,測(cè)試雕欺,編譯,部署服務(wù)等多個(gè)階段棉姐。

stage

stage就是上述構(gòu)建任務(wù)中的各個(gè)構(gòu)建階段屠列。一個(gè)pipeline可以定義多個(gè)stage。stage有以下特點(diǎn):

1.所有的stage按順序運(yùn)行伞矩,前一個(gè)stage完成后笛洛,下一個(gè)stage才會(huì)開始執(zhí)行。

2.只有當(dāng)所有的stage都完成后扭吁,該構(gòu)建任務(wù)(pipeline)才會(huì)成功撞蜂。

3.如果一個(gè)stage失敗盲镶,那么下一個(gè)stage不會(huì)執(zhí)行侥袜,該構(gòu)建任務(wù)(pipeline)失敗。

job

job表示構(gòu)建工作溉贿,是每個(gè)stage構(gòu)建階段里具體執(zhí)行的工作枫吧。跟pipeline與stage的關(guān)系類似,stage與job也是一對(duì)多的關(guān)系宇色,即一個(gè)stage里可以定義多個(gè)job九杂,而job具有以下特點(diǎn):

1.同一個(gè) stage 中的 jobs 會(huì)并行執(zhí)行

2.同一個(gè) stage 中的 jobs 都執(zhí)行成功時(shí),該 stage 才會(huì)成功

3.如果任何一個(gè) job 失敗宣蠕,那么該 stage 失敗例隆,即該構(gòu)建任務(wù) (pipeline) 失敗

GitLab runner

在了解了上面幾個(gè)主要概念之后,我們對(duì)GitLab CI的工作流程應(yīng)該大致已經(jīng)清晰了抢蚀,即下圖:

流程圖.png

但是還有一個(gè)疑問就是:誰(shuí)去統(tǒng)籌做上面一系列的事情呢镀层?就是GitLab runner。

工作流程

綜合上述理論皿曲,要使用GitLab CI唱逢,我們首先要在項(xiàng)目的根目錄下添加一個(gè) .gitlab-ci.yml 文件,用來(lái)定義我們的stages屋休,jobs等一系列具體內(nèi)容坞古,好讓GitLab runner據(jù)此來(lái)完成它的工作。然后需要在服務(wù)器(開發(fā)或生產(chǎn)環(huán)境)上劫樟,配置一個(gè)GitLab runner痪枫,好讓GitLab runner去統(tǒng)籌持續(xù)集中過程中的所有事织堂。

一點(diǎn)實(shí)踐

作者在自己的GitLab上初始化了一個(gè)express項(xiàng)目作為例子,帶大家來(lái)實(shí)踐一下奶陈。

配置 .gitlab-ci.yml 文件

Configuration of your jobs with .gitlab-ci.yml 這是官方文檔捧挺。

我簡(jiǎn)單配置下demo項(xiàng)目的.gitlab-ci.yml文件:

屏幕快照 2017-12-17 下午3.24.58.png

作如下解釋:
GitLab runner 會(huì)根據(jù)這個(gè)文件內(nèi)容進(jìn)行構(gòu)建,不難看出整個(gè)構(gòu)建工作分為兩個(gè)stage(階段)尿瞭,第一階段install_deps:安裝依賴包闽烙,而具體的job內(nèi)容就是執(zhí)行:npm install。 第二階段:?jiǎn)?dòng)程序声搁。每次代碼提交黑竞,都會(huì)觸發(fā)這兩個(gè)構(gòu)建工作。添加緩存cache是因?yàn)槊總€(gè)job執(zhí)行成功后疏旨,runner都會(huì)去刪除.gitignore中的文件很魂。

安裝GitLab runner

GitLab runner的安裝很簡(jiǎn)單。installing-the-runner 官方文檔

作者以Ubuntu為例:

1檐涝、添加GItLa官方庫(kù)

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash

2遏匆、安裝runner

sudo apt-get install gitlab-runner

配置GitLab runner

這里我們配置一個(gè)specific runner。至于shared runner 和 specific runner的區(qū)別谁榜,大家可以通過官方文檔的介紹幅聘,自己去選擇,這里不贅述了窃植。Shared vs specific Runners

1帝蒿、拿到token

在你的項(xiàng)目setting->CI/CD->Runners settings下面找到url和token。

token.png

2巷怜、進(jìn)行配置

在服務(wù)器上輸入以下命令來(lái)配置一個(gè)runner:

sudo gitlab-runner register

然后根據(jù)提示把信息填完葛超。(作者為了簡(jiǎn)單方便演示。Please enter the executor :選擇的shell延塑。)

查看效果

更改代碼并提交绣张,然后在項(xiàng)目的CI/CD-->pipelines選項(xiàng)里直接可以看到構(gòu)建狀態(tài):如圖

pipelines.png
running.png
start.png

一點(diǎn)問題

在上面的實(shí)踐中我遇到的一些坑:
1、npm命令找不到:
因?yàn)間itLab runner構(gòu)建的時(shí)候是以runner身份操作服務(wù)器的关带,解決方法是:通過link命令把npm鏈接到 /usr/local/bin/npm侥涵。

總結(jié)

如果你的代碼倉(cāng)庫(kù)使用的是GitLab,那么你好像沒有什么理由不使用GitLab CI豫缨。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末独令,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子好芭,更是在濱河造成了極大的恐慌燃箭,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舍败,死亡現(xiàn)場(chǎng)離奇詭異招狸,居然都是意外死亡敬拓,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門裙戏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)乘凸,“玉大人,你說(shuō)我怎么就攤上這事累榜∮冢” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵壹罚,是天一觀的道長(zhǎng)葛作。 經(jīng)常有香客問我,道長(zhǎng)猖凛,這世上最難降的妖魔是什么赂蠢? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮辨泳,結(jié)果婚禮上虱岂,老公的妹妹穿的比我還像新娘。我一直安慰自己菠红,他們只是感情好第岖,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著途乃,像睡著了一般绍傲。 火紅的嫁衣襯著肌膚如雪扔傅。 梳的紋絲不亂的頭發(fā)上耍共,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音猎塞,去河邊找鬼试读。 笑死,一個(gè)胖子當(dāng)著我的面吹牛荠耽,可吹牛的內(nèi)容都是我干的钩骇。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼铝量,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼倘屹!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起慢叨,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤纽匙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后拍谐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烛缔,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡馏段,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了践瓷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片院喜。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖晕翠,靈堂內(nèi)的尸體忽然破棺而出喷舀,到底是詐尸還是另有隱情,我是刑警寧澤淋肾,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布元咙,位于F島的核電站,受9級(jí)特大地震影響巫员,放射性物質(zhì)發(fā)生泄漏庶香。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一简识、第九天 我趴在偏房一處隱蔽的房頂上張望赶掖。 院中可真熱鬧,春花似錦七扰、人聲如沸奢赂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)膳灶。三九已至,卻和暖如春立由,著一層夾襖步出監(jiān)牢的瞬間轧钓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工锐膜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留毕箍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓道盏,卻偏偏與公主長(zhǎng)得像而柑,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子荷逞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容