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

最近項目需要實現自動化打包發布版本,方便測試人員測試。之前是打包需要開發人員打,一來二往影響開發、測試效率,然后領導讓使用jenkins來實現自動化打包可持續集成。

方法一.安裝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進入到jenkins.war包所在目錄,執行以下命令:
java -jar jenkins.war --httpPort=8080
httpPort指的就是Jenkins所使用的http端口,這里指定8080(默認的就是這個),可根據具體情況來修改。待Jenkins啟動后,在瀏覽器頁面輸入以下地址:
http://localhost:8080
第一次進入會讓輸入initialAdminPassword然后新建賬戶下載所必需的插件這部分內容可以參考IT青年110的文章。

Jenkins插件

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

創建Job

image.png

創建完成后我們對其穿件的job進行配置。

丟棄舊的構建.png

參數化構建
主要是使用腳本構建時使用這些參數,能動態修改選項

參數構建.png

源碼管理

源碼管理.png

構建
我們使用的是腳本構建,添加構建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需要在蒲公英的賬號設置中查找
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

到這里配置已經完成,只需要在頁面點擊構建就行。

構建頁面.png

Android的構建

配置全局的Gradle Home 路徑。

gradle配置.png

gradle配置.png

構建參數
包的類型參數.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```
![環境.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)
**構建**
![構建.png](http://upload-images.jianshu.io/upload_images/1652523-f143803b1cbb2264.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
```${WORKSPACE}```表示當前job下的workspace目錄,主要是存放代碼。一般${WORKSPACE}目錄位于當前用戶目錄下,OS X 系統路徑一般是/Users/用戶名/.jenkins/jobs/;更多的環境變量請參考文末附錄。 這樣,就能自動在project下的app的build/outputs/apk下生成相應的apk. 
注意:編譯失敗?可能要解決以下2個問題:
gradle沒配置環境變量。 比如我在/etc/profile中配置一下GRADLE_HOME:
也可以設置Build periodically,周期性的執行編譯任務。 因為一般來說local.properties不會添加到版本庫。 所以需要手動copy到${WORKSPACE}下的Project目錄下(可參考自己Android Studio工程結構)。 關于local.properties的定義,這里記錄一下,做個備份:

再編譯一般就會編譯成功,當然當那些第三方庫需要重新下載的話,編譯可能會很慢。

上傳蒲公英

上傳.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

*自動化可持續集成已經可以實現了,有問題請留言。

補充:

mac 下修改 jenkins 端口以及Jenkins的啟動、關閉與更新

安裝包安裝的Jenkins
修改默認端口的方法:

  1. 先關閉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
修改默認端口的方法:

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

推薦閱讀更多精彩內容