Jenkins(iOS Android)自動化打包實現(xiàn)可持續(xù)集成+上傳蒲公英

最近項目需要實現(xiàn)自動化打包發(fā)布版本痊剖,方便測試人員測試呈队。之前是打包需要開發(fā)人員打,一來二往影響開發(fā)慨灭、測試效率朦乏,然后領(lǐng)導(dǎo)讓使用jenkins來實現(xiàn)自動化打包可持續(xù)集成。

方法一.安裝jenkins----使用命令行

安裝jenkins
$ brew install jenkins
啟動jenkins
$ jenkins
brew services start jenkins
brew services stop jenkins

卸載jenkins
$ brew uninstall jenkins
如果brew無效氧骤,安裝homebrew
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

方法二.安裝jenkins--下載jenkins.war

鏈接https://jenkins.io
cd進(jìn)入到j(luò)enkins.war包所在目錄呻疹,執(zhí)行以下命令:
java -jar jenkins.war --httpPort=8080
httpPort指的就是Jenkins所使用的http端口,這里指定8080(默認(rèn)的就是這個)筹陵,可根據(jù)具體情況來修改刽锤。待Jenkins啟動后,在瀏覽器頁面輸入以下地址:
http://localhost:8080
第一次進(jìn)入會讓輸入initialAdminPassword然后新建賬戶下載所必需的插件這部分內(nèi)容可以參考IT青年110的文章朦佩。

Jenkins插件

Jenkins有非常多的插件并思,可以實現(xiàn)各種功能的擴(kuò)展。
針對搭建的iOS/Android持續(xù)集成打包平臺语稠,我使用到了如下幾個插件纺荧。
GIT plugin
SSH Credentials Plugin
Git Changelog Plugin: 獲取倉庫提交的commit log
build-name-setter:用于修改Build名稱
description setter plugin:用于在修改Build描述信息,在描述信息中增加顯示QRCode(二維碼)
Post-Build Script Plug-in:在編譯完成后通過執(zhí)行腳本實現(xiàn)一些額外功能
Xcode integration: iOS專用(可選)
Gradle plugin: Android專用(可選)
安裝方式也比較簡單颅筋,直接在Jenkins的插件管理頁面搜索上述插件宙暇,點擊安裝即可。
安裝完插件我們來配置構(gòu)件化項目议泵。

創(chuàng)建Job

image.png

創(chuàng)建完成后我們對其穿件的job進(jìn)行配置占贫。

丟棄舊的構(gòu)建.png

參數(shù)化構(gòu)建
主要是使用腳本構(gòu)建時使用這些參數(shù),能動態(tài)修改選項

參數(shù)構(gòu)建.png

源碼管理

源碼管理.png

構(gòu)建
我們使用的是腳本構(gòu)建先口,添加構(gòu)建Execute shell型奥。
1.更新pod

更新pod.png
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
pod update --verbose --no-repo-update

2.生成ipa


生成ipa.png
# 工程名
APP_NAME="XXXX"

# info.plist路徑
project_infoplist_path="./${APP_NAME}/APP/info.plist"
environment_plist_path="./${APP_NAME}/Environments/enviroment.plist"

#取版本號
bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}")

#取build值
bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${project_infoplist_path}")

#修改項目中plist文件
$(/usr/libexec/PlistBuddy -c "Set :Environment ${ENVIRONMENT}" "${environment_plist_path}")


xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}" -configuration "${BUILD_TYPE}" clean 

xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}" -sdk iphoneos -configuration "${BUILD_TYPE}" configurationBuildDir="${configurationBuildDir}" SYMROOT='$(PWD)'

echo "remove"
rm -rf ./${BUILD_TYPE}-iphoneos/Payload
rm -rf ./${BUILD_TYPE}-iphoneos/${APP_NAME}.ipa


echo "building .ipa from .app"
cd "./${BUILD_TYPE}-iphoneos"
mkdir Payload
cp -r ${APP_NAME}.app Payload
zip -qr ${APP_NAME}.ipa Payload
#zip -qr ${TARGET}-dSYM.zip ${TARGET}.xcarchive/dSYMs
cd -
echo `pwd`

3.上傳ipa到蒲公英


上傳ipa到蒲公英.png
# 工程名
APP_NAME="CredooDSD"
#userKey和apiKey需要在蒲公英的賬號設(shè)置中查找
userKey=""
apiKey=""
#蒲公英打包
curl -F "file=@./${BUILD_TYPE}-iphoneos/${APP_NAME}.ipa" \
-F "uKey=${userKey}" \
-F "_api_key=${apiKey}" \
-F "updateDescription=$DESCRIPTION" \
-F "isPublishToPublic=2" \
http://www.pgyer.com/apiv1/app/upload

到這里配置已經(jīng)完成瞳收,只需要在頁面點擊構(gòu)建就行。

構(gòu)建頁面.png

Android的構(gòu)建

配置全局的Gradle Home 路徑厢汹。

gradle配置.png

gradle配置.png

構(gòu)建參數(shù)
包的類型參數(shù).png

渠道的篩選配置
渠道.png

工程中build.gradle使用

