iOS 使用Jenkins持續集成(簡稱CI)

  1. 安裝jenkins
    1.1. 直接到官網下載安裝包,通過安裝包安裝
    1.2. 通過Homebrew使用命令行安裝
1. 安裝Homebrew
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
2. 安裝Jenkins
$ brew install jenkins
3、啟動Jenkins
$ jenkins
  • jenkins需要java環境,如果沒有安裝會有提示,java安裝地址

一切順利的話,打開瀏覽器輸入:http://localhost:8080/就能看到jenkins已經運行起來了,如果你更換了端口就是你后來設置的端口。接下來打開Jenkins后會讓去一個填寫password的頁面如下圖,存儲password的地方就是圖片上那行紅色字體目錄

然后將我們得到的password輸入到Administrator password中,即可進入如下界面,接著安裝一些建議的插件左邊的,安裝過程中,有的插件可能會安裝失敗,強烈建議點擊右下角的重試,直到把建議安裝的都裝好

插件安裝完成后,可能不會自動跳轉,刷新下界面即可,在刷新后的界面中注冊,輸入用戶名和密碼,建議輸入后點藍色按鈕保存完成

  1. 安裝jenkins插件
    如果要使用Jenkins的插件構建工程的,需要在開始新建工程前安裝一些Jenkins插件,在可選插件中選擇我們需要的插件進行安裝
Git Parameter
這是一個參數構建擴展,可以在構建的時候選擇git的某一個分支來構建服務。
Git Parameter
官方地址:http://wiki.jenkins-ci.org/display/JENKINS/Git+Parameter+Plugin
安裝方式:在Jenkins插件當中直接搜索即可安裝。
功能說明:在參數化構建步驟當中,可添加Git的branch或者tag來作為參數進行構建。

Active Choices
官方地址:https://wiki.jenkins.io/display/JENKINS/Active+Choices+Plugin
安裝方式:在Jenkins插件當中直接搜索即可安裝。
功能說明:根據所選參數,自動調出對應參數所依賴的后續參數。

我們今天使用Execute shell Shell腳本構建工程

  1. jenkins的使用
    3.1. 構建一個自由風格的軟件項目

3.2. General參數

可以設置包的保留天數和最大保留個數,這些可以根據需要進行調整,可以不要選

  • jenkins插件配置多個項目extended choice parameter插件主要是構建的時候可以多選框來選擇要構建的項目模塊



($+上面的Name)就可以獲取該值

3.3. 源碼管理



3.4. 構建觸發器設置
觸發器可自定義的地方很多,可以根據項目需要選擇可省略

  • 定時構建:不管SVNGit中數據有無變化,均執行定時化的構建任務
  • 輪詢SCM:只要SVNGit中數據有更新,則執行構建任務
    日程表的填寫內容有5個參數,從左到右的參數含義如下:
    ??第1個參數:分鐘minute,取值0~59
    ??第2個參數:小時hour,取值0~23
    ??第3個參數:天day,取值1~31
    ??第4個參數:月month,取值1~12
    ??第5個參數:星期week,取值0~7,07都是表示星期天
    5個參數可選擇性設定,不寫死的參數用*號代替,參數之間用空格隔開。例如:
"0 21 * * *"表示每晚21點0分自動化構建一次
"0 * * * *"表示每個小時的第0分鐘執行一次構建
"H/5 * * * *"每隔5分鐘構建一次
"H H/2 * * *"每兩小時構建一次
"H H 30 * *"每月30號構建一次
"H(0-29)/10 * * * *"每個小時的前半個小時內的每10分鐘
"0 8-17/2 * * 1-5"周一到周五,8點~17點,兩小時構建一次
"H H 1,15 1-11 *"每月1號、15號各構建一次,除12月等

3.5. 構建環境設置
本文使用的是shell腳本構建工程,所以該項可以省去
3.6. 構建
有兩種方式打包,一是用Xcode插件打包,二是用Shell腳本打包,本文選擇第二種

  • iOS自動打包—Jenkins Shell如下:
## !/bin/sh
## 項目名
TARGET_NAME=NNAlgorithm
## Scheme名
SCHEME=NNAlgorithm
##=======================
## 編譯類型
BUILD_TYPE=Release
## 當前目錄
SORCEPATH=${WORKSPACE}
## workspace名
SPACE=${WORKSPACE}/${TARGET_NAME}.xcodeproj
##xcarchive文件的存放路徑
ARCHIVEPATH=$SORCEPATH/build/$SCHEME.xcarchive
## ipa文件的存放路徑
EXPORTPATH=$SORCEPATH/build/$SCHEME
## ExportOptions.plist文件的存放路徑,該文件要存放在這個路徑下內容如下
EXPORTOPTIONSPLIST=$SORCEPATH/build/ExportOptions.plist
## 導出后的ipa路徑
EXPORTPATHIPA=$SORCEPATH/build/$SCHEME/$SCHEME.ipa

echo -e "============First Build Clean============"
## 清理緩存
## 如果工程使用的是cocoapods,則'-project %s.xcodeproj'替換為'-workspace %s.xcworkspace'
xcodebuild clean -project $SPACE -scheme ${SCHEME} -configuration ${BUILD_TYPE}
echo -e "============Build Clean============"
## 輸出關鍵信息
echo -e "  TARGET_NAME    : ${TARGET_NAME}"
echo -e "  BUILD_TYPE    : ${BUILD_TYPE}"
echo -e "  SORCEPATH    : ${SORCEPATH}"
echo -e "  ARCHIVEPATH    : ${ARCHIVEPATH}"
echo -e "  EXPORTPATH    : ${EXPORTPATH}"
echo -e "  EXPORTOPTIONSPLIST    : ${EXPORTOPTIONSPLIST}"
echo -e "============Build Archive============"

