Ubuntu16.04安裝gitlab runner並配置CI
持續集成
GitLab-CI
GitLab-CI就是一套配合GitLab使用的持續集成系統(當然,還有其它的持續集成系統,同樣可以配合GitLab使用,比如Jenkins)。而且GitLab8.0以後的版本是默認集成了GitLab-CI並且默認啓用的。.gitlab-ci.yml的腳本解析就由它來負責。
GitLab-Runner
GitLab-Runner是配合GitLab-CI進行使用的。一般地,GitLab裏面的每一個工程都會定義一個屬於這個工程的軟件集成腳本,用來自動化地完成一些軟件集成工作。當這個工程的倉庫代碼發生變動時,比如有人push了代碼,GitLab就會將這個變動通知GitLab-CI。這時GitLab-CI會找出與這個工程相關聯的Runner,並通知這些Runner把代碼更新到本地(服務器)並執行預定義好的執行腳本。
在項目根目錄創建.gitlab-ci.yml
當有新內容push到倉庫後,GitLab會查找是否有.gitlab-ci.yml文件,如果文件存在, Runners 將會根據該文件的內容開始build 本次commit。
.gitlab-ci.yml 使用YAML語法, 你需要格外注意縮進格式,要用空格來縮進,不能用tabs來縮進。
基本的.gitlab-ci.yml
結構如下:
stages:
- build
- test
- deploy
before_script:
- echo "Restoring Packages..."
build_job:
stage: build
script:
- echo "Release build..."
except:
- tags
test_job:
stage: test
script:
- echo "Tests run..."
- cd cds.ci.test
- gradle test
tags:
- wikirunner
最上面的stages配置意思是,先構建階段爲build的job,然後再構建階段爲test的job,下面build_job和test_job都是job,如果不配置stages,默認順序爲build - test - deploy。
話不多說,接下來安裝Gitlab Runner
在需要持續集成的項目所在主機安裝gitlab-runner。
Gitlab Runner目前支持package安裝了,具體可以查看官網。
安裝過程
# For Debian/Ubuntu/Mint
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
sudo apt-get install gitlab-runner
# To install a specific version of GitLab Runner:
# for DEB based systems
apt-cache madison gitlab-runner
sudo apt-get install gitlab-runner=10.0.0
# 啓用命令啓動Runner
sudo gitlab-runner run
# For RHEL/CentOS/Fedora
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
sudo yum install gitlab-runner
# To install a specific version of GitLab Runner:
# for RPM based systems
yum list gitlab-runner --showduplicates | sort -r
sudo yum install gitlab-runner-10.0.0-1
sudo gitlab-runner run
在gitlab代碼庫中註冊gitlab-runner
首先打開代碼庫
進入倉庫->settings->CI/CD Pipelines,看到如下頁面
在安裝有gitlab-runner的主機上運行
sudo gitlab-runner register
# 會要求填入url和token,就是上圖中遮起來的1和2.
sudo gitlab-runner start
# 此時gitlab-runner就配置完成了,代碼庫中有push就會觸發持續集成
遇到的問題
push之後一直顯示pending,點進去之後報錯,沒有分配的runner。
這個可能是gitlab-runner register
的時候配置了tags,而.gitlab-ci.yml
中沒有設置tags,導致沒有分配的runner。可以點擊runner(上圖中綠點後面被遮住的部分)查看runner的tags並在.gitlab-ci.yml
中進行相應配置。或者點擊runner(上圖中綠點後面被遮住的部分)後面的編輯圖標然後勾選Indicates whether this runner can pick jobs without tags
。
runner運行過程中報錯沒有權限
CI 默認執行用戶爲 gitlab-runner,可以通過以下命令查看。
$ ps aux | grep gitlab
/usr/bin/gitlab-ci-multi-runner run --working-directory /home/gitlab-runner --config /etc/gitlab-runner/config.toml --service gitlab-runner --syslog --user gitlab-runner
# --user後面的就是gitlab-runner的用戶
可以爲gitlab-runner
用戶添加sudo權限。
# 切換到root賬號下
$ su
# 添加sudo文件的寫權限
$ chmod u+w /etc/sudoers
# 編輯sudoers文件
$ vi /etc/sudoers
# 添加如下內容 允許用戶gitlab-runner執行sudo命令,並且在執行的時候不輸入密碼
gitlab-runner ALL=(ALL) NOPASSWD: ALL
# 撤銷sudo文件寫權限
$ chmod u-w /etc/sudoers
或者修改執行gitlab-runner的用戶
修改 /etc/systemd/system/gitlab-runner.service
中--user
之後的gitlab-runner
爲擁有權限的用戶。
重新加載配置文件,並啓動
sudo systemctl daemon-reload
sudo systemctl restart gitlab-runner
參考博客
https://blog.csdn.net/ligang2585116/article/details/105316087/
https://www.jianshu.com/p/39881f224077
https://blog.csdn.net/qq_27520051/article/details/80552220