? ? ? ? ? ??
(前言)
什么是GitLab CI 选泻???
gitlab-ci全稱是gitlab continuous integration焰情,也就是基于gitlab的持續(xù)集成工具珠移。中心思想是當(dāng)每一次push到gitlab的時(shí)候倔丈,都會(huì)觸發(fā)一次腳本執(zhí)行灰嫉,然后腳本的內(nèi)容包括了測(cè)試郊酒,編譯遇绞,部署等一系列自定義的內(nèi)容键袱。高版本的GitLab 自帶了GitLab CI,所以不需要另外安裝。
什么是GitLab-Runner摹闽?
GitLab-Runner是腳本執(zhí)行的承載者蹄咖,GitLab-CI事先注冊(cè)好GitLab-Runner,再push 代碼付鹿,對(duì)應(yīng)的Runner就會(huì)執(zhí)行你所定義的腳本澜汤。
環(huán)境
Centos7??GitLab(8.0版本以上,因?yàn)?/b>8.0版本之后才支持gitlab-ci)?Docker?Git?GitLab-Runner
步驟
安裝GitLab-CI這個(gè)不用安裝了 裝好GitLab就自帶了
安裝GitLab-Runner在centOS上 安裝gitlab-ci-multi-runner
配置.gitlab-yml文件
一
? 安裝GitLab-Runner
I.正常安裝
(Runner服務(wù)器可以GitLab所在服務(wù)器,也可以是程序需要部署的服務(wù)器舵匾,也可以是其它服務(wù)器俊抵。)
$curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multirunner/script.rpm.sh | sudo bash $ yum install gitlab-ci-multi-runner
II.docker鏡像安裝
[1]先獲取 gitlab-runner鏡像
sudo docker pull gitlab/gitlab-runner:latest
[2]啟動(dòng) gitlab-runner container
docker run -d --name gitlab-runner --restart always \ -v /srv/gitlab-runner/config:/etc/gitlab-runner \ -v /var/run/docker.sock:/var/run/docker.sock \?gitlab/gitlab-runner:latest
[3]注冊(cè)runner(docker容器的話則是進(jìn)入容器內(nèi)執(zhí)行以下指令)
gitlab-ci-multi-runner register
二??
注冊(cè)runner首先,進(jìn)入到你的 gitlab 項(xiàng)目網(wǎng)頁(yè)坐梯,找到 Settings -> CI/CI -> Runner Settings徽诲,然后找到項(xiàng)目對(duì)應(yīng)的 url 和 token? 然后它會(huì)詢問(wèn)一些必要的認(rèn)證信息和配置信息,以下是個(gè)例子如下圖:
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/ci )
https://your-gitlab-host/ci
Please enter the gitlab-ci tokenfor?this runnerxxx
Please enter the gitlab-ci descriptionfor?this runnermy-runner
INFO[0034] fcf5c619 Registering runner... succeeded
Please enter the executor: shell, docker, docker-ssh, ssh?docker
Please enter the Docker image (eg. ruby:2.1):maven:3-jdk-8
INFO[0037] Runner registered successfully. Feel free to start it, butif?it'srunning already the config should be automatically reloaded!
然后刷新網(wǎng)頁(yè),如下圖:可以看到Runner注冊(cè)成功?另外吵血,我們可以通過(guò)指令gitlab-ci-multi-runner?list查詢你注冊(cè)的runner谎替,用指令gitlab-ci-multi-runner status查看runner服務(wù)是否運(yùn)行中。
三
提升構(gòu)建速度
因?yàn)槲覀兪荕aven項(xiàng)目 配置中的maven:3-jdk-8實(shí)際就是docker image.每次構(gòu)建因?yàn)槎际窃讵?dú)立的container里蹋辅,maven的.m2文件并不會(huì)被多次構(gòu)建公用院喜,所以每次maven都需要重新從maven庫(kù)中下載依賴的jar包,這其實(shí)是沒(méi)必要的晕翠。
由于我們?cè)赿ocker
container 里構(gòu)建項(xiàng)目喷舀,我們可以使用docker的volume將.m2文件在多個(gè)container之間共享。
由此我們需要做一些變更淋肾,我們?cè)赗unner的服務(wù)器上打開(kāi)/srv/gitlab-runner/config/config.toml文件硫麻。將maven
.m2目錄加到volumes中。如下圖
四樊卓、配置.gitlab-ci.yml
GitLab
CI的一切工作拿愧,都是由.gitlab-ci.yml來(lái)配置的。
詳細(xì)文檔可以參考這里(https://docs.gitlab.com/ee/ci/yaml/README.html#stage)
首先碌尔,在項(xiàng)目根目錄下創(chuàng)建.gitlab-ci.yml文件(編輯完要提交到gitlab 才能生效):
配置完成后浇辜,當(dāng)你在項(xiàng)目push代碼到gitlab的時(shí)候,就會(huì)觸發(fā)gitlab-ci唾戚,然后執(zhí)行你定義的代碼柳洋。可以在CI/CD →Pipelines 看到所有狀態(tài)的Pipelines? ? ? running表示正在運(yùn)行叹坦,passed表示通過(guò)了熊镣。
ps:有個(gè)容易遇到的坑,當(dāng)你卡在pending不動(dòng)的時(shí)候,可以看看你的runner是否設(shè)置了'無(wú)tag標(biāo)簽也運(yùn)行'
回到你的runner绪囱,點(diǎn)編輯,然后测蹲,勾選第二項(xiàng)Run untagged jobs
運(yùn)行日志可以在這里查看:
五
在.gitlab-ci.yml配置里配置將構(gòu)建好的文件推動(dòng)到目標(biāo)服務(wù)器
1.首先給GitLab-Runner的docker容器生成SSH秘鑰ssh-key
生成的私鑰放在.ssh/下,如圖:
2.將生成的私鑰id_rsa.pub文件里的公鑰復(fù)制到目標(biāo)服務(wù)器的/.ssh/authorized_keys里面,(如果沒(méi)有authorized_keys這個(gè)文件的話則手動(dòng)創(chuàng)建)
如下圖:
1.首先將docker容器里生成的公鑰作為變量存放在gitlab-ci環(huán)境中,如下圖:
2.在runner容器里和目標(biāo)服務(wù)器的/etc/ssh/ssh_config里進(jìn)行如下配置
3.gitlab-ci.yml配置文件如下:
(圖中test.sh腳本可根據(jù)實(shí)際應(yīng)用情況編寫,我是在項(xiàng)目的根目錄建的腳本,因?yàn)檎麄€(gè)項(xiàng)目的路徑在runner執(zhí)行器中執(zhí)行的時(shí)候?yàn)榕R時(shí)路徑 下圖為test.sh)