搭建自己的GitLab CI Runner 運(yùn)行Laravel測(cè)試

前言

本文操作目標(biāo):搭建GitLab以及使用GitLab的CI Runner服務(wù)愁憔,對(duì)項(xiàng)目進(jìn)行測(cè)試粘招。
操作過一次稿存,才知道并非想像中的那么復(fù)雜而涉,也沒有像想中的那么簡(jiǎn)單著瓶。

在搭建自己的 CI Runner 之前,需要先明確一些概念:

Continuous Integration(持續(xù)集成)

CI 的全稱是 Continuous Integration (持續(xù)集成)啼县,是 extreme programming (極限編程) 的一部分材原。我們常用 CI 來做一些自動(dòng)化工作,這種自動(dòng)化工作會(huì)運(yùn)行在一臺(tái)集中的機(jī)器上季眷,比如程序的打包余蟹,單元測(cè)試,部署等瘟裸。這種構(gòu)建方式避免了了打包環(huán)境差異引動(dòng)的錯(cuò)誤客叉,并且通過 Gitlab 的 hook, 在代碼提交的各個(gè)環(huán)節(jié)自動(dòng)地完成一系列的構(gòu)建工作。

持續(xù)集成是一種軟件開發(fā)實(shí)踐话告,即團(tuán)隊(duì)開發(fā)成員經(jīng)常集成他們的工作兼搏,通常每個(gè)成員每天至少集成一次,也就意味著每天可能會(huì)發(fā)生多次集成沙郭。每次集成都通過自動(dòng)化的構(gòu)建(包括編譯佛呻,發(fā)布,自動(dòng)化測(cè)試)來驗(yàn)證病线,從而盡快地發(fā)現(xiàn)集成錯(cuò)誤吓著。許多團(tuán)隊(duì)發(fā)現(xiàn)這個(gè)過程可以大大減少集成的問題,讓團(tuán)隊(duì)能夠更快的開發(fā)內(nèi)聚的軟件送挑。

GitLab-CI

GitLab-CI就是一套配合GitLab使用的持續(xù)集成系統(tǒng)(當(dāng)然绑莺,還有其它的持續(xù)集成系統(tǒng),同樣可以配合GitLab使用惕耕,比如Jenkins)纺裁。而且GitLab8.0以后的版本是默認(rèn)集成了GitLab-CI并且默認(rèn)啟用的。

GitLab-Runner

那GitLab-Runner又是什么東東呢?與GitLab-CI有什么關(guān)系呢欺缘?

GitLab-Runner是配合GitLab-CI進(jìn)行使用的栋豫。一般地,GitLab里面的每一個(gè)工程都會(huì)定義一個(gè)屬于這個(gè)工程的軟件集成腳本谚殊,用來自動(dòng)化地完成一些軟件集成工作丧鸯。當(dāng)這個(gè)工程的倉(cāng)庫(kù)代碼發(fā)生變動(dòng)時(shí),比如有人push了代碼嫩絮,GitLab就會(huì)將這個(gè)變動(dòng)通知GitLab-CI丛肢。這時(shí)

GitLab-CI會(huì)找出與這個(gè)工程相關(guān)聯(lián)的Runner,并通知這些Runner把代碼更新到本地并執(zhí)行預(yù)定義好的執(zhí)行腳本絮记。

所以摔踱,GitLab-Runner就是一個(gè)用來執(zhí)行軟件集成腳本的東西。你可以想象一下:Runner就像一個(gè)個(gè)的工人怨愤,而GitLab-CI就是這些工人的一個(gè)管理中心,所有工人都要在GitLab-CI里面登記注冊(cè)蛹批,并且表明自己是為哪個(gè)工程服務(wù)的撰洗。當(dāng)相應(yīng)的工程發(fā)生變化時(shí),GitLab-CI就會(huì)通知相應(yīng)的工人執(zhí)行軟件集成腳本腐芍。如下圖所示:

image.png

Runner可以分布在不同的主機(jī)上差导,同一個(gè)主機(jī)上也可以有多個(gè)Runner。

Runner類型

GitLab-Runner可以分類兩種類型:Shared Runner(共享型)Specific Runner(指定型)猪勇。

Shared Runner:這種Runner是所有工程都能夠用的设褐。只有系統(tǒng)管理員能夠創(chuàng)建Shared Runner。

Specific Runner:這種Runner只能為指定的工程服務(wù)泣刹。擁有該工程訪問權(quán)限的人都能夠?yàn)樵摴こ虅?chuàng)建Shared Runner助析。

準(zhǔn)備工作:

Centos7機(jī)器,2臺(tái)椅您。 一臺(tái)安裝GitLab和Runner外冀,一臺(tái)用來充當(dāng)Runner的操作機(jī)。

Docker安裝

GitLab功能十在是太豐富掀泳,安裝的服務(wù)太多雪隧。服務(wù)器資源緊缺,所以一臺(tái)服務(wù)器上用Docker來做安裝測(cè)試嘍员舵。

Docker的安裝及基礎(chǔ)使用脑沿,本章不做闡述。

GitLab安裝

從Gitblit轉(zhuǎn)移至GitLab马僻,發(fā)現(xiàn)其復(fù)雜度真不是一個(gè)數(shù)量級(jí)的庄拇。如果不需要在源碼上做很多服務(wù),還是Gitblit用的隨心巫玻。
使用Docker安裝GitLab丛忆,找了一個(gè)9.x的中文版

$ docker pull docker.io/twang2218/gitlab-ce-zh
$ docker images
docker.io/twang2218/gitlab-ce-zh   latest              b8165a7e3d68        3 months ago        1.39 GB
$ docker run --detach \
--hostname 192.168.1.8 \
--publish 8082:8082 --name gitlab9 \
--restart always \
--volume /home/gitlab:/var/opt/gitlab/git-data \
docker.io/twang2218/gitlab-ce-zh
$ docker ps

這里有一點(diǎn)要說明祠汇,端口映射,寫的是8082到8082熄诡,就是說訪問物理主機(jī)(192.168.1.8)的8082端口可很,相當(dāng)于訪問docker主機(jī)的8082端口。
但是GitLab默認(rèn)的服務(wù)端口是80凰浮,要下入docker主機(jī)我抠,改一下配置。

# 進(jìn)入docker主機(jī)的ssh
$ docker exec -it gitlab9 /bin/bash

# 修改 /etc/gitlab/gitlab.rb
bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
root@192:/# vim /etc/gitlab/gitlab.rb

#修改項(xiàng)目
external_url 'http://192.168.1.8:8082'

應(yīng)用配置更新

gitlab-ctl reconfigure

雷點(diǎn):直接重啟GitLab服務(wù)袜茧,配置是不會(huì)更新的

此時(shí)菜拓,訪問 http://192.168.1.8:8082,基本是OK的了笛厦。更新密碼纳鼎,創(chuàng)建項(xiàng)目之流,請(qǐng)君細(xì)測(cè)裳凸。

.gitlab-ci.yml

資料顯示贱鄙,GitLab8之后的版本,默認(rèn)集成姨谷,并啟用了GitLabCI逗宁,所以無需額外的任何配置。還是親兒子營(yíng)養(yǎng)多梦湘。
唯一的要求瞎颗,就是你的項(xiàng)目代碼里,必須有一個(gè)叫.gitlab-ci.yml的文件捌议。使用GitLab管理后臺(tái)哼拔,可以添加文件,添加時(shí)可以選擇對(duì)應(yīng)的模板文件禁灼,還是很貼心的管挟。有如下圖示:

.gitlab-ci.yml文件