def environment = "pro".equals(ENVIRONMENT)?DSD_BASE_URL_PRO:("dev".equals(ENVIRONMENT)?DSD_BASE_URL_DEV:DSD_BASE_URL_TEST)
if(environment == null) {
   environment = DSD_BASE_URL_TEST
}
println "In order to match the environment , the corresponding base url is set to $environment"
buildTypes {
       release {
           signingConfig signingConfigs.release
           minifyEnabled true
           buildConfigField 'String', 'BASE_URL', environment
           proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
       }

       debug {
           buildConfigField 'String', 'BASE_URL', environment
       }
   }
environment```
![環(huán)境.png](http://upload-images.jianshu.io/upload_images/1652523-d67f6b9e041a107f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
**源碼管理**
![git路徑.png](http://upload-images.jianshu.io/upload_images/1652523-99c2fa2b244f523c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
**構(gòu)建**
![構(gòu)建.png](http://upload-images.jianshu.io/upload_images/1652523-f143803b1cbb2264.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
```${WORKSPACE}```表示當(dāng)前job下的workspace目錄螟深,主要是存放代碼。一般${WORKSPACE}目錄位于當(dāng)前用戶目錄下烫葬,OS X 系統(tǒng)路徑一般是/Users/用戶名/.jenkins/jobs/;更多的環(huán)境變量請參考文末附錄界弧。 這樣,就能自動在project下的app的build/outputs/apk下生成相應(yīng)的apk. 
注意:編譯失敶钭邸垢箕?可能要解決以下2個問題:
gradle沒配置環(huán)境變量。 比如我在/etc/profile中配置一下GRADLE_HOME:
也可以設(shè)置Build periodically兑巾,周期性的執(zhí)行編譯任務(wù)条获。 因為一般來說local.properties不會添加到版本庫。 所以需要手動copy到${WORKSPACE}下的Project目錄下(可參考自己Android Studio工程結(jié)構(gòu))蒋歌。 關(guān)于local.properties的定義帅掘,這里記錄一下,做個備份:

再編譯一般就會編譯成功堂油,當(dāng)然當(dāng)那些第三方庫需要重新下載的話锄开,編譯可能會很慢。

上傳蒲公英

上傳.png

#cd $WORKSPACE/app/build/outputs/apk
#curl -F "file=@$PRODUCT_FLAVOR-$BUILD_TYPE-$BUILD_NUMBER.apk"  -F "updateDescription=$DESCRIPTION" -F "uKey=xxx" -F "_api_key=xxx" http://www.pgyer.com/apiv1/app/upload

可視化.png

*自動化可持續(xù)集成已經(jīng)可以實現(xiàn)了称诗,有問題請留言萍悴。

補(bǔ)充:

mac 下修改 jenkins 端口以及Jenkins的啟動、關(guān)閉與更新

安裝包安裝的Jenkins
修改默認(rèn)端口的方法:

  1. 先關(guān)閉jenkins ;
  2. 命令行下修改端口:sudo defaults write /Library/Preferences/org.jenkins-ci httpPort 7071
  3. 啟動jenkins
  4. 啟動jenkins: sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist
  5. 停止jenkins:sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist

用brew安裝的的Jenkins
修改默認(rèn)端口的方法:

  1. 打開文件 vi /usr/local/opt/jenkins/homebrew.mxcl.jenkins.plist
  2. 修改默認(rèn)端口號
  • 啟動jenkins: brew services start jenkins
  • 停止jenkins:brew services stop jenkins
  • 重啟Jenkins:brew services restart jenkins
  • 更新:切換到目錄cd ~/.jenkins寓免,然后用最新下載的war包替換文件夾中的war
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末癣诱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子袜香,更是在濱河造成了極大的恐慌撕予,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜈首,死亡現(xiàn)場離奇詭異实抡,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)欢策,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進(jìn)店門吆寨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人踩寇,你說我怎么就攤上這事啄清。” “怎么了俺孙?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵辣卒,是天一觀的道長掷贾。 經(jīng)常有香客問我,道長荣茫,這世上最難降的妖魔是什么想帅? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮啡莉,結(jié)果婚禮上港准,老公的妹妹穿的比我還像新娘。我一直安慰自己票罐,他們只是感情好叉趣,可當(dāng)我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布泞边。 她就那樣靜靜地躺著该押,像睡著了一般。 火紅的嫁衣襯著肌膚如雪阵谚。 梳的紋絲不亂的頭發(fā)上蚕礼,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天,我揣著相機(jī)與錄音梢什,去河邊找鬼奠蹬。 笑死,一個胖子當(dāng)著我的面吹牛嗡午,可吹牛的內(nèi)容都是我干的囤躁。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼荔睹,長吁一口氣:“原來是場噩夢啊……” “哼狸演!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起僻他,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤宵距,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后吨拗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體满哪,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年劝篷,在試婚紗的時候發(fā)現(xiàn)自己被綠了哨鸭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡娇妓,死狀恐怖兔跌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情峡蟋,我是刑警寧澤坟桅,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布华望,位于F島的核電站,受9級特大地震影響仅乓,放射性物質(zhì)發(fā)生泄漏赖舟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一夸楣、第九天 我趴在偏房一處隱蔽的房頂上張望宾抓。 院中可真熱鬧,春花似錦豫喧、人聲如沸石洗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽讲衫。三九已至,卻和暖如春孵班,著一層夾襖步出監(jiān)牢的瞬間涉兽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工篙程, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留枷畏,地道東北人。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓虱饿,卻偏偏與公主長得像拥诡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子氮发,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容