gitlab runner實(shí)現(xiàn)自動(dòng)化部署

前言

GitLab Runner是一個(gè)開源的項(xiàng)目,是用來執(zhí)行GitLab中的項(xiàng)目的根目錄下創(chuàng)建的.gitlab-ci.yml 腳本的工具徒恋。GitLab-CI可以比喻成管理工人的工廠讼油,Runner是工廠里的工人占调,每個(gè)工人需要在工廠進(jìn)行注冊(cè)邦泄,所負(fù)責(zé)的項(xiàng)目不同会涎,所做的工作也不同种樱。當(dāng)工廠某一個(gè)項(xiàng)目發(fā)生變動(dòng)時(shí)萧求,需要通知對(duì)應(yīng)的工人去做對(duì)應(yīng)的工作托享。

具體部署流程圖

deploy.png

GitLab Runner簡介

1. Runner類型

  • Shared Runner:所有工程都能夠用的骚烧,且只有系統(tǒng)管理員能夠創(chuàng)建
  • Specific Runner:只有特定的項(xiàng)目可以使用。

2. GitLab Runner中相關(guān)概念介紹

  • 管道(pipeline)
    每個(gè)推送到 Gitlab 的提交都會(huì)產(chǎn)生一個(gè)與該提交關(guān)聯(lián)的管道(pipeline)闰围,若一次推送包含了多個(gè)提交赃绊,則管道與最后那個(gè)提交相關(guān)聯(lián),管道(pipeline)就是一個(gè)分成不同階段(stage)的作業(yè)(job)的集合羡榴。

  • 階段(Stage)
    階段是對(duì)批量的作業(yè)的一個(gè)邏輯上的劃分碧查,每個(gè) GitLab CI/CD 都必須包含至少一個(gè) Stage。多個(gè) Stage 是按照順序執(zhí)行的校仑,如果其中任何一個(gè) Stage 失敗忠售,則后續(xù)的 Stage 不會(huì)被執(zhí)行者冤,整個(gè) CI 過程被認(rèn)為失敗


    image.png

    以圖中所示為例,整個(gè) CI 環(huán)節(jié)包含三個(gè) Stage:build档痪、test 和deploy涉枫。

  • build 被首先執(zhí)行。如果發(fā)生錯(cuò)誤腐螟,本次 CI 立刻失斣柑;

  • test 在 build 成功執(zhí)行完畢后執(zhí)行乐纸。如果發(fā)生錯(cuò)誤衬廷,本次 CI 立刻失敗汽绢;

  • deploy 在 test 成功執(zhí)行完畢后執(zhí)行吗跋。如果發(fā)生錯(cuò)誤,本次 CI 失敗宁昭。

下圖是Gitlab對(duì)階段和階段狀態(tài)的展示:


stage.png

stage-status.png
  • 作業(yè)(Job)
    作業(yè)就是運(yùn)行器(Runner)要執(zhí)行的指令集合跌宛,Job 可以被關(guān)聯(lián)到一個(gè) Stage。當(dāng)一個(gè) Stage 執(zhí)行的時(shí)候积仗,與其關(guān)聯(lián)的所有 Job 都會(huì)被執(zhí)行疆拘。在有足夠運(yùn)行器的前提下,同一階段的所有作業(yè)會(huì)并發(fā)執(zhí)行。作業(yè)狀態(tài)與階段狀態(tài)是一樣的寂曹,實(shí)際上哎迄,階段的狀態(tài)就是繼承自作業(yè)的。
    關(guān)于job中詳細(xì)的參數(shù)介紹隆圆,請(qǐng)移步https://docs.gitlab.com/runner/

準(zhǔn)備工作

  1. 準(zhǔn)備gitlab 測(cè)試服務(wù)器漱挚,用于gitlab上的代碼存儲(chǔ)、CI等的配置
  2. 準(zhǔn)備一臺(tái)部署服務(wù)器渺氧,用于安裝gitlab-ruuner并部署代碼

開始Go!

1. 準(zhǔn)備gitlab服務(wù)器旨涝,并創(chuàng)建一個(gè)項(xiàng)目

gitlab.png

2. 準(zhǔn)備一臺(tái)部署服務(wù)器,用于安裝gitlab-ruuner并部署代碼

1. 在部署服務(wù)器上安裝gitlab-runner

# 安裝gitlab-runner
yum install gitlab-runner

2. 向GitLab-CI注冊(cè)gitlab-runner

  • 找到你的gitlab上存放的項(xiàng)目阶女,找到settings-->CI/CD-->Runner


    runner-setting.png

    runner-setting2.png
  • 部署服務(wù)器上進(jìn)行runner注冊(cè)
