gitlab-runner之build failed with exit status 1問題分析

前言:

工作需要来屠,原先的一臺專門負(fù)責(zé)打包的機(jī)器要被調(diào)走虑椎,所以另起爐灶,把需要打包的項(xiàng)目遷移到新機(jī)器俱笛,本篇文章講述了遷移過程遇到的一些問題以及解決的方法捆姜。

1.gitlab-runner

首先還是簡單說一下什么是gitlab-runner,官網(wǎng)是這么描述的:

GitLab Runner is the open source project that is used to run your jobs and send the results back to GitLab. It is used in conjunction with GitLab CI, the open-source continuous integration service included with GitLab that coordinates the jobs.

也就是說gitlab-runner是配合gitlab-ci進(jìn)行使用的迎膜。一般地泥技,gitlab里面的每一個(gè)工程都會(huì)定義一個(gè)屬于這個(gè)工程的軟件集成腳本,用來自動(dòng)化地完成一些軟件集成工作磕仅。
當(dāng)這個(gè)工程的倉庫代碼發(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í)行腳本。

2.gitlab-runner安裝和注冊

安裝
注冊
這塊廢話不多說劫恒,直接看官方文檔贩幻,根據(jù)系統(tǒng)一次操作一下即可

3.問題描述

新機(jī)器到手后,把機(jī)器上所有的軟件環(huán)境統(tǒng)統(tǒng)更新了個(gè)遍,升級到macOS High Sierra段直,ruby 升級到2.4等等吃溅。然后開始安裝gitlab-runner緊接著注冊到gitlab-ci,一切的一切都看似很平靜很正常鸯檬。

然后開始試跑腳本,然后莫名其妙的出錯(cuò)了决侈,log如下:

Running with gitlab-runner 10.3.0 (5cf5e19a)
  on xxx的MacBook pro (0dee7c95)
Using Shell executor...
Running onxxxdeMacBook-Pro.local...
Cloning repository...
Cloning into '/Users/xxx/builds/0dee7c95/0/iOS-Team/xxx-test'...
Checking out 0766deb4 as develop...
Skipping Git submodules setup
ERROR: Job failed: exit status 1

clone之后立馬出問題,一臉懵逼...這誰看得懂出的啥錯(cuò)喧务?涼了涼了~

4.問題分析

剛開始以為是clone出問題赖歌,打開build的目錄文件,里面所有文件目錄都是完整的功茴,直接打開項(xiàng)目工程都能順暢的跑起來庐冯。
嘗試用這些log輸出,Google了一下坎穿,能搜到好幾個(gè)Stack Overflow的結(jié)果展父,但是很遺憾,都未能解決問題玲昧。

那么問題到底出在哪栖茉?

首先的換一個(gè)思考問題的角度:gitlab-ci上的log看不出,搜不出什么端倪孵延,那么gitlab-runner呢吕漂?畢竟跑腳本是gitlab-runner的事情,它自己最清楚了尘应。

于是在打包機(jī)器終端里面輸入gitlab-runner --debug run 這樣runner的每一步操作都能看的到惶凝。

Checking for jobs... nothing                        runner=0dee7c95
Feeding runners to channel                          builds=0
Checking for jobs... received                       job=402 repo_url=http://gitlab.xxxx.cn/iOS-Team/xxx-test.git runner=0dee7c95
Failed to requeue the runner:                       builds=1 runner=0dee7c95
Running with gitlab-runner 10.3.0 (5cf5e19a)
  on xxx的MacBook pro (0dee7c95)  job=402 project=47 runner=0dee7c95
Shell configuration: environment: []
dockercommand:
- sh
- -c
- "if [ -x /usr/local/bin/bash ]; then\n\texec /usr/local/bin/bash --login\nelif [
  -x /usr/bin/bash ]; then\n\texec /usr/bin/bash --login\nelif [ -x /bin/bash ]; then\n\texec
  /bin/bash --login\nelif [ -x /usr/local/bin/sh ]; then\n\texec /usr/local/bin/sh
  --login\nelif [ -x /usr/bin/sh ]; then\n\texec /usr/bin/sh --login\nelif [ -x /bin/sh
  ]; then\n\texec /bin/sh --login\nelse\n\techo shell not found\n\texit 1\nfi\n\n"
command: bash
arguments:
- --login
passfile: false
extension: ""
  job=402 project=47 runner=0dee7c95
Using Shell executor...                             job=402 project=47 runner=0dee7c95
Waiting for signals...                              job=402 project=47 runner=0dee7c95
WARNING: Job failed: exit status 1                  job=402 project=47 runner=0dee7c95
Submitting job to coordinator... ok                 job=402 runner=0dee7c95
Feeding runners to channel                          builds=0
Checking for jobs... nothing                        runner=0dee7c95

以上的log是為了復(fù)現(xiàn)問題,把相關(guān)配置改成問題解決之前犬钢,而操作出來的苍鲜,可能和問題解決之前的log有些出入。根據(jù)這些log玷犹,再次Google混滔,果然找到了相關(guān)信息:
https://gitlab.com/gitlab-org/gitlab-runner/issues/114
真相大白,原來問題出在RVM上箱舞。

