macOS Jenkins安裝&配置

一、依賴環境

1. JavaSDK(Java SE Development Kit)

在終端命令行輸入java -version命令,如果打印出java版本,則代表已安裝,可以略過此步驟。
如果沒有安裝過,進入JavaSDK官網,接受協議,選擇 & 下載對應系統的 安裝包

下載完成,點擊安裝,安裝完成再次在終端中執行上面的命令,可以看到已安裝JavaSDK的版本

2. Apache

Mac系統自帶,略過


二、安裝Jenkins

1. 下載安裝Jenkins

方法有多種,暫以下載dmg客戶端為例
進入Jenkins官網,下載最新版本的Jenkins客戶端

雙擊下載好的dmg文件進行安裝,其將會自動生成全局變量jenkins
Jenkins默認安裝路徑:/Applications/Jenkins/jenkins.war
(如果下載.war格式文件,將文件復制到欲安裝文件夾即可)
修改參數: jenkins + 相關參數,如
jenkins –httpPort=8888#更換端口號,當默認端口8080被占用,或指定特定端口時。

2. 啟動Jenkins

如果是使用dmg文件安裝的,安裝完成之后,會自動啟動jenkins,打開瀏覽器,進入網頁 localhost:8080

終端命令

設置開機自啟動:sudo launchctl load -w /Library/LaunchDaemons/org.jenkins-ci.plist
取消開機自啟動:sudo launchctl unload -w /Library/LaunchDaemons/org.jenkins-ci.plist
手動啟動:Java -jar jenkins.war
后臺啟動(默認端口):nohup java -jar jenkins.war &
后臺啟動(指定端口):nohup java -jar jenkins.war -httpPort=88 &
后臺啟動(HTTPS):nohup java -jar jenkins.war -httpsPort=88 &

注:可能出現連接不到服務器的問題,原因就是Java環境有問題,重新配置Java環境即可。


三、配置Jenkins

1、重啟電腦

重啟電腦之后,你會發現Jenkins給你的電腦新增了一個用戶,名字就叫Jenkins
打開localhost:8080,出現Unlock Jenkins(重設初始密碼)界面
密碼在/Users/userName/.jenkins/secrets/initialAdminPassword**文件(下圖標注紅色路徑)中,打開文件,復制密碼填到網頁密碼輸入框中,繼續

選擇建議安裝設置


安裝中


等待Jenkins重啟完成


創建管理員賬號:輸入用戶名、密碼、郵件等


創建完,進入Jenkins初始界面


2、管理插件

選擇“系統管理”——“管理插件”,進入插件管理界面(可以安裝、更新、卸載jenkins插件)

  • √ Git插件: Git plugin
  • √ Gitlab插件:GitLab Plugin 和 Gitlab Hook Plugin
  • ? iOS專用:Xcode integration
  • ? Android專用:Gradle 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
  • 顯示代碼測試覆蓋率報表:Cobertura Plugin
  • 來展示生成的單元測試報表,支持一切單測框架,如junit、nosetests等:Junit Plugin
  • 其它:SSH Credentials Plugin

注:打√號的建議安裝,? 號按系統和編輯器安裝,其他 選擇安裝

3、系統設置

選擇“系統管理”——“系統設置”,進入系統設置界面(可以管理全局屬性、配置郵件通知)
全局屬性下面,勾選Environment variables,增加一對鍵值對:

  • LANG = zh_CN.UTF-8
  • PATH = (終端中執行 echo $PATH 命令的輸出,為一堆路徑)

4、新建項目

點擊“新建”或者“創建一個新任務”


輸入新項目名稱,選“新建一個自由風格的軟件項目”


點擊新建好的項目(第一次可能不需要吧,給忘記了,反正下一步是配置)


5、配置項目

點擊“配置”


進入配置界面,配置項目參數

A. General配置

注:這里可以設置包(構建)的保留天數和保留的最大個數

B. 源碼管理

由于現在我用到的是GitLab,先配置SSH Key

創建SSH證書:

  • 終端執行:ssh-keygen -t rsa -C "xxx@xxx.com"(郵箱)
  • 按回車保存到默認位置,再稍等出來提示輸入passphrase密碼短語,輸完按回車要輸兩遍(它是用來加密私鑰,也就是以后使用私鑰的時候要輸這個密碼,如果輸入,就需要記住,或者直接置空)
  • 創建成功的SSH 默認路徑為 ~/.ssh 目錄
  • id_rsa 文件存儲密鑰 ,id_rsa.pub存儲公鑰

