安裝Jenkins
安裝jenkins方法有兩種:
1,使用homebrew安裝.
2,直接下載安裝包安裝;
方法一:使用homebrew命令行安裝
安裝homebrew
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
安裝Jenkins
$ brew install jenkins
啟動(dòng)jenkins
$ jenkins
方法二:使用安裝包安裝
下載安裝包地址:Download Jenkins
選擇對(duì)應(yīng)的系統(tǒng)安裝包,我用的是mac所以選擇Mac OSX
安裝后會(huì)自動(dòng)打開http://localhost:8080/,如果是brewhome安裝,請(qǐng)瀏覽器中手動(dòng)打開該網(wǎng)址:
http://localhost:8080/
jenkins默認(rèn)端口號(hào)為:8080,如果端口沖突請(qǐng)修改端口號(hào):
$ default write /Library/Preferences/org.jenkins-ci httpPort xxxx
注意: xxxx為你要修改的端口號(hào).
第一次進(jìn)入http://localhost:8080/ ?頁(yè)面會(huì)要求輸入初始密碼:
使用終端按照上面的路徑獲取密碼,這里使用的是cat命令獲取(如需權(quán)限請(qǐng)使用sudo cat):
sudo cat /Users/Shared/Jenkins/Home/secrets/initialAdminPassword
進(jìn)入選擇是否安裝插件頁(yè)面,一般情況下選擇第一個(gè)(安裝建議的插件),第二個(gè)是自定義安裝插件.
選擇后進(jìn)入插件安裝頁(yè)面,這時(shí)一般都會(huì)有些插件安裝失敗,不過(guò)這沒有關(guān)系,因?yàn)檫M(jìn)入jenkins后還可以重新把安裝失敗的安裝一遍.
注意: 有時(shí)候回出現(xiàn)安裝插件時(shí)怎么都不動(dòng)的情況,如果很久都不動(dòng)也不要傻傻的等在那里浪費(fèi)時(shí)間,只需要關(guān)機(jī)重啟一下就好了(會(huì)跳到注冊(cè)頁(yè)面).
點(diǎn)擊continue進(jìn)入注冊(cè)第一個(gè)管理員賬戶頁(yè)面:
填寫完信息,保存,會(huì)進(jìn)入完成頁(yè)面,點(diǎn)擊開啟進(jìn)入下面頁(yè)面:
插件安裝
因?yàn)槲沂谴驈膅itlab管理源碼并打ios包,然后發(fā)布到fir上面,所以需要以下插件:
1,gitLab Plugin
2,gitLab Hook Plugin
3,Xcode integration
4,keychains and provisioning profiles Management
5,CocoaPods Jenkins Integration
6,build Timeout
7,description setter plugin
8,Email Extension Plugin
9,SSH Agent Plugin
10, workSpace Cleanup Plugin
11,fir-Plugin
進(jìn)入Jenkins界面后,點(diǎn)擊系統(tǒng)管理:
會(huì)進(jìn)入管理頁(yè)面,你會(huì)看到這個(gè)頁(yè)面有一片紅,不要緊張,這里就是提示的上面安裝時(shí)哪些插件安裝失敗了.
在該頁(yè)面向下劃選擇管理插件:
進(jìn)入插件選擇頁(yè)面:
選擇插件點(diǎn)擊直接安裝進(jìn)入安裝頁(yè)面:
有些會(huì)安裝失敗,沒關(guān)系,按照上面多安裝幾次就好了.這時(shí)可以按照此方法,吧上面的一片紅一個(gè)一個(gè)安裝.
但是有些插件在上面是搜不到的,例如fir-Plugin,那只能自己去下載fir-Plugin然后使用高級(jí)方法安裝.
fir插件下載(插件修復(fù)文件)
注意:新版本的fir插件默認(rèn)要上傳dysm file文件,舊版本的默認(rèn)不上傳,這里使用舊版本,不然會(huì)報(bào)錯(cuò),如果報(bào)錯(cuò)換回舊版本就好了
Deployment failed : Prefix string too short
Build step 'Upload to?fir.im' marked build as failure
下載插件后進(jìn)入插件管理->高級(jí)選項(xiàng),然后找到上傳插件,選擇已下載好的fir-plugin.hpi插件.并點(diǎn)擊上傳等待安裝成功,
ps: 安裝完成插件后可以重啟Jenkins,關(guān)于Jenkins服務(wù)關(guān)閉和重啟方法:
關(guān)閉Jenkins服務(wù): ?在Jenkins服務(wù)器網(wǎng)址后面加上exit ? ?http://localhost:8080/exit
重啟Jenkins服務(wù): ?在Jenkins服務(wù)器網(wǎng)址后面加上restart ? ?http://localhost:8080/restart
創(chuàng)建任務(wù)
源碼管理
我這里是用git管理的源碼,所以選擇git:
這個(gè)時(shí)候會(huì)報(bào)錯(cuò),沒有權(quán)限訪問(wèn)git倉(cāng)庫(kù),因?yàn)檫@是私有倉(cāng)庫(kù),所以需要配置SSH獲取訪問(wèn)權(quán)限.
配置SSH需要在git上和Jenkins都要配置.因?yàn)镴enkins系統(tǒng)使用的是Jenkins這個(gè)系統(tǒng)賬號(hào),所以需要使用jenkins賬戶這個(gè)SSH.
切到j(luò)enkins賬號(hào)生成新的ssh密鑰,公鑰在上傳的git服務(wù)器就好了
1,打開終端名為jenkins的用戶,并設(shè)置一個(gè)密碼
sudo dscl . passwd /Users/jenkins ?
設(shè)置jenkins的密碼:
2,切換到j(luò)enkins用戶
su jenkins
出現(xiàn)以下提示,表示切換成功
3,以jenkins用戶身份生成ssh key
ssh-keygen -t rsa -C "你的郵箱標(biāo)識(shí)"
4,把公共密鑰放到git服務(wù)器, jenkins 私鑰,jenkins.pub 公鑰?
獲取公鑰
$?cat /Users/Shared/Jenkins/.ssh/id_rsa.pub
5,將私鑰放到j(luò)enkins中進(jìn)行創(chuàng)建Credentials
私鑰獲取
$cat /Users/Shared/Jenkins/.ssh/id_rsa
點(diǎn)擊保存
回到剛剛創(chuàng)建的項(xiàng)目,點(diǎn)擊配置
點(diǎn)擊保存,進(jìn)行構(gòu)建
構(gòu)建完成查看結(jié)果
看到success證明構(gòu)建成功, 這所名已經(jīng)可以從gitlab上面正常拉去代碼了,第一步成功
Jenkins賬戶下進(jìn)行更換ruby源
因?yàn)樾枰聀od文件,所以要把jenkens賬戶下的ruby源更換成淘寶的ruby源(首先要切換到j(luò)enkins賬戶下)
# 刪除默認(rèn)的官方源
gem sources -r?https://rubygems.org/
# 添加淘寶源
gem sources -a?https://ruby.taobao.org/
# 查看當(dāng)前源
gem sources -l ? ? ? ? ? ? ? ? ? ? ??
如果不更新,pod會(huì)出錯(cuò)
Cloning spec repo `master` from `https://github.com/CocoaPods/Specs.git` (branch `master`)
? $ /usr/bin/git clone https://github.com/CocoaPods/Specs.git master --progress
? Cloning into 'master'...
? fatal: unable to access 'https://github.com/CocoaPods/Specs.git/': SSLRead() return error -9845
[!] Unable to add a source with url `https://github.com/CocoaPods/Specs.git` named `master`.
(/usr/bin/git clone https://github.com/CocoaPods/Specs.git master --progress
Cloning into 'master'...
fatal: unable to access 'https://github.com/CocoaPods/Specs.git/': SSLRead() return error -9845
)
You can try adding it manually in `~/.cocoapods/repos` or via `pod repo add`.
PATH配置:
如果出現(xiàn)以下問(wèn)題:1.pod:command not found, 2:wget:command not found 這類問(wèn)題,可通過(guò)配置PATH解決,如果沒有這樣的問(wèn)題,可不配置.
配置: 終端輸入$PATH,得到path如下
打開Jenkins->系統(tǒng)管理->系統(tǒng)設(shè)置->全局屬性->Environment variables->鍵值對(duì)列表中設(shè)置
構(gòu)建
打包腳本
echo 'start build TestDemo'
pwd
whoami
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
#工程環(huán)境路徑
workspace_path=.
#項(xiàng)目名稱
project_name=FamilyDoctor
echo"第一步寻咒,更新庫(kù)文件"
/usr/local/bin/pod update --verbose --no-repo-update
echo "第二步职祷,清除緩存文件...................."
xcodebuild clean
rm -rf archive
rm -f $project_name.ipa
echo "第三步滓走,設(shè)置打包環(huán)境囚似,準(zhǔn)備開始打ipa包...................."
sed -i '' 's/\app-store\<\/string\>/\development\<\/string\>/' archieveOpt.plist
sed -i '' 's/ProvisioningStyle = Automatic;/ProvisioningStyle = Manual;/' $project_name.xcodeproj/project.pbxproj
echo "第四步踪央,執(zhí)行編譯生成.app命令"
xcodebuild archive -workspace $project_name.xcworkspace -scheme $project_name -configuration Release -archivePath archive/$project_name.xcarchive CODE_SIGN_IDENTITY="iPhone Developer: xxxx Wu (xxxxx)" PROVISIONING_PROFILE_SPECIFIER="development_patient_kevin"
echo "第五步顾画,執(zhí)行編譯生成.ipa命令"
xcodebuild -exportArchive -exportOptionsPlist archieveOpt.plist -archivePath archive/$project_name.xcarchive -exportPath ./ -configuration Release
xcodebuild這是apple提供給我們的編譯打包命令, 可以看到這里xcodebuild 使用了三次,
?第一次是是清除文件,
第二次是設(shè)置編譯打包的參數(shù),
第三次是設(shè)置輸出目錄等
解釋:
1,$project_name是聲明的項(xiàng)目名稱變量,例如project_name="A",這樣在腳本中所有出現(xiàn)的$project_name都會(huì)被替換成A.
2,-workspace 指明的是工作空間的名稱,如果指明了這個(gè)參數(shù),那就必須指明-scheme參數(shù).
3,-configuration Release這個(gè)不是必須的,因?yàn)槟J(rèn)打的就是Release包,如果想打Debug包可以單獨(dú)設(shè)置.
4,-archivePath archive/$project_name.xcarchive 根據(jù)需要指定打包路徑,其中擴(kuò)展名記得要是.xcarchive
archive命令用于告訴編譯器,這里是要執(zhí)行打包命令,archivePath指定打包路徑
5,CODE_SIGN_IDENTITY,它指明的是證書的標(biāo)識(shí),這個(gè)可以從鑰匙串中拷貝,有一點(diǎn)需要注意,我們需要將自己的開發(fā)證書先拷貝到系統(tǒng)證書中,這是因?yàn)殍€匙串中的證書,擁有者是管理者,不是jenkins用戶,jenkins用戶是沒有權(quán)限操作證書的,拷貝到系統(tǒng)下面,jenkins用戶就有權(quán)限了.
6,PROVISIONING_PROFILE_SPECIFIER看名字就知道是profile文件,同上我們需要將管理員目錄中的profile拷貝到j(luò)enkins的profile目錄中,其中管理員的profile目錄在:
/users/$用戶名/library/MobileDevice/Provisioning\ Profiles($用戶名一般是你電腦的名字,如我的是lei).
jenkins的profile目錄位于(如果沒有相應(yīng)的目錄自己創(chuàng)建):
/users/shared/library/MobileDevice/Provisioning\ Profiles(如果沒有訪問(wèn)權(quán)限,記得使用sudo獲取權(quán)限)
ps如果不確定對(duì)應(yīng)的profile是哪個(gè),就刪掉所有的profile,安裝對(duì)應(yīng)的.
7,-exportOptionsPlist archieveOpt.plist這里的archieveOpt.plist是我們?cè)诠こ棠夸浵滦陆ǖ?plist文件,該文件指明打包的類型和teamid.
位置如圖:
.plist內(nèi)容:
provisioningProfile是xcode9必須的,不然會(huì)打包失敗,xcode9以前不用加.
teamID就是打包使用的證書的teamID
method對(duì)應(yīng)的是打包了類型,一般有development,app-store,ad-hoc,enterprise等選項(xiàng)可供選擇.
8,-exportPath ./指明ipa的輸出目錄就在當(dāng)前目錄.(可根據(jù)需要調(diào)整)
進(jìn)行構(gòu)建可成功打出ipa包,可去當(dāng)前目錄下查看
上傳fir
1,點(diǎn)擊構(gòu)建后操作.添加upload to fir
2,fir.im Token是必填的,查看方法:請(qǐng)登錄fir.im后翎迁,點(diǎn)擊頭像選擇API token進(jìn)行查看
3,2.IPA/APK Files(可選)
接下來(lái)祈坠,選擇生成 ipa/apk 文件路徑
注意:如果沒有填寫該選項(xiàng),插會(huì)件自動(dòng)默認(rèn)查找 Jenkins 創(chuàng)建的項(xiàng)目目錄下的 apk/ipa 文件
4,Build Notes(可選)
作用:上傳 fir.im 后瘩例,可顯示出更新日志
添加描述和鏈接
上傳fir后肯定想顯示一個(gè)鏈接,能直接跳到fir的二維碼頁(yè)面
添加set build description
構(gòu)建后會(huì)出現(xiàn)如下效果:
可以看出顯示的是html格式,并不是可以點(diǎn)擊的鏈接,這是因?yàn)閖enkins沒有設(shè)置支持html語(yǔ)法,需要在
jenkins->系統(tǒng)管理->configure global security->Markup Formatter中選擇"safe HTML"就可以了.
效果如下:
至此打包完成.?