文件大概的內(nèi)容,就是一堆任務(wù)弄捕,包構(gòu)建命令(能夠把項(xiàng)目需要的環(huán)境構(gòu)建出來僻孝,以便運(yùn)行測(cè)試)測(cè)試命令,及其它你想執(zhí)行的命令守谓。
這里直接使用Laravel模板穿铆。然后需要針對(duì)自己的系統(tǒng),對(duì)腳本微調(diào):

  1. apt-get替換成yum斋荞。因?yàn)槲业哪繕?biāo)機(jī)是centos7
  2. 刪除docker相關(guān)的內(nèi)容荞雏。因?yàn)槲业哪繕?biāo)操作機(jī)沒有安裝docker,是一個(gè)臺(tái)空白機(jī)
  3. 將 https 替換成 http
  4. 增加tags laravel,(很重要)增加完如下
test:
  # 下兩行 很重要
  tags:
    - laravel
  script:

  # 進(jìn)入后臺(tái)項(xiàng)目目錄
  - cd backend

  # run laravel tests
  - php vendor/bin/phpunit --coverage-text --colors=never 

腳本的任何錯(cuò)誤凤优,將造成任務(wù)運(yùn)行失敗

GitLab管理端悦陋,也可以看到此文件的語法檢查

語法檢查

CI Runner 安裝 注冊(cè)

先說一下大致流程:
1,安裝runner
2筑辨,runner注冊(cè)到 GitLab
3俺驶,當(dāng)代碼提交后,GitLab根據(jù) .yml的配置棍辕,通知runner暮现,起來,干活啦
4楚昭,runner收到任務(wù)栖袋,開始執(zhí)行作業(yè)
5,GitLab接收并顯示 runner 的運(yùn)行結(jié)果

CI Runner的安裝抚太,依然使用Docker的方式

GitLab Runner 官方安裝指南

無腦執(zhí)行

$ docker pull gitlab/gitlab-runner:latest
$ 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

下面開始實(shí)施注冊(cè)

1塘幅,首先需要在GitLab的后臺(tái),找到接收runner注冊(cè)的頁(yè)面凭舶,如下圖指引:

設(shè)置--流水線

簡(jiǎn)單一點(diǎn)晌块,我們搞一個(gè)特定的Runners,頁(yè)面內(nèi)會(huì)提供注冊(cè)需要的url和密鑰

2帅霜,執(zhí)行注冊(cè)命令
需要進(jìn)入運(yùn)行runner的docker主機(jī),執(zhí)行相關(guān)命令呼伸,過程如下:

# 進(jìn)入docker主機(jī)的shell
$ docker exec -it gitlab-runner  /bin/bash
# 注冊(cè)命令
root@94652dec6e02:/# gitlab-ci-multi-runner register
Running in system-mode.

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://192.168.1.8:8082/
Please enter the gitlab-ci token for this runner:
zQRBTAAmh1Zc9BxU6G61
Please enter the gitlab-ci description for this runner:
[94652dec6e02]: just for test
Please enter the gitlab-ci tags for this runner (comma separated):
laravel
Whether to run untagged builds [true/false]:
[false]:
Whether to lock the Runner to current project [true/false]:
[true]:
Registering runner... succeeded                     runner=zQRBTAAm
Please enter the executor: docker-ssh+machine, kubernetes, docker, docker-ssh, shell, ssh, parallels, virtualbox, docker+machine:
ssh
Please enter the SSH server address (e.g. my.server.com):
192.168.1.4
Please enter the SSH server port (e.g. 22):
Please enter the SSH user (e.g. root):
xx
Please enter the SSH password (e.g. docker.io):
xx
Please enter path to SSH identity file (e.g. /home/user/.ssh/id_rsa):

Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

其中的 tags 非常重要身冀。 要和 .yml文件中的tags一致,否則會(huì)出來諸如“未找到有效的Runner”等錯(cuò)誤提示括享,使流水線作業(yè)擱置

可以檢查本地注冊(cè)情況

