Gitlab-CI持續集成之Runner配置和CI腳本

 

 

 

 

Gitlab-CI持續集成之Runner配置和CI腳本git

1、簡介web

1. 爲實現持續集成,需爲該項目準備如下兩樣東西:docker

1)軟件集成腳本.gitlab-ci.ymlshell

2)一臺Runner服務器數組

固然,考慮到集成環境的配置,還須要docker鏡像做爲載體。bash

2. 基本流程以下: 服務器

1)安裝Runner服務器,註冊和項目對應的Runner Service後續再說Shared Runner),編寫集成腳本;app

2) 每當push代碼, 自動觸發腳本,Gitlab將變更告知Gitlab-CICI鏈接Runner服務器,找到關聯的Runner ServiceRunner負責更新代碼到本地,並執行集成腳本。curl

2、安裝Runneride

1. Centos7使用yum安裝

1)添加yum

a.官方源

 
 
1 curl –L https://package.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
 
 

b.國內源

cat << EOF >> /etc/yum.repos.d/gitlab-ci-multirunner.repo

[gitlab-ci-multi-runner]

name=gitlab-ci-multi-runner

baseurl=https://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

EOF
sudo yum makecache

2)安裝1.11.2版本

sudo yum install gitlab-ci-multi-runner-1.11.2-1

  因爲公司Gitlab版本目前是8.X,官方Gitlab最新是9.0Runner最新版不支持9.0如下版本的Gitlab,所以只能安裝該版本。視Gitlab服務器的版本而定。

3Runner用戶權限

Runner默認會在服務器上建立gitlab-runner用戶, 全部的Runner Service則默認經過該用戶執行集成腳本,所以該用戶須要較高的權限。尤爲是使用Docker鏡像時,必須加入docker組。

 

sudo usermod -aG docker gitlab-runner

2.Ubuntu使用apt-get安裝

1)添加apt

 
 
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.deb.sh | sudo bash
 
 

2)安裝1.11.2版本

 

sudo yum install gitlab-ci-multi-runner-1.11.2-1

3Runner用戶權限(同上)

3.安裝包安裝

下載二進制文件或相應系統的安裝包安裝便可,gitlab-ci-multi-runner-1.11.2安裝包。

3、註冊Runner

1.進入本身的Project—>設置Runners

 

 


2.查看Specific Runners裏面的urltoken

 

 

 


3.Runner服務器執行註冊命令

gitlab-runner register --non-interactive \

    --url http://gitlab.xxxxx.com/ci \

    --registration-token GWGGXZNxbxabcdMaXZhj9 \

    --name Crowd_Job_CI \

    --tag-list 172.17.3.126 \

    --run-untagged=true \

    --executor shell \

    --builds-dir /home/gitlab-runner \

   --config "/etc/gitlab-runner/config.toml"
上述命令選項含義( * 爲必選項 )

--url                  項目CI地址*

-- registration-token  項目裏剛纔看到的token,互相關聯的標誌*

--name                 Special Runner服務名,便於後臺管理(查看、刪除、調用)*

--tag-list             Special Runner標籤,集成腳本中能夠經過指定tag關聯

--run-untagged         是否運行無標籤的集成腳本,必須用等號

--excutor              規定集成腳本執行的環境,還能夠是docker*

-- builds-dir          默認該文件夾,能夠自定義項目集成初始化的位置

--config               默認配置文件,存儲註冊信息,能夠自定義不一樣的配置文件

刷新頁面看到已經註冊成功,可使用了。

 

4、運行Runner

假設集成腳本已就緒,那麼就須要運行Runner

1.使用Specific Runner

     1run-single

gitlab-ci-multi-runner run-single \

--url http://gitlab.sensenets.com/ci

--token 37fe0fa59e3475e20e24b6e6afc7c3

--executor shell

固然這裏也能夠指定註冊時的大部分參數,不過不管如何urltokenRunnertoken,而非註冊時項目的token)、executor這三個參數是必須的。

