jenkins自動化打包

自動化打包

使用的工具是jenkins,Jenkins 是一個開源項目,提供了一種易于使用的持續集成系統,主要用于自動化打包

安裝

命令行安裝

$ brew install jenkins

卸載

$ brew uninstall jenkins

初始化配置

啟動jenkins

$ jenkins

在瀏覽器中配置jenkins,

初始化配置
瀏覽器輸入localhost:8080

這樣就打開Jenkins管理頁面了,此時有一個默認的管理員jenkins,瀏覽器進入重置密碼頁面


initpsw.png

初始密碼在/Users/dyn/.jenkins/secrets/initialAdminPassword(初始化完成后自動消失)
然后就是如下圖片,依次選擇即可

install.png
started.png
創建用戶
createAccount.jpg

輸入用戶名,密碼,郵件這些,就算初始化配置完成了

安裝需要的插件

安裝插件的位置:系統管理->管理插件,在“可選插件”

GitLab插件

用來管理源代碼,位置:“可選插件”列表中“GitLab Plugin”和“Gitlab Hook Plugin”兩項

Xcode插件

用于完成xcode命令打包,位置在“可選插件”列表中“Xcode integration”選項

簽名證書管理插件

用于iOS打包內測版時,需要發布證書及相關簽名文件,位置在“可選插件”中選中“Credentials Plugin”和“Keychains and Provisioning Profiles Management”兩項。

腳本插件

用于在build后執行相關腳本。位置在“可選插件”中選中“Post-Build Script Plug-in”選擇。

設置apple development證書

新建任務及打包

新建任務

安裝完插件后的頁面如下:


new.jpg

點擊創建一個新任務來開始第一個項目


itemName.jpg

選擇第一個 “構建一個自由風格的軟件項目”

任務配置

選中任務名->配置

基本信息,這里可以設置包的保留天數還有個數。(可略過)。見下圖
git.png
源碼管理,設置代碼的獲取方式
git.png

]
Repository URL:項目的git地址
Add按鈕:進行認證權限,就是添加git的用戶名密碼


gitAccount.png

填寫好用戶和密碼,點擊下面的Add按鈕,然后Credentials下拉框就會出現這個用戶

下載代碼

此時保存,然后選擇立即構建,就可以下載代碼

ios構建版本配置

構建觸發器

autobuild.png

定時自動打包的配置,

具體寫法參見http://blog.csdn.net/e295166319/article/details/52920036

構構建環境(掠過)

構建(添加構建步驟)

選擇xcode就是使用xcode 命令行打包

選擇execute shell 就是使用運行shell腳本打包

xcode 命令行打包配置,參見本地jenkins服務器的test1項目
target.png

需要選擇的選項介紹
Target:就是我們在項目中建立的Target

命令行查看所有target

xcodebuild -list

Clean before build?:

編譯前是否clean一次,一般是選擇YES,也可不選

Configuration:

對應的是xcodebuild命令里的-configuration的參數,可選項為[Debug、Release],一般都填Debug

Pack application and build .ipa?:

結束時是否要產生對應的ipa文件,選中即可

.ipa filename pattern:

配置ipa的文件名,比如${VERSION}_${BUILD_DATE}

其中${VERSION}和${SVN_REVISION}都是可以直接用的環境變量,所有可用的環境變量地址為:http://localhost:8080/env-vars.html

Output directory:

配置ipa的輸出目錄。比如$WORKSPACE/build/ipa-build

證書配置
development.png

Development Team ID :團隊id,在keychain的distrubution證書名稱的()中就是
Keychain path 固定路徑

Keychain password:應該是p12文件密碼

Advanced Xcode build options

Xcode Schema File:對應的是xcodebuild命令中的-scheme的參數
Xcode Workspace File:xcodebuild中的-workspace的變量,是.xcworkspace的文件路徑,從工程總文件夾開始寫,切無后綴名
Xcode Project Directory:同理是單工程的工程文件名,無后綴名
Build output directory:ipa的路徑

shell打包腳本

特點:自動讀取參數配置文件
自動循環打包
參考本地jenkins服務器的項目shelldemo

#獲取當前工程路徑,即工程的總文件夾
projectPath=$PWD
echo  $projectPath

#工程名
projectName="ElinkIphoneClientApp"
projectPath=${projectPath}/${projectName}
#target名字
targetName="ElinkIphoneClientApp"