添加SSH證書:

  • 在Jenkins管理頁面,點擊“Credentials”后的Add按鈕
  • Domain 選擇 “Global credentials (unrestricted)”
  • Kind 選擇 “SSH Username with private key”,如下圖所示
  • Username 隨意,自己可看懂的標識
  • 復制id_rsa中的字符串到private key中,passphrase為創建SSH時,填寫的passphrase秘密(如果為空,則直接設置為空)
  • 點擊“Add”,把SSH添加到Jenkins中

配置SSH也可以參考配置Git代碼倉庫

然后在“Credentials”處選擇剛添加的那個SSH配置。
如果配置正確的話,是不會出現下圖中的那段紅色的警告。如果有下圖的提示,就說明Jenkins還沒有連通GitLab或者SVN,那就請再檢查SSH Key是否配置正確。


C. 構建觸發器

構建觸發器設置這里是設置自動化測試的地方。這里涉及的內容很多,暫時沒有深入研究,有自動化測試需求的可以好好研究研究這里的設置。

  • Build when a change is pushed to GitHub
    當有數據推送到遠程庫中時構建
  • Poll SCM (poll source code management)
    輪詢源碼管理
    需要設置源碼的路徑才能起到輪詢的效果。一般設置為類似結果: H/5 * * * * 每5分鐘輪詢一次
  • Build periodically (定時build)
    一般設置為類似: 00 20 * * * 每天 20點執行定時build

格式如下

分鐘(0-59) 小時(0-23) 日期(1-31) 月(1-12) 周幾(0-7,0和7都是周日) * 代表全部

D. 構建環境

iOS打包需要簽名文件和證書,所以這部分我們勾選“Keychains and Code Signing Identities”。
這里我們又需要用到Jenkins的插件,在系統管理頁面,選擇“Keychains and Provisioning Profiles Management”。

進入Keychains and Provisioning Profiles Management頁面,點擊“瀏覽”按鈕,分別上傳自己的keychain和證書。上傳成功后,我們再為keychain指明簽名文件的名稱。

  • Keychain路徑
    /Users/userName/Library/keychains/login.keychain
  • Provisioning Profiles路徑
    /Users/userName/Library/MobileDevice/Provisioning Profiles

點擊“Add Code Signing Identity”,最后添加成功后如下圖所示:


這樣Adhoc證書和簽名文件就在Jenkins中配置好了,接下來我們只需要在item設置中指定相關文件即可。

回到我們新建的item,找到構建環境,按下圖選好自己的相關證書和簽名文件。

E. 構建
①增加構建步驟:Execute shell

作用:改變項目中的build號

#---------------進入項目工程根目錄----------------------------
cd $HOME/Home/workspace/${JOB_NAME}/xxx(工程名)
#---------------auto change versionNumber------------------
#/usr/bin/xcrun agvtool next-marketing-version -all
#---------------auto change buildNumber--------------------
/usr/bin/xcrun agvtool new-version -all $BUILD_NUMBER
②增加構建步驟:Execute shell

作用:打包,導出IPA
最好在xcode中設置scheme為shared,否則可能出現工程無scheme的錯誤

# 工程名
APP_NAME="xxx"  #替換成你的工程名
# 證書
CODE_SIGN_DISTRIBUTION="iPhone Distribution: xxx Co., Ltd. (xxxxxx)"  # 打包所用簽名證書
# info.plist路徑
project_infoplist_path="$HOME/Home/workspace/${JOB_NAME}/${APP_NAME}/${APP_NAME}/Info.plist"
#取版本號
bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}")
#獲取日期
#DATE="$(date +%Y%m%d)"
ADHOC_PLIST_PATH="xxx/xxx/adhoc.plist"
#要上傳的ipa文件路徑
IPA_PATH="$HOME/Home/output/${JOB_NAME}/${bundleShortVersion}(${BUILD_ID})"
#創建IPA路徑文件夾
mkdir $IPA_PATH
#archive文件路徑
ARCHIVE_PATH="${IPA_PATH}/${APP_NAME}_${BUILD_ID}.xcarchive"

#進入工程目錄
cd $HOME/Home/workspace/${JOB_NAME}/${APP_NAME}
# xcodebuild -list命令可以查看 工程的:Targets、Configurations、Schemes

echo "=================清理工程================="
xcodebuild clean -target "${APP_NAME}" -configuration 'Release'

echo "=================解鎖鑰匙串================="
#解決:codesign"seckey api returned: -25308,(null)"
# *** 是一般為電腦登錄密碼
security unlock-keychain -p "***" "${HOME}/Library/Keychains/login.keychain"

