1. 程式人生 > >【第1139期】基於Gitlab CI搭建持續整合環境

【第1139期】基於Gitlab CI搭建持續整合環境

前言

本文是在12月12號迅雷@趙兵在前端早讀課第三期Live中提到的關於CI構建的,可能這部分在不同公司由不同的崗位負責,剛好如果你沒遇到你可以看看。

@趙兵,來自迅雷前端團隊。是一個熱愛前端技術,喜歡造輪子,愛折騰的人,也是一個奉行“懶惰使人進步”的懶人工程師。

正文從這開始~

本文簡單介紹了持續整合的概念並著重介紹瞭如何基於 Gitlab CI 快速構建持續整合環境,主要介紹了 Gitlab CI 的基本功能入門操作流程。

本文提到的Gitlab版本為8.x,新版的Gitlab介面可能會有所不同。

什麼是持續整合?

640?wx_fmt=png&wxfrom=5&wx_lazy=1

持續整合(Continuous Integration,簡稱CI)指的是,頻繁地(一天多次)將程式碼整合到主幹。

持續整合的好處主要有兩個:

快速發現錯誤

每完成一點更新,就整合到主幹,可以快速發現錯誤,定位錯誤也比較容易

防止分支大幅偏離主幹

如果不是經常整合,主幹又在不斷更新,會導致以後整合的難度變大,甚至難以整合。

持續整合的目的,就是讓產品可以快速迭代,同時還能保持高質量。它的核心措施是,程式碼整合到主幹之前,必須通過自動化測試。只要有一個測試用例失敗,就不能整合。

持續交付、持續部署的概念

持續交付(Continuous delivery)指的是,頻繁地將軟體的新版本,交付給質量團隊或者使用者,以供評審。如果評審通過,程式碼就進入生產階段。

持續部署(continuous deployment)是持續交付的下一步,指的是程式碼通過評審以後,自動部署到生產環境。

0?wx_fmt=png
持續交付、持續部署的概念

持續整合的原則

業界普遍認同的持續整合的原則包括:

  • 需要版本控制軟體保障團隊成員提交的程式碼不會導致整合失敗。常用的版本控制軟體有 git、svn 等;

  • 開發人員必須及時向版本控制庫中提交程式碼,也必須經常性地從版本控制庫中更新程式碼到本地;

  • 需要有專門的整合伺服器來執行整合構建。根據專案的具體實際,整合構建可以被軟體的修改來直接觸發,也可以定時啟動,如每半個小時構建一次;

  • 必須保證構建的成功。如果構建失敗,修復構建過程中的錯誤是優先順序最高的工作。一旦修復,需要手動啟動一次構建。

持續整合系統的組成

由此可見,一個完整的構建系統必須包括:

  • 一個自動構建過程,包括自動編譯、分發、部署和測試等。

  • 一個程式碼儲存庫,即需要版本控制軟體來保障程式碼的可維護性,同時作為構建過程的素材庫。

  • 一個持續整合伺服器。

GitLab CI介紹

0?wx_fmt=png
GitLab CI流程圖

GitLab CI是 GitLab 提供的持續整合服務,只要在你的倉庫根目錄 建立一個.gitlab-ci.yml 檔案, 併為該專案指派一個Runner,當有合併請求或者 push的時候就會觸發build。

這個.gitlab-ci.yml 檔案定義GitLab runner要做哪些操作。 預設有3個[stages(階段)]: build、test、deploy。

當build完成後(返回非零值),你會看到push的 commit或者合併請求前面出現一個綠色的對號。 這個功能很方便的讓你檢查出來合併請求是否會導致build失敗, 免的你去檢查程式碼。

大部分專案用GitLab’s CI服務跑build測試, 開發者會很快得到反饋,知道自己是否寫出了BUG。

所以簡單的說,要讓CI工作可總結為以下幾點:

  • 在倉庫根目錄建立一個名為.gitlab-ci.yml 的檔案

  • 為該專案配置一個Runner

完成上面的步驟後,每次push程式碼到Git倉庫, Runner就會自動開始pipeline。

基於Gitlab CI快速搭建持續整合環境

開啟 Gitlab CI 功能

0?wx_fmt=png
開啟 Gitlab CI 功能

在自己的Gitlab中開啟CI介面,比如迅雷的Gitlab,地址是https://gitlab.xunlei.cn/ci/projects,找到自己專案後選擇 “Add project To CI”

專案 Gitlab CI 配置

0?wx_fmt=png
專案 Gitlab CI 配置

可以對專案的構建進行詳細配置,比如構建的時間表及需要 CI 進行持續整合的分支等,這裡配置了 對master和develop分支進行持續整合。

配置一個 Runner

GitLab CI 中,runner 是一個隔離的虛擬機器器,用來配合 Gitlab CI 進行構建。

安裝 GitLab-Runner

安裝gitlab-ci-multi-runner