## 導出archive包
xcodebuild archive -project ${SPACE} -scheme ${SCHEME} -archivePath $ARCHIVEPATH
echo -e "============Build Archive Success============"

echo -e "============Export IPA============"
## 導出IPA包
xcodebuild -exportArchive -archivePath $ARCHIVEPATH -exportPath ${EXPORTPATH} -exportOptionsPlist ${EXPORTOPTIONSPLIST}
echo -e "============Export IPA SUCCESS============"

## 編譯完成時間 20181030_0931
BUILD_DATE="$(date +'%Y%m%d_%H%M')"

## info.plist路徑
PROJECT_INFOPLIST_PATH="${SORCEPATH}/${TARGET_NAME}/Info.plist"
## 取版本號
BUNDLESHORTVERSION=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${PROJECT_INFOPLIST_PATH}")
## 取build值
VERSION=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${PROJECT_INFOPLIST_PATH}")
## ipa更名規則  項目名V版本_年月日_時分
IPANAME="${TARGET_NAME}V${BUNDLESHORTVERSION}_${BUILD_DATE}.ipa"
## 更名后ipa路徑
EXPORTPATHNEWIPA=$EXPORTPATH/$IPANAME

echo -e "============Export end :${BUILD_DATE}============"
echo -e "============IPA Old Name: ${EXPORTPATHIPA}============"
echo -e "============IPA New Name: ${EXPORTPATHNEWIPA}============"

## IPA更名
cp $EXPORTPATHIPA $EXPORTPATHNEWIPA
echo -e "============Create New Name Success============"
## 刪除老IPA
rm $EXPORTPATHIPA
echo -e "============Delete Old Name Success============"

#userKey和apiKey需要在蒲公英的賬號設置中查找
userKey="xxx"
apiKey="xxx"
#蒲公英打包
curl -F "file=@${EXPORTPATHNEWIPA}" \
-F "uKey=${userKey}" \
-F "_api_key=${apiKey}" \
-F "isPublishToPublic=2" \
http://www.pgyer.com/apiv1/app/upload
  • ExportOptions.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>provisioningProfiles</key>
    <dict>
        <key>com.Y***ane</key>
        <string>azur***_dev</string>
    </dict>
    <key>method</key>
    <string>development</string>
    <key>signingCertificate</key>
    <string>iPhone Developer</string>
    <key>signingStyle</key>
    <string>manual</string>
    <key>teamID</key>
    <string>42***ZL</string>
    <key>compileBitcode</key>
    <false/>
    <key>uploadSymbols</key>
    <false/>
</dict>
</plist>
  • 其中plist文件中的method參數有如下幾個方法:app-store, ad-hoc, enterprise, development
    3.7. 構建后操作

  • 郵件通知系統,通過系統管理系統設置,進行郵件配置

  • 設置jenkins地址和管理員郵箱地址

  • 設置發件人等信息
    這里的發件人郵箱地址切記要和系統管理員郵件地址保持一致


  • 注:上圖的Password為郵箱的SMTP授權秘鑰,至此系統管理處的內容已配置完成

  • 配置Jenkins自帶的郵件功能(測試郵件功能是否正常使用,可以不配置,不影響)

和上面Extended E-mail Notification配置一樣即可,點擊Test configuration,收到郵件并且顯示Email was successfully sent,代表郵件配置成功,接下來可以去項目中具體配置就可以使用了

  • 進入項目,然后找到構建后操作,點擊增加構建后的操作步驟,點擊Editable Email Notification


  • 至此所有的配置已完成,點擊應用后保存,enjoy it!

Project Recipient List:這個項目的需要發送郵件給哪些人,可以在這里輸入多個郵箱,中間以英文逗號隔開
Project Reply-To List:保持默認即可,這個是收到郵件的人回復郵件時候回復給誰用的,一般不會回復郵件
Content Type:可以選擇Html或者Default也行,因為我們在jenkins系統設置中的默認格式就是html
Default Subject: 郵件主題,可以書寫成:XXX項目iOS打包通知:$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS! 分析下這幾個參數什么意思:$PROJECT_NAME 構建項目的名稱;$BUILD_NUMBER 構建的號碼;$BUILD_STATUS 構建狀態,這幾個參數,它會自動讀取,按照這種格式書寫即可
Default Content:郵件內容,以下內容為模板,可直接復制修改使用:

<hr/>
本郵件是程序自動下發的,請勿回復!<br/><hr/>
項目名稱:$PROJECT_NAME<br/><hr/>
構建編號:$BUILD_NUMBER<br/><hr/>
構建狀態:$BUILD_STATUS<br/><hr/>
觸發原因:${CAUSE}<br/><hr/>
構建日志地址:<a href="${BUILD_URL}console">${BUILD_URL}console/</a><br/><hr/>
構建地址:<a href="$BUILD_URL">$BUILD_URL</a><br/><hr/>
構建報告:<a href="${BUILD_URL}testReport">${BUILD_URL}testReport/</a><br/><hr/>
變更集:${JELLY_SCRIPT,template="html"}<br/><hr/>
  1. Jenkins卸載方法(Windows/Linux/MacOS)
  • 如果使用brew安裝的,可以執行以下命令$ brew uninstall jenkins

  • 注:Jenkins修改工程的工作空間
    在項目的配置中點擊高級,選擇使用自定義工作空間,輸入工作空間路徑即可


  • 注意:使用Jenkins Pipeline動態參數傳遞Git分支時,需要取消Pipeline輕量級檢出選項,不然git分支參數傳遞會有問題

附:我的博客地址

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