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


 

 

 

 

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

一、簡介

1. 為實現持續集成,需為該項目准備以下兩樣東西:

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

2)一台Runner服務器

當然,考慮到集成環境的配置,還需要docker鏡像作為載體。

2. 基本流程如下:

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

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

二、安裝Runner

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安裝包。

三、注冊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               默認配置文件,存儲注冊信息,可以自定義不同的配置文件

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

 

四、運行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為項目本身使用,單獨管理。

 

五、管理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任務已停止。

六、集成腳本

     將集成腳本命名為.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英文文檔。如需轉載請注明出處,后續繼續完善。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM