新聞ios
Keychain和證書(shū)的坑:jenkins安裝之后會(huì)自動(dòng)生成一個(gè)jenkins賬號(hào).但是我們當(dāng)時(shí)是在ios賬號(hào)下工作,必須把keychain和證書(shū)拷貝到j(luò)enkins的文件夾下,才能有權(quán)限讀取.
Schema:當(dāng)時(shí)一直報(bào)錯(cuò)說(shuō)沒(méi)有schema文件,后來(lái)在xcode中,把我們需要的schema文件勾選中就解決了.
打包仍然不成功,查問(wèn)題發(fā)現(xiàn)是xcode的版本和ios系統(tǒng)沒(méi)有更新.于是更新了一下ios和xcode版本.這一下不要緊,jenkins的主目錄從系統(tǒng)共享下的jenkins文件夾變成了ios賬號(hào)下的.jenkins文件夾. 所以進(jìn)去之后發(fā)現(xiàn)所有的配置全部清零了.但當(dāng)時(shí)并不知道是因?yàn)閖enkins的主目錄更換了. 所以又重新配了一遍所有的環(huán)境和證書(shū).
然后這時(shí)ssh校驗(yàn)又通過(guò)不了了.跟以前的配置一摸一樣完全沒(méi)有改動(dòng),但怎么都報(bào)錯(cuò).在terminal中用ssh -T 去連接卻是通的.這時(shí)候又崩潰了.根據(jù)報(bào)錯(cuò)查了很多資料,但是很多情況都會(huì)報(bào)這種錯(cuò)誤,根本沒(méi)法定位到問(wèn)題.最后也是在一個(gè)英文的犄角旮旯的網(wǎng)站上看到說(shuō),如果mac的系統(tǒng)更新了,jenkins必須退出重啟服務(wù),ssh才能連上.重啟之后果然好了...
archive成功了,但生成包不成功.在jenkins控制臺(tái)輸出的日志中,直接原樣copy命令在terminal中可以打包成功.最后也是找了很多很多資料,嘗試了很多修改,都快要放棄了,打算執(zhí)行命令行打包了.然后想到在jenkins中xcode的插件一直被人詬病說(shuō)不穩(wěn)定,于是上插件那里看了一下,發(fā)現(xiàn)正好有xcode插件的新版本需要更新.于是更新了一下.更新完之后打包成功…應(yīng)該是因?yàn)閤code剛更新了一個(gè)版本,但我的插件沒(méi)有更新,所以用插件打包導(dǎo)致失敗.
其實(shí)ios的坑遠(yuǎn)不止這些,從一開(kāi)始打包就是一直各種報(bào)錯(cuò),不通過(guò),這些雷都一一踩過(guò)來(lái)了.并且今后的打包也一定會(huì)存在各種各樣因?yàn)閕os系統(tǒng)更新和xcode版本產(chǎn)生的問(wèn)題.所以,坑無(wú)止境.
新聞android
因?yàn)閍ndroid和ios的代碼在同一個(gè)gitlab下部署的,訪問(wèn)賬號(hào)一個(gè)是lian哥的,一個(gè)是liao妹子的.所以本機(jī)必須配兩個(gè)ssh,創(chuàng)建config文件指定訪問(wèn)關(guān)系.
裝環(huán)境的時(shí)候,我直接按照網(wǎng)上說(shuō)的下載了android的sdk和gradle的最新版本.但是后來(lái)開(kāi)發(fā)說(shuō)他們安卓的代碼必須用gradle3.3打包才可以.他們有指定了gradle的版本,其他版本是打不過(guò)的.于是就用了gradlew build命令去打包,這個(gè)命令會(huì)自動(dòng)去下載gradle3.3版本,和依賴(lài)包.但是也是一直打包失敗.以為是gradle版本的問(wèn)題,因?yàn)橹芭淞谁h(huán)境變量,指定了gradle的文件夾,所以決定把4.9的版本刪除掉.但是刪除之后,每次一build,就會(huì)在ios賬號(hào)下生成.gradle文件夾,然后去下載一些4.9的東西.也是把4.9的東西能刪的都刪了,環(huán)境變量也刪了,結(jié)果一 -v 每次出來(lái)都是4.9的版本信息.最后開(kāi)發(fā)說(shuō)這個(gè)應(yīng)該是不影響3.3的下載和打包的.于是在打包時(shí)加了—info和--debug來(lái)查看打包的具體情況,發(fā)現(xiàn)是在下載某個(gè)依賴(lài)包時(shí),總是循環(huán)一個(gè)建立連接,鎖定,解除鎖定的步驟.一直循環(huán)就是無(wú)法下載成功.找不到問(wèn)題所在.開(kāi)發(fā)說(shuō),他的linux機(jī)器沒(méi)問(wèn)題.但后來(lái)他發(fā)現(xiàn)那臺(tái)機(jī)器打某一個(gè)分支的時(shí)候,跟我報(bào)了一樣的錯(cuò).該分支打包時(shí)的project從master的10個(gè)變成了12個(gè),它需要下載新的依賴(lài)包.于是分析應(yīng)該是下載時(shí),建立連接不成功,網(wǎng)絡(luò)問(wèn)題.這時(shí)又來(lái)一個(gè)坑中之坑.因?yàn)檫@個(gè)報(bào)錯(cuò)之前一條日志,說(shuō)的是開(kāi)始建立ssl連接,于是我們以為是端口限制.之前滕菲跟我說(shuō)過(guò)咱們公司封掉了所有ssh的22端口.而當(dāng)時(shí)另一個(gè)開(kāi)發(fā)說(shuō)可能是封了ssl的443端口.于是我又去找運(yùn)維問(wèn)這件事,并附上了報(bào)錯(cuò)的截圖.運(yùn)維說(shuō),是的,公司封掉了這兩個(gè)端口,你可以自己改一下.然后又在網(wǎng)上找資料修改這兩個(gè)默認(rèn)端口號(hào).改完之后,錯(cuò)誤依舊.于是我想,是不是這臺(tái)機(jī)器的問(wèn)題.因?yàn)殚_(kāi)發(fā)的linux可以打master.于是我又分別在我的筆記本和臺(tái)式機(jī)上進(jìn)行了build.發(fā)現(xiàn)是同樣的報(bào)錯(cuò).排除了機(jī)器本身問(wèn)題.然后我對(duì)自己說(shuō),能做的都做了啊,現(xiàn)在的問(wèn)題已經(jīng)不是我能解決的了,先放下避免浪費(fèi)時(shí)間.結(jié)果轉(zhuǎn)天開(kāi)發(fā)就跟我說(shuō)他之前失敗的分支可以打成功了.于是我上去試了一下,之前下載依賴(lài)包那里果然過(guò)去了.嗯,就是咱們公司網(wǎng)絡(luò)問(wèn)題.樓下的鍋.
本著好奇害死貓的精神,最后讓我找到了gradle的主目錄.原來(lái)這個(gè)蘋(píng)果系統(tǒng)是搭建在unix系統(tǒng)下的,在蘋(píng)果系統(tǒng)以外unix的某個(gè)文件夾下安裝著gradle4.9.
下面這個(gè)命令可以顯示本機(jī)的gradle的安裝路徑
brew info gradle
但這我事先并不知道,而是在多次嘗試中碰巧發(fā)現(xiàn)了這個(gè)命令執(zhí)行后在某個(gè)位置輸出了gradle的路徑.
馬上干掉它! 然后再-v一下,好了.現(xiàn)在是3.3版本了.
視頻android
- 視頻安卓版本打包也有一個(gè)坑.就是ssh的連接.因?yàn)橛辛酥耙粋€(gè)機(jī)器實(shí)現(xiàn)生成多個(gè)ssh匹配不同賬號(hào)的經(jīng)驗(yàn),于是直接上了config文件把配置加進(jìn)去了.然后發(fā)現(xiàn),連接失敗.這個(gè)連接失敗的報(bào)錯(cuò)啊,跟之前ssh的問(wèn)題一樣,錯(cuò)誤很簡(jiǎn)單,就是聯(lián)不通,但是錯(cuò)誤產(chǎn)生的原因是多種多樣的,你很難在網(wǎng)上找到屬于你的那個(gè)答案.在看了很多個(gè)回答和做了很多種嘗試之后,依然是連接不上的.這個(gè)時(shí)候,先排除ssh key的問(wèn)題.因?yàn)橐曨l的代碼是他們自己搭的在一個(gè)gerrit的平臺(tái)上,跟github不沖突,所以我直接把ssh配成了之前本機(jī)最原始的ssh,然后把config文件改了一個(gè)亂七八糟的名字.這個(gè)時(shí)候ssh應(yīng)該是不會(huì)去訪問(wèn)這個(gè)config文件了,然后驚喜的發(fā)現(xiàn)這一次連接成功了.那么就一定是config文件配的有問(wèn)題.但是又并不知道問(wèn)題在哪里.也是多方查找config文件的模版,終于讓我找到一個(gè)人說(shuō),如果有端口號(hào)的話需要配置Port參數(shù).是的,視頻的git地址是帶端口號(hào)的.這個(gè)端口號(hào)在host參數(shù)上直接在域名后面掛上冒號(hào)端口號(hào),可能是不識(shí)別的.于是果斷加上Port參數(shù).然后就,真的成功了…所以,當(dāng)本機(jī)需要指定多個(gè)ssh時(shí),在config文件中,如果訪問(wèn)地址有指定的端口號(hào),需要增加Port參數(shù),否則會(huì)訪問(wèn)失敗.
其他:
剛裝上jenkins之后,發(fā)現(xiàn)連網(wǎng)線的機(jī)器可以正常訪問(wèn),但無(wú)線網(wǎng)的筆記本都無(wú)法訪問(wèn).各種猜測(cè)和嘗試之后都不好使,于是決定改一下端口號(hào).網(wǎng)上能搜到的普遍的改端口號(hào)的方法對(duì)這臺(tái)服務(wù)器都無(wú)效.改了很多次,最后找了一個(gè)不一樣的方法,強(qiáng)制在啟動(dòng)時(shí)修改端口號(hào),成功.并且改了端口號(hào)之后,無(wú)線網(wǎng)的機(jī)器也真的能訪問(wèn)了...
Jenkins默認(rèn)的端口號(hào)是8080,修改方法:
1. 打開(kāi)終端蜕乡,cd 到Jenkins的安裝目錄(即jenkins.war所在目錄)顶掉,如:D:\Program Files (x86)\Jenkins
2. 執(zhí)行命令:“java -jar jenkins.war --ajp13Port=-1 --httpPort=8081”
其中8081就是新的端口號(hào),也可以設(shè)置為其他的端口陪踩。用ios-deploy 安裝包
https://segmentfault.com/a/1190000010205616
https://www.npmjs.com/package/ios-deploy
https://testerhome.com/topics/12672
最后用了這個(gè)命令成功:
先獲取duid:
ios-deploy -c
然后先uninstall已安裝的app,再執(zhí)行安裝:
ios-deploy --id XXX -r --bundle_id ifengNews -b /Users/iOS/.jenkins/....../ifengnews.ipa
查看連接設(shè)備
Instruments -s devices