1. 程式人生 > >Jenkins 100次構建失敗踩坑全錄(一)

Jenkins 100次構建失敗踩坑全錄(一)

標籤(空格分隔):work

本文將以問題與解決方案的方式對Jenkins構建過程中的問題進行收錄,後期會在評論中持續收集,如果有相同情況,請自行對照解決;

關卡1 :

安裝Jenkins:首先你的電腦得有一個Java環境,接下來安裝Jenkins。你可以直接去Jenkins入口網站,檢視安裝方式;
當然你也可以使用以下方法:

  • 安裝homebrew
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  • 安裝jenkins
$ brew install jenkins

安裝成功後需要開啟jenkins服務;

關卡2 :

開啟Jenkins服務:確認jenkins已安裝,在終端進入到jenkins安裝目錄下,會有一個叫做jenkins.war的檔案,

$ java -jar jenkins.war

或者在終端輸入:

$ jenkins

當出現:
image_1c0ptnl2j13mh1mn2hmk18qf7usp.png-188.1kB

服務已經就位,可以開始進行配置了;

這裡還有兩個命令用於jenkins開啟和停用(Mac上):

$ sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist
$ sudo launchctl unload /Library/LaunchDaemons/org.jenkins
-ci.plist

如果是linux上也可以這樣:

$ sudo systemctl status jenkins.service
$ sudo systemctl start jenkins.service

不過實際操作過程中,可能會出現停用失敗的情況,我的做法是直接開啟活動監視器,在裡面搜java服務,強制關閉掉;這裡需要注意,如果服務沒有停止再進行jenkins開啟是不成功的,提示會告訴你已經在用:

image_1c0pu09in491qq31bqs25f1hbg26.png-222.9kB

如果你想檢視是否jenkins在執行,使用命令檢視:

$ ps aux | grep jenkins

關卡3 :

安裝並開啟完成就可以在瀏覽器裡輸入localhost:8080

進行頁面化配置了;
安裝完成之後,Safari可能會自動開啟,如果沒有自動開啟,開啟瀏覽器,輸入http://localhost:8080
image_1c0pvjgjqfbg3i01c371uhc1ves2j.png-27.6kB

這個時候可能會報一個錯誤。如果出現了這面的問題。出現這個問題的原因就是Java環境有問題,重啟Java環境即可。

這個時候如果你重啟電腦會發現Jenkins給你新增了一個使用者,名字就叫Jenkins,不過這個時候你不知道密碼。你可能會去試密碼,肯定是是不對的,因為初始密碼很複雜。這個時候正確做法是開啟http://localhost:8080 會出現下圖的重設初始密碼的介面。

image_1c0pvl71n5dulcc413164i1hcp30.png-30.4kB

按照提示,找到/Users/Shared/Jenkins/Home/ 這個目錄下,這個目錄雖然是共享目錄,但是有許可權的,非Jenkins使用者/secrets/目錄是沒有讀寫許可權的。

image_1c0pvm8al1tce1iled5voi216ac3d.png-200.2kB

開啟initialAdminPassword檔案,複製出密碼,就可以填到網頁上去重置密碼了。如下圖

image_1c0pvp2p01fon1h2mmvjs6s1fuj3q.png-99.6kB

一路安裝過來,輸入使用者名稱,密碼,郵件這些,就算安裝完成了。

還是繼續登入localhost:8080

然而這一關還沒有結束:
寫blog的時候我把自己設定的帳號登出了,然而當時設定的密碼卻忘記了,怎麼都想不起來,怎麼辦呢?
首先我想能不能用之前給的Jenkins帳戶呢,經試錯,未果;
接下來上百度查了幾種方法,有的方法很複雜,不打算用,我們只用最簡單粗暴的;只要之前的帳號資訊沒有丟失,又可以進入系統就OK了,於是:

image_1c0q0bnonde9a9omqa1092a1747.png-85.9kB

注意實際操作過程中發現不是/User/Shared/Jenkins/Home下的config.xml,也不是/User/Shared/Jenkins/Home/users下的config.xml,而是你自己使用者目錄~/.jenkins/下的config.xml,具體原因可能是jenkins執行的工作空間是當前使用者目錄下的.jenkins,然後就是這樣:

image_1c0q277tu152r9mg1dhg1edq8jp5q.png-55.9kB

經檢驗,無誤,可進入,但是好像遺留了一個問題,就是這樣進入的話就找不到管理使用者的選項了;解決問題,勾選圖中黃色圈,返回系統管理,出現管理使用者(還是個隱藏道具);
image_1c0q3ukis1vlhib71uij1729ohs67.png-33.1kB

image_1c0q419b0164pqfe25d9br1fpt74.png-39.8kB