RVM相信開發(fā)者都不陌生遍坟,它是一個(gè)便捷的多版本ruby環(huán)境的管理和切換工具。有一個(gè)注意點(diǎn)晴股,MacOS本身是集成ruby環(huán)境的愿伴,不同版本的系統(tǒng)默認(rèn)集成的ruby版本也不一樣。所以日常開發(fā)中电湘,我們會(huì)根據(jù)需要對ruby環(huán)境統(tǒng)一管理隔节。這個(gè)時(shí)候就會(huì)用到rvm了鹅经。通過rvm可以升級管理ruby。通過which ruby命令可以查看目前使用的是什么ruby怎诫。比如/Users/xxx/.rvm/rubies/ruby-2.4.1/bin/ruby 輸出的路徑包含了.rvm就說明目前使用的是rvm下的ruby瘾晃。

到此為止確定了目前使用的是rvm的ruby,在深入定位一下幻妓,問題是出在rvm重新定義了cd命令

$ type cd
cd is a function
cd () 
{ 
    __zsh_like_cd cd "$@"
}
$ unset cd
$ type cd
cd is a shell builtin

所以蹦误,clone下來一直出錯(cuò)的原因是cd命令被重定義了,導(dǎo)致路徑切換的不對肉津,無法執(zhí)行命令强胰,進(jìn)而報(bào)錯(cuò)。這就解釋了為什么gitlab-runner上輸出的log exec /bin/sh --login\nelse\n\techo shell not found\n\texit 1\nfi\n\n

5.問題解決

知道了原因name如何解決呢妹沙?剛剛的問題里面也給出了方案
.bashrc.bash_profile加上unset cd偶洋。
操作如下:

1、打開terminal(終端)
2距糖、cd ~ ( 進(jìn)入當(dāng)前用戶的home目錄)
3玄窝、open .bash_profile (打開.bash_profile文件,如果文件不存在就  創(chuàng)建文件:touch .bash_profile  編輯文件:open -e bash_profile)
4悍引、直接更改彈出的.bash_profile文件內(nèi)容
5恩脂、command + s 保存文件,然后關(guān)閉
6吗铐、在terminal(終端)中輸入 source .bash_profile (使用剛才更新之后的內(nèi)容)

或者直接finder里面找东亦,用文本編輯器修改一下杏节。

等等.bashrc .bash_profile又是什么鬼唬渗? unset呢?
百度了一下這些得到如下信息:
profile\bashrc\bash_profile之間的區(qū)別和聯(lián)系:

/etc/profile 每個(gè)用戶奋渔,首次登錄時(shí)被執(zhí)行镊逝;
/etc/bashrc 每個(gè)運(yùn)行bash shell的用戶都執(zhí)行此文件,當(dāng)bsh被打開時(shí)嫉鲸,該文件被讀瘸潘狻;
~/.bash_profile 專用于本用戶的shell信息玄渗,僅被執(zhí)行一次座菠;
~/.bashrc 文件包含本用戶的bsh信息,登錄及每次打開shell時(shí)被讀取藤树。

unset指令:刪除指定的shell變量或函數(shù)
【語 法】unset [-fv][變量或函數(shù)名稱]
【功能介紹】該指令作用主要是刪除指定的shell變量和函數(shù)浴滴。

因?yàn)間itlab-runner注冊的時(shí)候runner executor用的shell,所以shell腳本的語法是適用的岁钓。使用unset cd就意味著把rvm重新定義的cd方法刪除升略,這樣路徑切換的時(shí)候就正常了微王。gitlab-runner都能正常跑起來了。

6.總結(jié)

1.思考問題角度要全面品嚣,一套完整的業(yè)務(wù)流程里出現(xiàn)問題炕倘,可以根據(jù)不同角度翰撑,不同端想錯(cuò)誤點(diǎn)靠近罩旋,逐個(gè)的排查;
2.多關(guān)注debug信息眶诈,活用debug輸出的log搜索信息瘸恼,盡量谷歌搜索,百度太垃圾册养;
3.shell腳本是個(gè)神奇的東西东帅,工作之余可以多學(xué)習(xí)學(xué)習(xí)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末球拦,一起剝皮案震驚了整個(gè)濱河市靠闭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌坎炼,老刑警劉巖愧膀,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異谣光,居然都是意外死亡檩淋,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門萄金,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蟀悦,“玉大人,你說我怎么就攤上這事氧敢∪崭辏” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵孙乖,是天一觀的道長浙炼。 經(jīng)常有香客問我,道長唯袄,這世上最難降的妖魔是什么弯屈? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮恋拷,結(jié)果婚禮上资厉,老公的妹妹穿的比我還像新娘。我一直安慰自己梅掠,他們只是感情好酌住,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布店归。 她就那樣靜靜地躺著,像睡著了一般酪我。 火紅的嫁衣襯著肌膚如雪消痛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天都哭,我揣著相機(jī)與錄音秩伞,去河邊找鬼。 笑死欺矫,一個(gè)胖子當(dāng)著我的面吹牛纱新,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播穆趴,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼脸爱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了未妹?” 一聲冷哼從身側(cè)響起簿废,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎络它,沒想到半個(gè)月后族檬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡化戳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年单料,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片点楼。...
    茶點(diǎn)故事閱讀 38,059評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡扫尖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出盟步,到底是詐尸還是另有隱情藏斩,我是刑警寧澤躏结,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布却盘,位于F島的核電站,受9級特大地震影響媳拴,放射性物質(zhì)發(fā)生泄漏黄橘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一屈溉、第九天 我趴在偏房一處隱蔽的房頂上張望塞关。 院中可真熱鬧,春花似錦子巾、人聲如沸帆赢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽椰于。三九已至怠益,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瘾婿,已是汗流浹背蜻牢。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留偏陪,地道東北人抢呆。 一個(gè)月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像笛谦,于是被迫代替她去往敵國和親抱虐。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評論 2 345