在使用Gitlab管理源碼的同時,還可以讓其自動構建、測試與發佈,這部分功能與jenkins類似。
但是與Jenkins不同的是:
Jenkins要構建一般是定時或者手動觸發,所以存在代碼未更新,但也在構建,因爲時間到了,或者代碼提交了,未及時構建,需要手動去構建。這一切都是因爲Jenkis不知道代碼變更了,它只是一個集成工具,沒有代碼管理功能。
而Gitlab具有先天優勢,它本身就是一個代碼管理工具,它知道代碼是否更新,所以可以做到只有在代碼更新時纔去構建。
另外Jenkins中的控制檯與Linux的控制檯顯示有些差異,特別是顏色方面的,不知道新版本是否有改善;而gitlab-runner中對控制檯的顯示很友好,可以參見後面的截圖。
一、安裝相應軟件
1.安裝Gitlab,參見前面的博客:Centos 安裝配置gitlab
2.安裝gitlab-runner
同樣可以在清華大學的鏡像中下載:
CentOS 6:gitlab-runner-12.9.0-1.x86_64.rpm
然後如下圖所示,輸入:
rpm -ivh gitlab-runner-12.9.0-1.x86_64.rpm
如果沒有安裝git,需要先安裝git:
yum install -y git
二、配置
- 註冊Runner
安裝完成gitlab以及gitlab-runner後,在gitlab的Web頁面打開項目的[設置]=>[CI/CD],展開Runner
可以看到有以下幾個選擇:
- 自動設置Runner
需要安裝和配置Kubernetes集羣,稍複雜 - 共享Runner
共享Runner即各個項目都可以使用它來執行作業。 - 手動設置特定Runner
項目特用,即只爲該項目服務。 - 羣組Runner
羣組特用,即只爲該羣組的項目服務
我們以手動設置特定的Runner爲例,來說明如何配置Runner讓其正常工作。
使用:
gitlab-runner register
或者:
gitlab-ci-multi-runner register
來註冊Runner。
Runtime platform arch=amd64 os=linux pid=16390 revision=4c96e5ad version=12.9.0
Running in system-mode.
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://192.168.1.129/ #輸入gitlab手動設置Runner中的地址,使用上圖中4處按鈕複製的鏈接
Please enter the gitlab-ci token for this runner:
VJzexe7WU6FE4NmJxVJQ #輸入上圖中5處按鈕複製的令牌
Please enter the gitlab-ci description for this runner:
[localhost.localdomain]: #Runner描述,可以直接回車使用默認值
Please enter the gitlab-ci tags for this runner (comma separated):
build #Runner的標識,這個很重要,後面要用到
Registering runner... succeeded runner=VJzexe7W
Please enter the executor: docker-ssh, shell, ssh, docker-ssh+machine, kubernetes, custom, docker, parallels, virtualbox, docker+machine:
shell #執行環境
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
註冊成功後,使用
gitlab-runner start
運行。現在可以在Web頁面中看到剛纔添加的Runner:
如果註冊Runner後,想要做一些修改怎麼辦?
可以通過上圖紅框中的鎖後面的書寫按鈕進行修改。
管理員賬號也可以通過導航欄上的[小扳手]進入[管理中心]=>[概覽]=>[Runner],如下圖:
修改完成後記得保存修改。
- 添加yml腳本
Gitlab在作者提交代碼時,會有機制觸發事件,爲了讓代碼執行相應的事件,Gitlab是通過編寫yml腳本來實現的,Gitlab默認的腳本名爲:.gitlab-ci.yml,需要放在項目的根目錄下。
下面的.gitlab-ci.yml示例爲C++項目的編譯作業:
stages:
- cleanup
- build
cleanup:
stage: cleanup
script:
- cd Server
- rm build -rf
tags:
- build
build:
stage: build
script:
- cd Server
- mkdir -p build
- cd build
- cmake ..
- make -j2
tags:
- build
關於yml的語法可以參考官網。但是需要注意的是一定要指定 tags,以綁定Runner,不然無法執行。
Gitlab有一個語法檢測頁面:
這樣設置後,只要在Gitlab推送後,就會觸發作業,自動清除之前的編譯,然後再重新編譯。