1. 程式人生 > >Jenkins+GitLab+fir.im 持續整合

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)"