寫在前面
最近公司搞自動化打包,從0開始折騰了幾天終於完成了,準備整理一下,寫成文檔。
1、下載Jenkins並安裝
Jenkins下載地址:https://jenkins.io
在主頁面點擊Download Jenkins選擇Mac OS。
安裝沒有什麼好介紹的,雙擊安裝包,按照提示進行就好了。
2、下載Java SDK
Jenkins 需要運行 Java 5以及以上的版本。
下載地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
3、啓動Jenkins
默認安裝完Jenkins會在瀏覽器打開網頁:http://localhost:8080/
如果沒有自動打開,可以在瀏覽器打開http://localhost:8080/
或者
命令行啓動Jenkins:
啓動:
sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist
停止:
sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
/var/root/.jenkins/secrets/initialAdminPassword
啓動後按照提示文件路徑,找到key激活,(文件如果沒有權限,可以右鍵顯示簡介,下面的用戶開啓權限)
然後設置Jenkins的管理員賬號。
安裝Jenkins的默認插件。
注意:我們前往文件夾你會發現是找不到的解鎖需要的文件的,因爲我們沒有其操作權限。終端進入var:
sudo chmod -R 777 root
4、Jenkins配置
4.1、系統管理
4.1.1、管理插件
選擇系統管理->管理插件->可選插件,在需要的插件前點擊,選中,點擊直接安裝
- iOS專用:Xcode integration
- Android專用:Gradle plugin
- Gitlab插件:GitLab Plugin 和 Gitlab Hook Plugin
- Git插件: Git plugin
- GitBuckit插件: GitBuckit plugin
- 簽名證書管理插件: Credentials Plugin 和Keychains and Provisioning Profiles Management
- FTP插件: Publish over FTP
- 腳本插件: Post-Build Script Plug-in
- 修改Build名稱/描述(二維碼): build-name-setter / description setter plugin
- 獲取倉庫提交的commit log: Git Changelog Plugin
- 自定義全局變量: Environment Injector Plugin
- 自定義郵件插件: Email Extension Plugin
- 獲取當前登錄用戶信息: build-user-vars-plugin
- 顯示代碼測試覆蓋率報表: Cobertura Plugin
- 來展示生成的單元測試報表,支持一切單測框架,如junit、nosetests等: Junit Plugin
- 其它: GIT plugin / SSH Credentials Plugin
點擊高級-> 選擇文件-> 選擇從fim.im中下載的Jenkins插件fir-plugin-1.9.5.hpi ->點擊上傳
4.1.2 、鑰匙串和配置文件管理
選擇系統管理->點擊 Keychains and Provisioning Profiles Management
點擊選擇文件按鈕,在彈出的文件選擇框中選擇系統的System.keychain或者login.kenchain。完成後,點擊upload上傳。
System.keychain文件在目錄:
Macintosh HD/Library/Keychains/
Code Signing Identity:打開鑰匙串,右擊->顯示簡介->複製常用名稱,粘貼到下面就OK了
然後,在本頁面再次點擊選擇文件->在彈出的文件選擇框中,選擇蘋果開發中心的配置文件->點擊upload。
Provisioning Profiles Directory Path:可以寫成:/Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profiles
點擊save 保存就好了。
4.2、 Credentials
這裏是可以使用SSH訪問GitLab的關鍵。在key一欄的輸入框裏面粘貼私有key的內容就好了。生成ssh的方法:
4.3、新建Job
4.3.1 選擇類型
這裏講主要內容,其他一些設置可以自己摸索研究。
點擊新建 ->輸入名字-> 選擇第一個 自由風格 ->點擊OK
4.3.2 配置Git
選源碼管理->選擇Git -> Repository URL爲項目的Git地址(SSH類型)-> Credentials 選擇上面創建的
4.3.3 構建環境
選擇構建環境,選中兩項 Keychains and Code Signing Identities和Mobile Provisioning Profiles
選擇下面截圖中的Keychain和Provisioning Profile兩項,點擊保存,再次進來就會發現其他項已經自動填充了,沒有填充的項不是必須填寫的
4.3.4 構建腳本
選擇構建-> 選擇Execute shell
在Command的輸入框填寫打包腳本。
打包的腳本:
1)沒有使用workspace的打包腳本
# 工程名
APP_NAME="JenkinsDemo"
# 證書
CODE_SIGN_DISTRIBUTION="iPhone Distribution: Beijing ****"
# info.plist路徑
project_infoplist_path="./${APP_NAME}/platforms/ios/${APP_NAME}/${APP_NAME}-Info.plist"
#取版本號
#bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}")
#取build值
#bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${project_infoplist_path}")
#DATE="$(date +%Y%m%d)"
IPANAME="${APP_NAME}_V${bundleShortVersion}_${DATE}.ipa"
#要上傳的ipa文件路徑
IPA_PATH="$HOME/${IPANAME}"
echo ${IPA_PATH}
echo "${IPA_PATH}">> text.txt
cd ${APP_NAME}
# 修改build版本號
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BUILD_NUMBER" "${APP_NAME}/${APP_NAME}-Info.plist"
# 修改版本號
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $VERSION" "${APP_NAME}/${APP_NAME}-Info.plist"
echo "=================clean================="
xcodebuild -target ${APP_NAME} -configuration 'Release' clean
echo "+++++++++++++++++build+++++++++++++++++"
#xcodebuild -target ${APP_NAME} -scheme "${APP_NAME}" -sdk iphoneos -configuration 'Release' CODE_SIGN_IDENTITY="${CODE_SIGN_DISTRIBUTION}" SYMROOT='$(PWD)'
xcodebuild -project ${APP_NAME}.xcodeproj -target ${APP_NAME} -sdk iphoneos -configuration 'Release' CODE_SIGN_IDENTITY="${CODE_SIGN_DISTRIBUTION}" SYMROOT='$(PWD)'
xcrun -sdk iphoneos PackageApplication "./Release-iphoneos/${APP_NAME}.app" -o ~/"${IPANAME}"
//————————————————————————————————
2)使用workspace的打包腳本(包括cordova混合開發結構)
# 工程名
APP_NAME="Jira_app"
# 證書
CODE_SIGN_DISTRIBUTION="iPhone Distribution: Beijing ****"
# info.plist路徑
#project_infoplist_path="./${APP_NAME}/platforms/ios/${APP_NAME}/${APP_NAME}-Info.plist"
#取版本號
#bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}")
#取build值
#bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${project_infoplist_path}")
#DATE="$(date +%Y%m%d)"
IPANAME="${APP_NAME}.ipa"
#要上傳的ipa文件路徑
IPA_PATH="$HOME/${IPANAME}"
echo ${IPA_PATH}
echo "${IPA_PATH}">> text.txt
cd ${APP_NAME}/platforms/ios/
# 修改build版本號
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BUILD_NUMBER" "${APP_NAME}/${APP_NAME}-Info.plist"
# 修改版本號
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $VERSION" "${APP_NAME}/${APP_NAME}-Info.plist"
echo "=================clean================="
xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}" -configuration 'Release' clean
echo "+++++++++++++++++build+++++++++++++++++"
xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}" -sdk iphoneos -configuration 'Release' CODE_SIGN_IDENTITY="${CODE_SIGN_DISTRIBUTION}" SYMROOT='$(PWD)'
xcrun -sdk iphoneos PackageApplication "./Release-iphoneos/${APP_NAME}.app" -o ~/"${IPANAME}"
3)xcode8後的打包命令
echo ${VERSION}.${BUILD_NUMBER}
#widget
WIDGET="RTSgccWidget"
# 工程名
PROJECT_NAME="sgcc-app"
APP_NAME="RTSgcc"
# 證書
CODE_SIGN_DISTRIBUTION="iPhone Distribution: Beijing Rowena Technology Co., Ltd. (K749AEADAX)"
# info.plist路徑
project_infoplist_path="./${APP_NAME}/platforms/ios/${APP_NAME}/${APP_NAME}-Info.plist"
#取版本號
#bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}")
#取build值
#bundleVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${project_infoplist_path}")
#DATE="$(date +%Y%m%d)"
IPANAME="${APP_NAME}.ipa"
#要上傳的ipa文件路徑
IPA_PATH="$HOME/${IPANAME}"
echo ${IPA_PATH}
echo "${IPA_PATH}">> text.txt
cd ${PROJECT_NAME}/platforms/ios/
# 修改build版本號
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BUILD_NUMBER" "${APP_NAME}/${APP_NAME}-Info.plist"
# 修改版本號
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $VERSION" "${APP_NAME}/${APP_NAME}-Info.plist"
echo "=================clean================="
xcodebuild -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}" -configuration 'Release' clean
echo "+++++++++++++++++build+++++++++++++++++"
xcodebuild archive -workspace "${APP_NAME}.xcworkspace" -scheme "${APP_NAME}" -configuration Release -archivePath "${APP_NAME}.xcarchive"
echo "+++++++++++++++++export ipa+++++++++++++++++"
xcodebuild -exportArchive -archivePath "${APP_NAME}.xcarchive" -exportPath build_app -exportOptionsPlist 'exportOptionsPlist.plist'
需要配置exportOptionsPlist.plist文件
//xcode 9支持自動簽名打包
在命令後面添加:
-allowProvisioningUpdates
4.3.5 上傳fir.im
選擇構建後操作步驟- > 選擇Upload to fir.im
fir.im Token爲註冊登錄後,可以查看的API Token。
IPA/APK Files (optional) 填寫的是.ipa文件的路徑
Build Notes 爲版本更新的更新日誌,會在fir.im上顯示
點擊保存 - > 立即構建 -> 構建的過程可以在Console Output中查看。
fir.im出現上傳速度慢的時候,參照http://blog.fir.im/turbo-qiniu/ 解決。
在Mac執行:
sh -c "$(curl -sSL https://gist.githubusercontent.com/trawor/5dda140dee86836b8e60/raw/turbo-qiniu.sh)"