image_1c0q42m3mvf41d8fjs21ptb1ae77h.png-11.4kB

搞的像是特工登入非授權帳戶一樣,不管怎麼說,總算是攻破了,進入下一關;

關卡 4:

先不管工程構建裡那一堆設定,我們先來搞一下證書Cer,鑰匙Keychain,配置檔案Provisioning Profiles的一些問題:
首先去系統管理 -> 管理外掛 -> 可選外掛,搜尋並安裝Keychains and Provisioning Profiles Management外掛;
進入外掛:
image_1c0qeblep1tcj4m319ap1bek783ah.png-31.1kB

不要關鍵去填下面的空,我會告訴你這是一道有選項的題目;進入檔案目錄,Command + shift + G,寫下這樣的路徑~/資源庫/Keychains

image_1c0qekdqp9v712rd1gefjdr1fdcbe.png-62.2kB

這裡我們把login.keychain-db上傳到Jenkins裡,但是Upload並不能上傳這樣字尾的檔案,所以需要你手動把login.keychain-db修改成login.keychain(複製後再修改,以防止其他地方會引用到帶-db);上傳完成後就會在下面出現你一些資訊;然後開啟你的鑰匙串,這個知道在什麼地方吧;

image_1c0qet898q8m118mk2s6kj1cq5eb.png-131kB

點選打包所用到的證書,將紅色框中的名稱複製出來,新增到identities中;

image_1c0qf02rofnpc3r121c1nlb1mqteo.png-42.7kB

如果有多個,則點選Add Code Signing Identity新增;

然後是PP檔案,這些檔案需要我們從系統PP資料夾下複製到Jenkins資原始檔夾下,如下圖兩個路徑:
這個是系統PP檔案目錄
image_1c0qkdte41j1rgq81k8v1bi19f4f5.png-144.2kB
這個是Jenkins PP檔案目錄
image_1c0qkkk833p0nt18andthn9qfi.png-79.2kB

Provisioning Profiles Directory Path 填寫成,注意替換為自己的username:

/User/{USERNAME}/Library/MobileDevice/Provisioning Profiles

接著去你蘋果帳號裡去找你對應打包所需要的PP檔案,然後點upload上傳到Jenkins環境裡;
以上,證書部分解決;

關卡 5

建立專案過程我們會對各個需要的項進行逐個描述:
點新建專案,輸入專案名稱,選擇 構建一個自由風格的軟體專案,然後確定,進入配置頁面。
image_1c0ql3ppk1bht1b5ms4hcui1jpjfv.png-8.2kB

  • General
    這個部分的內容都很淺顯,沒有什麼可以說的,根據需要自行填充;這裡說一下GitLab connection選項,因為我自己的工程是用gitlab管理的程式碼,所以需要在Jenkins裡下一個Gitlab的外掛,然後在裡面進行帳號配置,可以採用帳號密碼以及SSH的方式,具體這個部分會有一個SSH的坑,先不作分析,後面會講到,我這裡先用帳號密碼的方式進行構建,經檢驗發現SSH方式非必要;

Credentials在這裡配置:
image_1c0qljaq610ljc02k6g1r821fs5gc.png-78.2kB

  • 原始碼管理
    這裡我選的Git,Repository URL填你工程的git地址,選用帳號密碼的形式應該是以http或https開頭的,Credentials填你在上一步中新建好的,
    image_1c0qlt20313duogl2g51hp11nqsgp.png-73kB
    Branch Specifier (blank for ‘any’) 填你要進行構建的分支,我這裡是*/release

這裡我們PS一個隱藏BOSS:

returned status code 143 jenkins
ERROR: Error fetching remote repo ‘origin’

這個報錯是工程配置結束後進行構建後提示的,我當時搞這個發現遠端程式碼明明是已經拉取到本地的,只是在拉取過程中會發生中斷,本人在進行了將近50次試錯後發現這個拉取到本地的程式碼率是變化的,先前以為是SSH帳號的問題,於是轉頭花了一天的時間搞了下SSH,後來SSH搞通後發現該問題仍然存在,後來終於在經歷百度,谷歌,搜狗也用上的(不得不說有時候百度搜不出來的搜狗能搜到),發現了幾篇有用的,後來解決,也算是不負辛苦,後面有踩坑的夥伴多注意,前車之鑑後事之師;

解決方案就在於這個Timeout,相信你看了這個單詞就知道是怎麼回事了:
image_1c0qmnlafh2p1j571b4ettv1ncah6.png-74.3kB

另順便粘一個code 128的連結,是個與該問題相關的問題,因為這些問題關鍵字有的重複,所以搜出來的文章有時會誤導,所以請仔細辨別:

returned status code 128 jenkins
ERROR: Error cloning remote repo 'origin'
stderr: Permission denied (publickey).