run-single命令很簡單的把咱們剛纔註冊的Runner運行起來了,若是這個Runner對應的項目有更新,這個運行的服務就會去執行腳本內容。

即使咱們不運行run-single命令,默認會有一個已經運行狀態的Runner Service,名稱就是gitlab-runner,會自動執行全部註冊過的Runner,但同時只能執行一個任務。

 

2run installstart

 

     上圖說明了Runner的原理:

     安裝gitlab-ci-multi-runner服務器,至關於一個勞務公司的創辦,它管理Runner工人,外包各類項目Project

註冊的目的是把項目和Runner鏈接起來,由於部分項目的Runner可能須要定製。Runner比如是一個工人,在勞務中心(gitlab-ci-multi-runner)登記合同,供職於咱們的Project可是當他比較閒的時候,也能夠去其餘公司兼職)。

可是對應的RunnerService至關於Runner工人的管理層,一個管理層能夠管理一個甚至多個工人。勞務公司默認有一個公用的管理層,服務名就是上面所說的gitlab-runner,若是咱們不指定管理層,那麼勞務公司全部工人都被gitlab-runner管理運行。這個管理人員比較弱,一次只能管理一個項目,其餘項目會等待。

runrun-sigle至關於一次性的外包項目,很是具備針對性。

install則是把一個或者幾個runner包裝好,而後start,就是一個有着管理服務的工人體系,隨時待命。

Project更新,觸發Runner服務器上的Runner Service(某管理隊伍),Runner Service根據本身的配置信息,和項目的需求(tag指定某個工人),派遣Runner工人去執行Project給予的任務(Job)。

配置信息至關於花名冊,不註冊僅僅寫一個花名冊是不行的,working_dir至關於辦公地點。

下面安裝兩個服務並啓動:

gitlab-runner install \

    -n  "jiukun_self_runner" \

    -d "/home/jiukunz" \

    -c "/etc/gitlab-runner/config_jiukun_test.toml" \

    -u gitlab-runner
gitlab-runner install \

    -n  "jiukun_self2_runner" \

    -d "/home/jiukunz" \

    -c "/etc/gitlab-runner/config_jiukun_test.toml" \

    -u gitlab-runner

 

1 gitlab-runner start -n jiukun_self_runner
2 gitlab-runner start -n jiukun_self2_runner

 

 

其中,-n爲安裝的服務名稱,-d爲工做路徑,-c爲配置文件,-u爲執行用戶(服務名稱和執行用戶必須指定,配置文件和工做路徑可使用默認路徑)

 

     其實,當咱們執行上述安裝命令時,gitlab-ci-multi-runner後臺實際是將run命令寫入/etc/systemd/system/jiukun_self_runner.service文件,使之成爲一個單獨的服務:

 

2.使用Shared Runner

     使用share runner須要管理員權限,聯繫公司gitlab管理員,獲取token。而後使用和Special Runner同樣的方法註冊成功。

     進入任意項目的Runner頁面,將看到如下內容:

 

 

 

     這裏我重複註冊了兩次,能夠看到Runner不管是名字仍是tag均可以重複,可是Runnertoken卻不相同,實際上區分不一樣的Runner工人只須要兩樣東西就是urltoken。固然並不建議進行相同命名,不便於管理。

     公司全部的項目默認均可以使用Shared Runner,而不須要重複配置。

1)好處:對於大多數Runner的配置實際上是徹底相同的(一樣的executor,一樣的配置文件和工做路徑,一樣的依賴環境),若是每一個項目都去一個個註冊不只麻煩,並且不方便遷移,這時可使用shared runner

2)不足:若是一個項目的編譯所需的exector等其餘配置(配置文件有更多可選配置),而且和其餘項目須要單獨管理,這時最好使用Special Runner,並鎖定該Runner爲項目自己使用,單獨管理。

 

5、管理Runner

1.註冊的runner列表

gitlab-runner list \
    --config "/etc/gitlab-runner/config_jiukun_test.toml"

2.查看runner鏈接狀態

