最近項目需要實現自動化打包發布版本,方便測試人員測試。之前是打包需要開發人員打,一來二往影響開發、測試效率,然后領導讓使用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
創建完成后我們對其穿件的job進行配置。
參數化構建
主要是使用腳本構建時使用這些參數,能動態修改選項
源碼管理
構建
我們使用的是腳本構建,添加構建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需要在蒲公英的賬號設置中查找
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
到這里配置已經完成,只需要在頁面點擊構建就行。
Android的構建
配置全局的Gradle Home 路徑。
構建參數
渠道的篩選配置
工程中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```

**源碼管理**

**構建**

```${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的定義,這里記錄一下,做個備份:
再編譯一般就會編譯成功,當然當那些第三方庫需要重新下載的話,編譯可能會很慢。
上傳蒲公英
#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
*自動化可持續集成已經可以實現了,有問題請留言。
補充:
mac 下修改 jenkins 端口以及Jenkins的啟動、關閉與更新
安裝包安裝的Jenkins
修改默認端口的方法:
- 先關閉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
修改默認端口的方法:
- 打開文件 vi /usr/local/opt/jenkins/homebrew.mxcl.jenkins.plist
- 修改默認端口號
- 啟動jenkins: brew services start jenkins
- 停止jenkins:brew services stop jenkins
- 重啟Jenkins:brew services restart jenkins
- 更新:切換到目錄cd ~/.jenkins,然后用最新下載的war包替換文件夾中的war