#fir的api token
apiToken="ceea173a583a842243b7d08af5a0a870"

#配置文件路徑
configPath=${projectPath}/buildConfig.txt

#plist文件路徑
appInfoPlistPath=${projectPath}/${projectName}/Info.plist
#配置文件相關
#服務器地址key
serviceURLKey="serviceURL"

#顯示名稱key
displayNameKey="name"

#開發證書的key
developmentCodeSignIdentifyKey="developmentCodeSignIdentify"

#開發證書的描述文件key
developmentProvisionProfileKey="developmentProvisionProfile"

#發布證書的key
appstoreCodeSignIdentifyKey="appstoreCodeSignIdentify"

#發布證書的描述文件Key
appstoreProvisionProfileKey="appstoreProvisionProfile"

#默認服務器地址
serviceURLStr="http://www.xaelink.com:8096"

#顯示名稱.默認是工程名
displayName=$projectName

#開發證書名稱
developmentCodeSignIdentify=""


#開發證書的描述文件
developmentProvisionProfile=""

#發布證書
appstoreCodeSignIdentify=""

#發布證書的描述文件
appstoreProvisionProfile=""



#打印plist文件內容
#/usr/libexec/PlistBuddy -c "print" ${appInfoPlistPath}

#讀取配置文件內容.并以此替換plist 文件,然后打包
cat ${configPath} | while read line

do

#獲取等號左邊的值
tempKey=${line%%=*}
#服務器地址
if [ "${serviceURLKey}" == "${tempKey}" ] ; then

