關於Mac上部署Jenkins的一些個人習慣

weixin_33670713發表於2016-11-25

原創文章轉載請註明出處

Jenkins是基於Java開發的一種持續整合工具,用於監控持續重複的工作,功能包括:
1、持續的軟體版本釋出/測試專案。
2、監控外部呼叫執行的工作。

3681664-277012e87ccd532e.png
Paste_Image.png
3681664-8cdd276243c12195.png
Paste_Image.png

去年因為要做持續整合,在公司的蘋果主機上部署了Jenkins,網上的安裝教程已經非常多了,這裡記錄一些個人的配置習慣。

  1. 因為要打包iOS App,所以必須部署在macOS上,效能當然越高越好。我在某寶買了一臺黑蘋果,主機價格不到4K,志強處理器+8G記憶體+250G固態硬碟+1T機械硬碟,系統做得很好,執行穩定,美中不足就是升級系統大版本需要把硬碟寄回給賣家。涉及到公司機密的檔案保護,所以我把所有的資源都放在機械硬碟中,固態硬碟僅保留macOS系統和軟體,如果有錢還是建議上一臺MacPro。
  2. 不要用pkg檔案安裝Jenkins,因為這樣會生成一個共享使用者jenkins,而這個使用者的許可權和系統登入使用者的許可權不同,在編譯iOS應用的時候會有證照校驗和簽名的問題,所以請下載war包,放到Java容器中執行,比如Tomcat。我在系統啟動的時候自啟動了Tomcat,所以開機以後Jenkins會自動啟動。
  3. 前面說了資料都放在機械硬碟中,所以要修改Jenkins的工作目錄。開啟Tomcat的bin目錄,編輯catalina.sh檔案。找到以下程式碼:
# OS specific support.  $var _must_ be set to either true or false.

在這句話上面新增下面這句話,在引號中填入你的路徑。

export JENKINS_HOME=""

這個操作在拷貝Jenkins的war包之前就可以做了。

  1. 現在沒有賬號許可權的困擾了,但是xcodebuild -exportArchive的時候會報錯。
xcodebuild[62682:464728] [MT] IDEDistribution: Step failed: <IDEDistributionThinningStep: 0x7ff1a42d23f0>:
 Error Domain=IDEDistributionErrorDomain Code=14 "No applicable devices found." UserInfo=0x7ff1a72ddd80 {NSLocalizedDescription=No applicable devices found.}error: exportArchive: No applicable devices found.Error Domain=IDEDistributionErrorDomain Code=14 "No applicable devices found." UserInfo=0x7ff1a72ddd80 {NSLocalizedDescription=No applicable devices found.}
** EXPORT FAILED **

什麼鬼,你會看到這個莫名其妙的錯誤。Google會告訴你這是因為RVM中安裝的ruby版本和Xcode要求的版本不一致。抄一個xcodebuild-safe.sh的指令碼,export的時候用這個指令碼處理,程式碼在文章末尾,拿走不謝,反正也不是我寫的,我只是程式碼搬運工。

xcodebuild-safe -exportArchive ..........
  1. 打包這種事,能用指令碼解決的問題就不要用額外的外掛了,那些Android Studio/Xcode的外掛,我都沒有安裝。
3681664-348492a8c61210a1.png
Paste_Image.png

命令列這東西是最方便的,可定製化程度高,不是嗎?Bash Shell和Python已經足夠應付所有的打包工作了。

附送xcodebuild-safe.sh

#!/bin/bash --login

# Cf. http://stackoverflow.com/questions/33041109
#
# Xcode 7 (incl. 7.0.1) seems to have a dependency on the system ruby.
# xcodebuild is screwed up by using rvm to map to another non-system
# ruby†. This script is a fix that allows you call xcodebuild in a
# "safe" rvm environment, but will not (AFAIK) affect the "external"
# rvm setting.
#
# The script is a drop in replacement for your xcodebuild call.
#
#   xcodebuild arg1 ... argn
#
# would become
#
#   path/to/xcbuild-safe.sh arg1 ... argn
#
# -----
# † Because, you know, that *never* happens when you are building
# Xcode projects, say with abstruse tools like Rake or CocoaPods.

# This allows you to use rvm in a script. Otherwise you get a BS
# error along the lines of "cannot use rvm as function". Jeez.
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

# Cause rvm to use system ruby. AFAIK, this is effective only for
# the scope of this script.
rvm use system

unset RUBYLIB
unset RUBYOPT
unset BUNDLE_BIN_PATH
unset _ORIGINAL_GEM_PATH
unset BUNDLE_GEMFILE

set -x          # echoes commands
xcodebuild "$@" # calls xcodebuild with all the arguments passed to th

我是咕咕雞,一個還在不停學習的全棧工程師。
熱愛生活,喜歡跑步,家庭是我不斷向前進步的動力。

相關文章