最近項目需要實現(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
創(chuàng)建完成后我們對其穿件的job進(jìn)行配置占贫。
參數(shù)化構(gòu)建
主要是使用腳本構(gòu)建時使用這些參數(shù),能動態(tài)修改選項
源碼管理
構(gòu)建
我們使用的是腳本構(gòu)建先口,添加構(gòu)建Execute shell型奥。
1.更新pod
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
# 工程名
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到蒲公英
# 工程名
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)建就行。
Android的構(gòu)建
配置全局的Gradle Home 路徑厢汹。
構(gòu)建參數(shù)
渠道的篩選配置
工程中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```

**源碼管理**

**構(gòu)建**

```${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)那些第三方庫需要重新下載的話锄开,編譯可能會很慢。
上傳蒲公英
#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
*自動化可持續(xù)集成已經(jīng)可以實現(xiàn)了称诗,有問題請留言萍悴。
補(bǔ)充:
mac 下修改 jenkins 端口以及Jenkins的啟動、關(guān)閉與更新
安裝包安裝的Jenkins
修改默認(rèn)端口的方法:
- 先關(guān)閉jenkins ;
- 命令行下修改端口:sudo defaults write /Library/Preferences/org.jenkins-ci httpPort 7071
- 啟動jenkins
- 啟動jenkins: sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist
- 停止jenkins:sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
用brew安裝的的Jenkins
修改默認(rèn)端口的方法:
- 打開文件 vi /usr/local/opt/jenkins/homebrew.mxcl.jenkins.plist
- 修改默認(rèn)端口號
- 啟動jenkins: brew services start jenkins
- 停止jenkins:brew services stop jenkins
- 重啟Jenkins:brew services restart jenkins
- 更新:切換到目錄cd ~/.jenkins寓免,然后用最新下載的war包替換文件夾中的war