gitlab-runner register
runner-register.png
  1. url:gitlab所在的測(cè)試服務(wù)器地址
  2. token:項(xiàng)目的token颊糜,用于關(guān)聯(lián)runner和項(xiàng)目
  3. name:runner的名字,用于區(qū)分runner
  4. tags:用于匹配任務(wù)(jobs)和執(zhí)行任務(wù)的設(shè)備(runners)秃踩,此處不填直接回車時(shí)衬鱼,默認(rèn)Can run untagged jobs值為true
  5. executor:執(zhí)行環(huán)境
  • 注冊(cè)成功之后,我們就可以在gitlab的CI配置中看到剛才注冊(cè)的runner了


    runner.png
  • 點(diǎn)開注冊(cè)好的runner,可以看到具體配置內(nèi)容
    runner-confige.png

    注意:如果你設(shè)置了Can run untagged jobs為No,那你需要在你gitlab-ci.yml文件中指定你要使用runner的tag,才能運(yùn)行對(duì)應(yīng)的runner憔杨,否則你任務(wù)可能一直在pending狀態(tài)鸟赫,找不到runner執(zhí)行。

3. 啟動(dòng)gitlab-runner

  • 前臺(tái)啟動(dòng)
gitlab-runner run
  • 后臺(tái)啟動(dòng)(gitlab-runner service)
gitlab-runner install
gitlab-runner start

4. 配置ssh免登錄,用于將gitlab-runner服務(wù)器上獲取到的文件拷貝到服務(wù)器

  1. 首先登陸服務(wù)器抛蚤,進(jìn)入gitlab-runner用戶下生成一對(duì)公鑰台谢,私鑰對(duì)。生成過程需要兩次輸密碼岁经,直接回車即可朋沮。
ssh-keygen -t rsa -C  'your email@domain.com'
  1. 密鑰默認(rèn)保存位置在 ~/.ssh 目錄下,打開后會(huì)看到私鑰文件 id_rsa 和公鑰文件 id_rsa.pub


    ssh.png
  2. 復(fù)制公鑰到你的部署服務(wù)器上
scp ~/.ssh/id_rsa.pub <用戶名>@<Linux的ip地址>:/root/.ssh/id_rsa.pub
  1. 把公鑰追加到服務(wù)器ssh認(rèn)證文件中
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys

5.此后缀壤,從本地上傳文件到服務(wù)器就不需要輸用戶名樊拓,密碼了。
5. 在gitlab中配置變量塘慕,用于.gitlab-ci.yml文件

yum.png

  • 項(xiàng)目的根目錄下編寫.gitlab-ci.yml文件
##緩存 node_modules/目錄 下次構(gòu)建不會(huì)刪除
cache:
  paths:
  - node_modules/
stages: # Stages 表示構(gòu)建階段筋夏,這里有兩個(gè)階段 install, deploy
  - build
  - deploy

fetch: # Jobs 表示構(gòu)建工作,表示某個(gè) Stage 里面執(zhí)行的工作图呢。
  stage: build
  script:
    - echo "=====start build======"
    - npm i 
    - npm run build
    - echo "=====end build======"
  only:
    - master
  artifacts: 
    expire_in: 2 week
    paths: 
      - dist/
    
deploy-static:
  stage: deploy
  script:
    - echo "=====start deploy======"
    - scp -r ./dist root@$DEPLOY_SERVER_DEV:$WEB_DIR
    - echo "=====end deploy======"

6. 把.gitlab-ci.yml文件推送到gitlab倉儲(chǔ)条篷,觸發(fā)流水線

pipeline.png

  • 點(diǎn)擊每次構(gòu)建狀態(tài),可以查看構(gòu)建詳情蛤织,如果有錯(cuò)誤的話可以點(diǎn)開構(gòu)建階段赴叹,查看錯(cuò)誤詳情。


    deploy-error.png

deploy-pass.png

7. 到此瞳筏,我們已經(jīng)完成了一套完整對(duì)自動(dòng)化部署稚瘾,之后只有g(shù)itlab倉庫有代碼更新,就可以觸發(fā)流水線了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末姚炕,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子丢烘,更是在濱河造成了極大的恐慌柱宦,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件播瞳,死亡現(xiàn)場(chǎng)離奇詭異掸刊,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)赢乓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門忧侧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人牌芋,你說我怎么就攤上這事蚓炬。” “怎么了躺屁?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵肯夏,是天一觀的道長。 經(jīng)常有香客問我,道長驯击,這世上最難降的妖魔是什么烁兰? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮徊都,結(jié)果婚禮上沪斟,老公的妹妹穿的比我還像新娘。我一直安慰自己暇矫,他們只是感情好主之,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著袱耽,像睡著了一般杀餐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上朱巨,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天史翘,我揣著相機(jī)與錄音,去河邊找鬼冀续。 笑死琼讽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的洪唐。 我是一名探鬼主播钻蹬,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼凭需!你這毒婦竟也來了问欠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤粒蜈,失蹤者是張志新(化名)和其女友劉穎顺献,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體枯怖,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡注整,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了度硝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肿轨。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蕊程,靈堂內(nèi)的尸體忽然破棺而出椒袍,到底是詐尸還是另有隱情,我是刑警寧澤存捺,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布槐沼,位于F島的核電站曙蒸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏岗钩。R本人自食惡果不足惜纽窟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望兼吓。 院中可真熱鬧臂港,春花似錦、人聲如沸视搏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽浑娜。三九已至佑力,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間筋遭,已是汗流浹背打颤。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留漓滔,地道東北人编饺。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像响驴,于是被迫代替她去往敵國和親透且。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355