serviceURLStr=${line##*=}
echo "serviceURLStr=${serviceURLStr}"

#替換plist 文件的ServicesURLStr字符串

/usr/libexec/PlistBuddy -c "set :ServicesURLStr $serviceURLStr" ${appInfoPlistPath}


#程序顯示名稱
elif [ "${displayNameKey}" == "${tempKey}" ] ; then

displayName=${line##*=}
echo "displayName=${displayName}"
#替換plist 文件的應用程序名
/usr/libexec/PlistBuddy -c "set :CFBundleDisplayName $displayName" ${appInfoPlistPath}
/usr/libexec/PlistBuddy -c "set :CFBundleName $displayName" ${appInfoPlistPath}

#開發證書名稱
elif [ "${developmentCodeSignIdentifyKey}" == "${tempKey}" ] ; then
developmentCodeSignIdentify=${line##*=}
echo "developmentCodeSignIdentify=${developmentCodeSignIdentify}"

#開發證書的描述文件
elif [ "${developmentProvisionProfileKey}" == "${tempKey}" ] ; then
developmentProvisionProfile=${line##*=}
echo "developmentProvisionProfile=${developmentProvisionProfile}"

#發布證書
elif [ "${appstoreCodeSignIdentifyKey}" == "${tempKey}" ] ; then
appstoreCodeSignIdentify=${line##*=}
echo "appstoreCodeSignIdentify=${appstoreCodeSignIdentify}"

#發布證書的描述文件
elif [ "${appstoreProvisionProfileKey}" == "${tempKey}" ] ; then
appstoreProvisionProfile=${line##*=}
echo "appstoreProvisionProfile=${appstoreProvisionProfile}"


#讀取到最后一個參數后,開始打包
#建立一些需要的文件路徑
basepath=${projectPath}
#編譯輸出文件夾名稱
myfile="autobuild"

#日志文件路徑
logPath="${basepath}/${myfile}/log.rtf"

#編譯模式,debug 還是release,默認是release
configuration="Release"

#工作環境名稱
workspaceName="${projectName}.xcworkspace"

#scheme 名字
scheme="${targetName}"

#build 路徑
configurationBuildDir="${basepath}/${myfile}/build"

#archive路徑
archivepath="${basepath}/${myfile}/archive/${projectName}.xcarchive"

#ipa 文件路徑
#當前時間
qs_date=`date +%Y_%m_%d_%H_%M_%S`

#ipa導出的文件夾路徑,按時間排序
exportpath="${basepath}/${myfile}/ipa/${projectName}_${qs_date}"

#appstore的ipa到處路徑
appstorepath="${basepath}/${myfile}/appstore/${projectName}_${qs_date}"


#導出配置路徑,暫不需要
exportOptionsPlist="${basepath}/${myfile}/DevelopmentExportOptions.plist"

#ipa的真實路徑
ipaPath="${exportpath}/${scheme}.ipa"

#appstore的ipa真實路徑
appstoreipaPath="${appstorepath}/${scheme}.ipa"

cd  ${basepath}
#clear
echo "\033[31m Start Clear!\033[0m" #輸出顏色為紅色的Start Clear!
rm -f $logPath  #強制刪除日志文件
xcodebuild clean -configuration "${configuration}" >> $logPath || exit
echo "\033[31m clear success!\033[0m"


#先打開發者包,上傳到fir上

#打包

echo "\033[31m Start archive!\033[0m"

xcodebuild archive -workspace "${workspaceName}" -scheme "${scheme}" -configuration "${configuration}" -archivePath "${archivepath}"  CODE_SIGN_IDENTITY="${developmentCodeSignIdentify}" PROVISIONING_PROFILE="${developmentProvisionProfile}" >> $logPath || exit
echo "\033[31m archive success!\033[0m"


#導出ipa 包
echo "\033[31m Start export ipa!\033[0m"
echo "exportPath=${exportpath}"

xcodebuild  -exportArchive -archivePath "${archivepath}" -exportPath "${exportpath}" -exportOptionsPlist "${exportOptionsPlist}" >> $logPath || exit

echo "\033[31m Export ipa success!,ipa path :${ipaPath}\033[0m"


#打包發布者包
#上傳到appstore的包,準備上傳
else
echo "-----------"

fi
done

關鍵命令解釋:

PlistBuddy:是Mac自帶的專門解析plist的小工具

PlistBuddy使用詳解

參考網址http://www.lxweimin.com/p/2167f755c47e

使用PlistBuddy打印plist 內容

/usr/libexec/PlistBuddy -c "print" ${appInfoPlistPath}

使用PlistBuddy給plist添加內容

添加字符串

/usr/libexec/PlistBuddy -c 'Add :Version string 1.0' test.plist
Version是鍵
string是類型
1.0是值

添加數組

# 先添加key值
 /usr/libexec/PlistBuddy -c 'Add :ApplicationInfo array' test.plist 
# 添加value值
 /usr/libexec/PlistBuddy -c 'Add :ApplicationInfo: string app1' test.plist 

 /usr/libexec/PlistBuddy -c 'Add :ApplicationInfo: string app2' test.plist 

添加字典

# 先添加key值 
/usr/libexec/PlistBuddy -c 'Add :Person dict' info.plist 

# 添加value值
 /usr/libexec/PlistBuddy -c 'Add :Age string secret' info.plist
 
 /usr/libexec/PlistBuddy -c 'Add :Name string yans67' 
  info.plist 

PlistBuddy替換plist已有鍵值的內容

/usr/libexec/PlistBuddy -c "set :CFBundleDisplayName $displayName" ${appInfoPlistPath}

-c:意思是執行后面“”內的命令
CFBundleDisplayName:是plist 存在的鍵
$displayName:是新的值
${appInfoPlistPath} :plist 文件內容

刪除某個字段

/usr/libexec/PlistBuddy -c 'Delete :Version' info.plist

讀取配置文件詳解

shell使用cat逐行讀取文件內容

cat ${configPath} | while read line

獲取cat 當行的文本內容

獲取等號左邊的值
tempKey=${line%%=*}

獲取等號右邊的值

serviceURLStr=${line##*=}

打包命令詳解:

項目的總文件夾路徑

project_path=$(pwd)

指定打包的sdk名稱

sdk="iphoneos9.3"

指定打包的target名稱

target="PictureTest"

指定項編譯環境 Release Debug

configuration="Release"

指定要打包的證書

# code_sign_identity="iPhone Developer: lei zhang (HWQV7JV39T)"

指定打包所使用的provisioning profile名稱

# provisioning_profile="14765a74-1d60-4697-a38b-2183ac1dcfb3"
provisioning_profile="64f58c03-4649-405c-9c5a-c2d8a6527aa9"

指定輸出ipa地址

ipa_path="${project_path}/${target}_${now}.ipa"
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,923評論 6 535
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,740評論 3 420
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,856評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,175評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,931評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,321評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,383評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,533評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,082評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,891評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,067評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,618評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,319評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,732評論 0 27
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,987評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,794評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,076評論 2 375

推薦閱讀更多精彩內容