基於Gitlab CI搭建持續集成環境

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

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

什麼是持續集成?

64173-0f610cc3507dc987.png
image.png

持續集成(Continuous Integration,簡稱CI)指的是,頻繁地(一天多次)將代碼集成到主幹。

持續集成的好處主要有兩個:

快速發現錯誤

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

防止分支大幅偏離主幹

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

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

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

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

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

64173-b5921de034a8db7e.png
持續交付、持續部署的概念

持續集成的原則

業界普遍認同的持續集成的原則包括:

  • 需要版本控制軟件保障團隊成員提交的代碼不會導致集成失敗。常用的版本控制軟件有 git、svn 等;
  • 開發人員必須及時向版本控制庫中提交代碼,也必須經常性地從版本控制庫中更新代碼到本地;
  • 需要有專門的集成服務器來執行集成構建。根據項目的具體實際,集成構建可以被軟件的修改來直接觸發,也可以定時啓動,如每半個小時構建一次;
  • 必須保證構建的成功。如果構建失敗,修復構建過程中的錯誤是優先級最高的工作。一旦修復,需要手動啓動一次構建。

持續集成系統的組成

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

  • 一個自動構建過程,包括自動編譯、分發、部署和測試等。
  • 一個代碼存儲庫,即需要版本控制軟件來保障代碼的可維護性,同時作爲構建過程的素材庫。
  • 一個持續集成服務器。

GitLab CI介紹

64173-444f3b7a2f88eba4.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 功能

64173-eab9ab2727619f29.png
開啓 Gitlab CI 功能

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

項目 Gitlab CI 配置

64173-ab24ef4c57d3b411.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 的區分

64173-f5d54d4508c8bf2a.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 提供了可視化的構建過程的顯示可以隨時查看。

64173-a5e4d7f9a357bfff.png
查看可視化的構建過程

啓用構建郵件通知

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

64173-3340515c0dce48ca.png
啓用構建郵件通知
64173-f83e13188d00ab95.png
郵件內容

徽章

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

64173-056af2b71ff5af9c.png
build status

結語

本文簡單介紹了持續集成的概念並着重介紹瞭如何基於 Gitlab CI 快速構建持續集成環境,主要介紹了 Gitlab CI 的基本功能和入門操作流程。
希望在進一步的學習和應用中與大家分享 Gitlab CI 的其它高級的應用。

延伸閱讀

關於我

來自 迅雷前端 團隊。在迅雷的業務開發之餘,創辦了內部組件倉庫 XNPM ,參與了 @xunlei/vue-lazy-component 等幾個迅雷前端開源項目的開發。個人開源項目有 mrn.js 等。我是一個熱愛前端技術,喜歡造輪子,愛折騰的人,也是一個奉行“懶惰使人進步”的懶人工程師。

64173-911068f632c162cf.png
迅雷前端公衆號
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章