【第1139期】基於Gitlab CI搭建持續整合環境
前言
本文是在12月12號迅雷@趙兵在前端早讀課第三期Live中提到的關於CI構建的,可能這部分在不同公司由不同的崗位負責,剛好如果你沒遇到你可以看看。
@趙兵,來自迅雷前端團隊。是一個熱愛前端技術,喜歡造輪子,愛折騰的人,也是一個奉行“懶惰使人進步”的懶人工程師。
正文從這開始~
本文簡單介紹了持續整合的概念並著重介紹瞭如何基於 Gitlab CI 快速構建持續整合環境,主要介紹了 Gitlab CI 的基本功能和入門操作流程。
本文提到的Gitlab版本為8.x,新版的Gitlab介面可能會有所不同。
什麼是持續整合?
持續整合(Continuous Integration,簡稱CI)指的是,頻繁地(一天多次)將程式碼整合到主幹。
持續整合的好處主要有兩個:
快速發現錯誤
每完成一點更新,就整合到主幹,可以快速發現錯誤,定位錯誤也比較容易
防止分支大幅偏離主幹
如果不是經常整合,主幹又在不斷更新,會導致以後整合的難度變大,甚至難以整合。
持續整合的目的,就是讓產品可以快速迭代,同時還能保持高質量。它的核心措施是,程式碼整合到主幹之前,必須通過自動化測試。只要有一個測試用例失敗,就不能整合。
持續交付、持續部署的概念
持續交付(Continuous delivery)指的是,頻繁地將軟體的新版本,交付給質量團隊或者使用者,以供評審。如果評審通過,程式碼就進入生產階段。
持續部署(continuous deployment)是持續交付的下一步,指的是程式碼通過評審以後,自動部署到生產環境。
持續整合的原則
業界普遍認同的持續整合的原則包括:
需要版本控制軟體保障團隊成員提交的程式碼不會導致整合失敗。常用的版本控制軟體有 git、svn 等;
開發人員必須及時向版本控制庫中提交程式碼,也必須經常性地從版本控制庫中更新程式碼到本地;
需要有專門的整合伺服器來執行整合構建。根據專案的具體實際,整合構建可以被軟體的修改來直接觸發,也可以定時啟動,如每半個小時構建一次;
必須保證構建的成功。如果構建失敗,修復構建過程中的錯誤是優先順序最高的工作。一旦修復,需要手動啟動一次構建。
持續整合系統的組成
由此可見,一個完整的構建系統必須包括:
一個自動構建過程,包括自動編譯、分發、部署和測試等。
一個程式碼儲存庫,即需要版本控制軟體來保障程式碼的可維護性,同時作為構建過程的素材庫。
一個持續整合伺服器。
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 功能
在自己的Gitlab中開啟CI介面,比如迅雷的Gitlab,地址是https://gitlab.xunlei.cn/ci/projects,找到自己專案後選擇 “Add project To CI”
專案 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 的區分
指定 Runner: 可以指定執行某一個Gitlab CI 的專案
共享 Runner:可以執行所有的 CI 專案
Gitlab Runner 和 Gitlab 不能安裝在同一個機器
註冊一個指定的runner
註冊共享的Runner 需要 gitlab 的 admin 許可權
sudo gitlab-ci-multi-runner register
輸入Gitlab CI地址, (e.g.https://gitlab.xunlei.cn/ci)
輸入專案CI token
輸入 Runner 描述(e.g. home.xl9.xunlei.com 測試runner)
輸入 Runner 標籤,可以多個,用逗號隔開(e.g. 10.10.34.91-dev)
輸入 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 提供了視覺化的構建過程的顯示可以隨時檢視。
啟用構建郵件通知
Gitlab CI提高了一些 Service, 比如郵件通知,可以配置一系列接受郵件的地址和是否只有失敗的時候才傳送郵件。
徽章
徽章,當Pipelines執行完成,會生成徽章,你可以將這些徽章加入到你的README.md檔案或者你的網站。
結語
本文簡單介紹了持續整合的概念並著重介紹瞭如何基於 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