echo "=================生成xcarchive文件================="
# 在xcode中設置scheme為shared,否則可能出現工程無scheme的錯誤
# 還可以添加其他參數,不設置的都是默認使用項目Build Settings里面的配置,包括 CODE_SIGN_IDENTITY 和 PROVISIONING_PROFILE
xcodebuild archive -project "${APP_NAME}.xcodeproj" -scheme "${APP_NAME}" -sdk iphoneos -configuration "Release" -archivePath "${ARCHIVE_PATH}"

echo "=================打包IPA================="
xcodebuild -exportArchive -archivePath "${ARCHIVE_PATH}" -exportPath "${IPA_PATH}" -exportOptionsPlist "${ADHOC_PLIST_PATH}"

adhoc.plist 文件內容

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>method</key>
        <string>ad-hoc</string>
        <key>compileBitcode</key>
        <false/>
    </dict>
</plist>
F、構建后操作

增加構建后操作步驟:Execute a set of scripts
建議勾選 Execute script only if build succeeds 只有構建成功,才執行構建后命令
Build steps => Execute shell

# 解決中文亂碼問題
export LANG="zh_CN.UTF-8" #zh_CN.UTF-8  en_US.UTF-8
# 解決 fir: command not found 問題(前提:安裝fir命令行工具 - gem install fir(再前提:安裝了ruby環境))
# /usr/local/bin/:  為fir工具安裝路徑(安裝完成fir時會有打印出來)
export PATH="/usr/local/bin/:$PATH"

APP_NAME="xxx"
# info.plist路徑
project_infoplist_path="$HOME/Home/workspace/${JOB_NAME}/${APP_NAME}/${APP_NAME}/Info.plist"
#取版本號
bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}")

cd $HOME/Home/workspace/${JOB_NAME}

log=`git show -s --format=%B $GIT_COMMIT`

cd "$HOME/Home/output/${JOB_NAME}/${bundleShortVersion}(${BUILD_ID})"

fileName=`find . -name "${APP_NAME}.ipa"`

# 上傳IPA到fir平臺
fir p "$fileName" -c ${log} -Q -m "./${APP_NAME}_${BUILD_ID}.xcarchive/dSYMs/工程名.app.dSYM/Contents/Resources/DWARF/工程名" -P <bughd project id> -T <fir token>

# 設置上傳fir返回二維碼圖片名稱為qrcode.png
mv "./fir-${$APP_NAME}.png" "./qrcode.png"

# 設置構建版本描述信息為二維碼,掃碼可下載該構建版本
# 此設置無效,錯誤信息如下:
# [WARN] Failed to authenticate with your SSH keys. Proceeding as anonymous
# ERROR: No such job 'DESCRIPTION=<p>掃碼下載xxx(xx)</p><img src=./qrcode.png>'
# java -jar ${HOME}/Home/jenkins-cli.jar -s http://localhost:8080/ set-build-description DESCRIPTION="<p>掃碼下載${bundleShortVersion}(${BUILD_ID})</p><img src=./qrcode.png>"

解決 fir: command not found 問題

  • 前提:安裝fir命令行工具 - gem install fir(再前提:安裝了ruby環境)
  • /usr/local/bin/: 為fir工具安裝路徑(安裝完成fir時會有打印出來)
  • export PATH="/usr/local/bin/:$PATH"

配置set build description 可以使用 HTML標簽
設置如下:

  1. Jenkins -> 系統管理 -> Configure Global Security
  2. Markup Formatter 選擇 "Safe HTML"

解決Unable to access jarfile jenkins-cli.jar 問題

  • 進入 http://localhost:8080/cli/
    Jenkins主網址,8080是默認端口
  • 下載jenkins-cli.jar,并放到Jenkins的一個目錄下
    1.右上角“可以下載jenkins-cli.jar”,點擊鏈接即可下載
    2.比如我就放到了$HOME/Home目錄中了
    3.修改文件擁有者和用戶組為jenkins
  • java -jar jenkins-cli.jar 中 jenkins-cli.jar 文件名 替換為 jenkins-cli.jar 文件的全路徑

注意:小心大坑,在Jenkins HOME目錄下新建文件(夾),權限要更改,否則會出現權限問題(Operation denied)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,197評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,415評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,104評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,884評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,647評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,130評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,208評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,366評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,887評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,737評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,939評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,478評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,174評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,586評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,827評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,608評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,914評論 2 372

推薦閱讀更多精彩內容