Jenkins+GitLab+fir.im 持續整合
寫在前面
最近公司搞自動化打包,從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)"