# gitlab-runner list
Listing configured runners                          ConfigFile=/etc/gitlab-runner/config.toml
first test                                          Executor=ssh Token=e23c4a3320a90c3e81074de0f87fdc URL=http://192.168.1.8:8082/
just for test                                       Executor=ssh Token=7ff71f37a5c9b108dbcb2234b574f2 URL=http://192.168.1.8:8082/

然后不要忘記搂根,要啟動(dòng)runner服務(wù)

# gitlab-runner start

這里我選擇了ssh的方式。此方式相當(dāng)于給runner找一個(gè)『肉機(jī)』去跑項(xiàng)目的集成測(cè)試代碼铃辖。其它方式待研究

同時(shí)剩愧,注冊(cè)成功之后,GitLab管理后臺(tái)娇斩,也可以看到注冊(cè)信息

image.png

測(cè)試

文行致此仁卷,已萬事俱備
push你的代碼至版本庫(kù),GitLabCI即開始工作犬第,如果你想看到綠色的成功圖標(biāo)锦积,根據(jù)提示一步一步調(diào)試你的 .yml腳本吧

全是失敗

文章寫的比較倉(cāng)促,主要用以記錄一次CI之旅歉嗓。如有運(yùn)行不通丰介,請(qǐng)與交流

比持續(xù)集成更重要的,是你首先要在你的項(xiàng)目里寫好各類測(cè)試,提高測(cè)試的覆蓋率哮幢,寫好從源碼到可運(yùn)行測(cè)試的構(gòu)建腳本带膀,然后再尋求可自動(dòng)化的方法

更新

本機(jī):Ubuntu16.04
本機(jī)通過 Shell 運(yùn)行:/opt/ ? ./gitlab-runner-linux-amd64 run
runner register 信息:executor docker
關(guān)鍵信息:使用本機(jī)的 docker 服務(wù),運(yùn)行 [runner executor doctor]
配置如下圖:cat ~/.gitlab-runner/config.toml

image.png

參考:https://www.cnblogs.com/xxred/p/11548254.html

再次強(qiáng)調(diào):編寫可測(cè)試代碼

參考博文
使用Gitlab-Runner Docker 構(gòu)建 node 項(xiàng)目
Docker搭建自己的Gitlab CI Runner
使用docker運(yùn)行g(shù)itlab服務(wù)
GitLab-CI 從安裝到差點(diǎn)放棄

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末橙垢,一起剝皮案震驚了整個(gè)濱河市垛叨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌钢悲,老刑警劉巖点额,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異莺琳,居然都是意外死亡还棱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門惭等,熙熙樓的掌柜王于貴愁眉苦臉地迎上來珍手,“玉大人,你說我怎么就攤上這事辞做×找” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵秤茅,是天一觀的道長(zhǎng)稚补。 經(jīng)常有香客問我,道長(zhǎng)框喳,這世上最難降的妖魔是什么课幕? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮五垮,結(jié)果婚禮上乍惊,老公的妹妹穿的比我還像新娘。我一直安慰自己放仗,他們只是感情好润绎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著诞挨,像睡著了一般莉撇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上亭姥,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天稼钩,我揣著相機(jī)與錄音频敛,去河邊找鬼裕坊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛牵素,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播巡李,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼抚笔,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了侨拦?” 一聲冷哼從身側(cè)響起殊橙,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎狱从,沒想到半個(gè)月后膨蛮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡季研,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年敞葛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片与涡。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡惹谐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出驼卖,到底是詐尸還是另有隱情氨肌,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布酌畜,位于F島的核電站怎囚,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏桥胞。R本人自食惡果不足惜桩了,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望埠戳。 院中可真熱鬧,春花似錦蕉扮、人聲如沸整胃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屁使。三九已至,卻和暖如春奔则,著一層夾襖步出監(jiān)牢的瞬間蛮寂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工易茬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留酬蹋,地道東北人及老。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像范抓,于是被迫代替她去往敵國(guó)和親骄恶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容