gitlab runner實現(xiàn)自動化部署

前言

GitLab Runner是一個開源的項目,是用來執(zhí)行GitLab中的項目的根目錄下創(chuàng)建的.gitlab-ci.yml 腳本的工具。GitLab-CI可以比喻成管理工人的工廠,Runner是工廠里的工人,每個工人需要在工廠進行注冊,所負責的項目不同,所做的工作也不同。當工廠某一個項目發(fā)生變動時,需要通知對應的工人去做對應的工作。

具體部署流程圖

deploy.png

GitLab Runner簡介

1. Runner類型

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

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

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

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


    image.png

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

  • build 被首先執(zhí)行。如果發(fā)生錯誤,本次 CI 立刻失??;

  • test 在 build 成功執(zhí)行完畢后執(zhí)行。如果發(fā)生錯誤,本次 CI 立刻失??;

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

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


stage.png

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

準備工作

  1. 準備gitlab 測試服務器,用于gitlab上的代碼存儲、CI等的配置
  2. 準備一臺部署服務器,用于安裝gitlab-ruuner并部署代碼

開始Go!

1. 準備gitlab服務器,并創(chuàng)建一個項目

gitlab.png

2. 準備一臺部署服務器,用于安裝gitlab-ruuner并部署代碼

1. 在部署服務器上安裝gitlab-runner

# 安裝gitlab-runner
yum install gitlab-runner

2. 向GitLab-CI注冊gitlab-runner

  • 找到你的gitlab上存放的項目,找到settings-->CI/CD-->Runner


    runner-setting.png

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


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

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

3. 啟動gitlab-runner

  • 前臺啟動
gitlab-runner run
  • 后臺啟動(gitlab-runner service)
gitlab-runner install
gitlab-runner start

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

  1. 首先登陸服務器,進入gitlab-runner用戶下生成一對公鑰,私鑰對。生成過程需要兩次輸密碼,直接回車即可。
ssh-keygen -t rsa -C  'your email@domain.com'
  1. 密鑰默認保存位置在 ~/.ssh 目錄下,打開后會看到私鑰文件 id_rsa 和公鑰文件 id_rsa.pub


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

5.此后,從本地上傳文件到服務器就不需要輸用戶名,密碼了。
5. 在gitlab中配置變量,用于.gitlab-ci.yml文件

yum.png

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

fetch: # Jobs 表示構(gòu)建工作,表示某個 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倉儲,觸發(fā)流水線

pipeline.png

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


    deploy-error.png

deploy-pass.png

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容