環境:centos 7, 使用了清華大學的映象

新建 gitlab-ci-multi-runner.repo

touch /etc/yum.repos.d/gitlab-ci-multi-runner.repo

將以下內容寫入檔案

[gitlab-ci-multi-runner]
name
=gitlab-ci-multi-runner
baseurl
=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ci-multi-runner/yum/el7
repo_gpgcheck
=0
gpgcheck
=0
enabled
=1
gpgkey
=https://packages.gitlab.com/gpg.key

執行

sudo yum makecache
sudo yum install gitlab
-ci-multi-runner
其他系統安裝

https://docs.gitlab.com/runner/install/

Gitlab CI Multi Runner 國內映象

https://mirrors.tuna.tsinghua.edu.cn/help/gitlab-ci-multi-runner/

Runner 的區分

0?wx_fmt=png
Runner 的區分
  • 指定 Runner: 可以指定執行某一個Gitlab CI 的專案

  • 共享 Runner:可以執行所有的 CI 專案

Gitlab Runner 和 Gitlab 不能安裝在同一個機器

註冊一個指定的runner

註冊共享的Runner 需要 gitlab 的 admin 許可權

sudo gitlab-ci-multi-runner register
  1. 輸入Gitlab CI地址, (e.g.https://gitlab.xunlei.cn/ci)

  2. 輸入專案CI token

  3. 輸入 Runner 描述(e.g. home.xl9.xunlei.com 測試runner)

  4. 輸入 Runner 標籤,可以多個,用逗號隔開(e.g. 10.10.34.91-dev)

  5. 輸入 Runner 執行的語言 (e.g. shell)

註冊完成之後,GitLab-CI立刻就會多出一條Runner記錄

啟動 runner

這裡把批量執行Runner這個功能安裝為一項服務

# Install runner as service and start it:cd ~
gitlab
-ci-multi-runner install
gitlab
-ci-multi-runner start

建立.gitlab-ci.yml

.gitlab-ci.yml檔案是什麼

.gitlab-ci.yml用來配置 CI 用你的專案中做哪些操作,這個檔案位於倉庫的根目錄。

當有新內容push到倉庫後,GitLab會查詢是否有.gitlab-ci.yml檔案,如果檔案存在, Runners 將會根據該檔案的內容開始build 本次commit。

.gitlab-ci.yml使用YAML語法, 你需要格外注意縮排格式,要用空格來縮排,不能用tabs來縮排。

建立.gitlab-ci.yml

stages:- test
 
- deploy
# 變數variables:  DEV_RSYNC_PATH:"/data/deploy/xunlei.com/misc.xl9.xunlei.com/d/"# 所有 stage 之前的操作before_script:  - npm set registry http://xnpm.sz.xunlei.cn- npm install
# 程式碼檢查lint:  stage: test
 script
: npm run lint
# 單元測試unit:  stage: test
 script
: npm run unit
# 部署測試伺服器deploy_dev:  stage: deploy
 tags
:-10.10.34.91-dev
 only
:- develop
 script
:- rsync -av --delete-after --exclude-from=/data/shell/home.xl9.xunlei_exclude.list . $DEV_RSYNC_PATH
   
- chmod -R 755 $DEV_RSYNC_PATH
   
- chown -R nobody:nobody $DEV_RSYNC_PATH
   
- find $DEV_RSYNC_PATH -type f -exec chmod 644{} \;
   
- cd $DEV_RSYNC_PATH
   
- npm install

推送構建配置檔案

配置好.gitlab-ci.yml檔案之後,只要把它加入git後然後推送到遠端倉庫,CI就會開始自動化整合

檢視視覺化的構建過程

Gitlab CI 提供了視覺化的構建過程的顯示可以隨時檢視。

0?wx_fmt=png
檢視視覺化的構建過程

啟用構建郵件通知

Gitlab CI提高了一些 Service, 比如郵件通知,可以配置一系列接受郵件的地址和是否只有失敗的時候才傳送郵件。

0?wx_fmt=png
啟用構建郵件通知
0?wx_fmt=png
郵件內容

徽章

徽章,當Pipelines執行完成,會生成徽章,你可以將這些徽章加入到你的README.md檔案或者你的網站。

0?wx_fmt=png
build status

結語

本文簡單介紹了持續整合的概念並著重介紹瞭如何基於 Gitlab CI 快速構建持續整合環境,主要介紹了 Gitlab CI 的基本功能和入門操作流程。

希望在進一步的學習和應用中與大家分享 Gitlab CI 的其它高階的應用。

延伸閱讀

  • https://doc.gitlab.cc/ce/ci/quick_start/README.html

  • http://www.jianshu.com/p/2b43151fb92e

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

最後為你推薦

關於本文
作者:@趙兵
原文:http://www.jianshu.com/p/705428ca1410

0?wx_fmt=jpeg