gitlab-runner verify \
    --config "/etc/gitlab-runner/config_jiukun_test.toml"

3.取消註冊(移除)

gitlab-runner unregistry \
    --url http://gitlab.xxxxxx.com/ci \
    --token 9c1bb50065661ba766023016f6ebf2

     不能直接在projectweb端進行remove操做,不然這裏會執行失敗

4管理gitlab-runner服務

gitlab-runner status \

    -n jiukun_self_runner.service

    不指定服務名,則默認爲gitlab-runner服務

gitlab-runner stop \

    -n jiukun_self_runner.service

gitlab-runner restart \

    -n jiukun_self_runner.service

gitlab-runner uninstall \

    -n jiukun_self_runner.service
執行uninstall會卸載該服務,與之對應的runner將沒法經過該服務運行,請確保對應的CI任務已中止。

6、集成腳本

     將集成腳本命名爲.gitlab-ci.yml或者.gitlab-ci.yaml放置在對應項目倉庫分支的根目錄下。

 

1.  yaml語法

大小寫敏感、使用縮進表明層級、不容許使用Tab縮進,只能使用空格,縮進並沒有統一限制,但同級關係內要保持對齊便可#表明註釋。

語言格式裏存在減號和冒號這些特殊字符,所以要注意千萬別寫成中文的字符格式。

減號對應的是數組,冒號對應的是鍵值對(對象)。

2. 關鍵詞

     1image

若是使用docker做爲Runnerexecutor,而且沒有設置默認的鏡像,此處須要設置鏡像;不使用能夠省略

2sevices

若是使用docker集羣服務,能夠直接調用服務;不使用能夠省略

3stages

定義各個階段名稱,若是省略,CI默認爲三個階段

每一個job都必須定義其所屬的階段,若是不定義,默認均屬於build階段;同階段任務並行對待,上一階段全部任務執行成功,纔會繼續執行下一階段;語句依次執行,若是某一語句執行失敗,將返回錯誤碼,並宣告CI失敗。

若是定義stages,則job中的stage必須與之相對應。

4before_script

           定義在全部腳本運行以前執行的語句

5after_script

           定義在全部腳本運行以後執行的語句

     6variables

     定義環境變量

     7cache

     定義下個job會使用到的文件或內容

3. Jobs

     .gitlab-ci.yml腳本內容的主體爲一個個job,沒有數量限制,每一個Job名稱能夠相同也能夠不一樣(最好不要相同),能夠大小寫;每一個Job內部至少有一個關鍵詞。經常使用關鍵詞以下

     1stage

     和腳本全局stages對應(若是全局未定義,可以使用默認

     2imageservicesvariables

     同全局關鍵詞

     3only

     規定該腳本響應分支(項目其餘分支不會觸發該腳本;若是不定義,會檢測全部分支;與之相反的關鍵詞是except

     4before_scriptafter_script

     同全局關鍵詞(注意,若是同時存在,會覆蓋全局關鍵詞對應列表內容

     5script

     腳本主體,使用方法和在shell內同樣,將在對應executor內運行一個shell環境,執行腳本內容。每一個Jobshell環境不一樣(Job結束,該環境自動關閉)。

     6tags

     指定Runner的標籤(一般一個項目有不少Runner,依靠tag區分

     7artifacts

     指定Job的產出文件路徑,若是該關鍵詞設定,能夠直接在pipeline頁面下載該文件

     8when

     默認一個job只有在上一階段全部job成功纔會執行,經過when能夠改,一般用來清理環境使用,以避免失敗後沒法清理,有四種可選參數。

      on_success(上一階段全部Job成功才執行)    

      on_failure(上一階段任意Job失敗就執行)

      always(老是執行)                          

      manual(此階段由UI界面交互執行)

 

備註:以上純屬原創,學習來源爲gitlab-runner官方中文文檔gitlab-runner英文文檔gitlab-ci英文文檔。如需轉載請註明出處,後續繼續完善。

相關文章
相關標籤/搜索