gitlab CI 持續(xù)集成

1 持續(xù)集成

gitlab-ci全稱是gitlab continuous integration的意思易茬,也就是持續(xù)集成,中心思想是當每一次push到gitlab的時候或者每隔一定時間,都會觸發(fā)一次腳本(.gitlab-ci.yml)執(zhí)行抽莱,然后腳本的內(nèi)容包括了測試范抓,編譯,部署等一系列自定義的內(nèi)容食铐。

2 GitLab CI相關(guān)概念
  1. pipeline
    :相當于一次構(gòu)建任務(wù)(執(zhí)行腳本)匕垫,面可以包含多個流程,如安裝依賴虐呻、運行測試象泵、編譯、部署測試服務(wù)器斟叼、部署生產(chǎn)服務(wù)器等流程单芜。
+------------------+           +----------------+
|                  |  trigger  |                |
|   Commit / MR    +---------->+    Pipeline    |
|                  |           |                |
+------------------+           +----------------+
  1. Stages:表示構(gòu)建階段,一次任務(wù)里有多個階段犁柜,這些階段有一下特點:
  • 所有 Stages 會按照順序運行洲鸠,即當一個 Stage 完成后,下一個 Stage 才會開始馋缅。
  • 只有當所有 Stages 完成后扒腕,該構(gòu)建任務(wù) (Pipeline) 才會成功。
  • 如果任何一個 Stage 失敗萤悴,那么后面的 Stages 不會執(zhí)行瘾腰,該構(gòu)建任務(wù) (Pipeline) 失敗。

Stages 和 Pipeline 的關(guān)系就是:

+--------------------------------------------------------+
|                                                        |
|  Pipeline                                              |
|                                                        |
|  +-----------+     +------------+      +------------+  |
|  |  Stage 1  |---->|   Stage 2  |----->|   Stage 3  |  |
|  +-----------+     +------------+      +------------+  |
|                                                        |
+--------------------------------------------------------+
  1. Jobs 表示構(gòu)建工作覆履,表示某個 Stage 里面執(zhí)行的工作蹋盆。我們可以在 Stages 里面定義多個 Jobs,這些 Jobs 會有以下特點:
  • 相同 Stage 中的 Jobs 會并行執(zhí)行
  • 相同 Stage 中的 Jobs 都執(zhí)行成功時硝全,該 Stage 才會成功
  • 如果任何一個 Job 失敗栖雾,那么該 Stage 失敗,即該構(gòu)建任務(wù) (Pipeline) 失敗

Jobs 和 Stage 的關(guān)系圖就是:

+------------------------------------------+
|                                          |
|  Stage 1                                 |
|                                          |
|  +---------+  +---------+  +---------+   |
|  |  Job 1  |  |  Job 2  |  |  Job 3  |   |
|  +---------+  +---------+  +---------+   |
|                                          |
+------------------------------------------+
3 編寫.gitlab-ci.yml 文件

實用例子:

######################## 定義以下五個階段 ###########################
stages:
  - install_deps
  - test
  - build
  - deploy_test
  - deploy_production

#加載緩存
cache:
  key: ${CI_BUILD_REF_NAME}
  paths:
    - node_modules/
    - dist/
    
######################## job ###########################
# 安裝依賴
install_deps:
  stage: install_deps
  only:
    - develop
    - master
  script:
    - npm install

######################## job ###########################
# 運行測試用例
test:
  stage: test
  only:
    - develop
    - master
  script:
    - npm run test

######################## job ###########################
# 編譯
build:
  stage: build
  only:
    - develop
    - master
  script:
    - npm run clean
    - npm run build:client
    - npm run build:server

######################## job ###########################
# 部署測試服務(wù)器
deploy_test:
  stage: deploy_test
  only:
    - develop
  script:
    - pm2 delete app || true
    - pm2 start app.js --name app

######################## job ###########################
# 部署生產(chǎn)服務(wù)器
deploy_production:
  stage: deploy_production
  only:
    - master
  script:
    - bash scripts/deploy/deploy.sh

每一個job內(nèi)常用的幾個關(guān)鍵字

關(guān)鍵字 是否必須 描述
script Y 定義一些由Runner執(zhí)行腳本命令
stage N 定義job的階段
before_script N 定義job運行前都會執(zhí)行的命令
after_script N 定義任何 Jobs 運行完后都會執(zhí)行的命令伟众。
variables N 定義一些變量
cache N 定義需要緩存的文件
only N 定義要構(gòu)建工作的分支
except N 定義要不需要構(gòu)建工作的分支
when N 定義如何運行下一個階段析藕,參數(shù)有:on_success、 on_failure凳厢、always 账胧、 manual(手動)

參考:

http://scarletsky.github.io/2016/07/29/use-gitlab-ci-for-continuous-integration/

https://docs.gitlab.com/ce/ci/yaml/README.html#cache

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市先紫,隨后出現(xiàn)的幾起案子治泥,更是在濱河造成了極大的恐慌,老刑警劉巖遮精,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件居夹,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機吮播,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門变屁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人意狠,你說我怎么就攤上這事粟关。” “怎么了环戈?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵闷板,是天一觀的道長。 經(jīng)常有香客問我院塞,道長遮晚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任拦止,我火速辦了婚禮县遣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘汹族。我一直安慰自己萧求,他們只是感情好,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布顶瞒。 她就那樣靜靜地躺著夸政,像睡著了一般。 火紅的嫁衣襯著肌膚如雪榴徐。 梳的紋絲不亂的頭發(fā)上守问,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天,我揣著相機與錄音坑资,去河邊找鬼耗帕。 笑死,一個胖子當著我的面吹牛盐茎,可吹牛的內(nèi)容都是我干的兴垦。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼字柠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了狡赐?” 一聲冷哼從身側(cè)響起窑业,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎枕屉,沒想到半個月后常柄,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年西潘,在試婚紗的時候發(fā)現(xiàn)自己被綠了卷玉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡喷市,死狀恐怖相种,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情品姓,我是刑警寧澤寝并,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站腹备,受9級特大地震影響衬潦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜植酥,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一镀岛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧友驮,春花似錦漂羊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至艾猜,卻和暖如春买喧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背匆赃。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工淤毛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人算柳。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓低淡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親瞬项。 傳聞我的和親對象是個殘疾皇子蔗蹋,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361

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

  • GitLab CI是一套持續(xù)集成開發(fā)方案。 什么是持續(xù)集成 在多人協(xié)作開發(fā)中囱淋,如果一個人修改了代碼并提交猪杭,可能會對...
    張柳哥閱讀 773評論 0 0
  • 本文以Gitlab來講解Git使用以及持續(xù)集成, 持續(xù)集成采用的是Gitlab CI. 其他代碼托管網(wǎng)站,如Git...
    x1596357閱讀 5,417評論 0 6
  • 現(xiàn)狀 選用gitlab ci作為持續(xù)集成工具 通過分支管理不同階段版本,dev, alpha, beta, rel...
    人生如夢Jerry閱讀 1,907評論 0 0
  • git Git是一個開源的分布式版本控制系統(tǒng)妥衣,可以有效皂吮、高速的處理從很小到非常大的項目版本管理戒傻。Git 是 Lin...
    劉曉洋閱讀 1,691評論 0 7
  • 人生或許本該多災(zāi)多難,這樣才有意義蜂筹。這些年跌跌撞撞終于走到這里需纳,擁有過許多也失去了許多,有些失去可以再擁有艺挪,只是心...
    長發(fā)哥哥閱讀 201評論 0 0