打開終端:
1 : 安裝jenkins (當前2.183 版本)
brew install jenkins
提示更新
jenkins: Java 1.8 is required to install this formula. Install AdoptOpenJDK 8 with Homebrew Cask: brew cask install homebrew/cask-versions/adoptopenjdk8 Error: An unsatisfied requirement failed this build.
根據提示更新:
brew cask install homebrew/cask-versions/adoptopenjdk8
Updating Homebrew...
重新安裝jenkins
brew install jenkins
然后執(zhí)行war包(更換對應的版本號2.183)
java -jar /usr/local/Cellar/jenkins/2.183/libexec/jenkins.war --httpPort=8080
java更新
Jenkins requires Java versions [8, 11] but you are running with Java 9 from /Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home java.lang.UnsupportedClassVersionError: 53.0 at Main.verifyJavaVersion(Main.java:174) at Main.main(Main.java:142)
提示要求是java版本8 ,11 .
更新java (當前11)
brew cask install java11
重新執(zhí)行war包(更換對應的版本號2.183)
java -jar /usr/local/Cellar/jenkins/2.183/libexec/jenkins.war --httpPort=8080
如果java版本過高,刪除高版本(不知道還有沒有別的辦法)
Jenkins requires Java versions [8, 11] but you are running with Java 12 from /Library/Java/JavaVirtualMachines/openjdk-12.0.1.jdk/Contents/Home java.lang.UnsupportedClassVersionError: 56.0 at Main.verifyJavaVersion(Main.java:174) at Main.main(Main.java:142)
查看java版本
ls /Library/Java/JavaVirtualMachines/
adoptopenjdk-8.jdk jdk-9.0.4.jdk openjdk-11.0.2.jdk openjdk-12.0.1.jdk
刪除9.0版本
sudo rm -rf /Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk
刪除12.0版本
sudo rm -rf /Library/Java/JavaVirtualMachines/openjdk-12.0.1.jdk
ls /Library/Java/JavaVirtualMachines/
adoptopenjdk-8.jdk openjdk-11.0.2.jdk
重新執(zhí)行war包
java -jar /usr/local/Cellar/jenkins/2.183/libexec/jenkins.war --httpPort=8080
下面信息提示啟動成功:
Running from: /usr/local/Cellar/jenkins/2.183/libexec/jenkins.war
hudson.util.Retrier#start: Performed the action check updates server successfully at the attempt #1
2019-07-09 03:07:09.684+0000 [id=49] INFO hudson.model.AsyncPeriodicWork$1#run: Finished Download metadata. 21,767 ms
查看文件路徑 /Library/LaunchDaemons 下是否有org.jenkins-ci.plist 文件,沒有就創(chuàng)建:
<?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>StandardOutPath</key>
<string>/var/log/jenkins/jenkins.log</string>
<key>StandardErrorPath</key>
<string>/var/log/jenkins/jenkins.log</string>
<key>EnvironmentVariables</key>
<dict>
<key>JENKINS_HOME</key>
<string>/Users/xxx/Jenkins/Home</string>
</dict>
<key>GroupName</key>
<string>daemon</string>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>org.jenkins-ci</string>
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>/Library/Application Support/Jenkins/jenkins-runner.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>UserName</key>
<string>jenkins</string>
<key>SessionCreate</key>
<true/>
</dict>
</plist>
Jenkins安裝時會啟動創(chuàng)建名為jenkins的用戶,
修改文件:/Library/LaunchDaemons/org.jenkins-ci.plist
里面的GroupName和UserName煌恢,
可以將該文件cp到另一個路徑修改后再覆蓋過來,
然后重啟Jenkins(brew services restart Jenkins)即可觉啊。
3 :打開網址
如果已經安裝過的,提示登錄: 如果第一次安裝會提示設置賬戶密碼
根據安裝日志顯示/Users/{你的電腦名}/.jenkins/
安裝地址:
/Users/niexiaobo/.jenkins/
初始密碼:
(網上說)在本地文件夾前往/Users/Shared/Jenkins/Home/secrets/initialAdminPassword路徑度苔,需要更改secrets文件夾的everyone的權限后牺汤,打開initialAdminPassword文件,復制出密碼,粘貼到網頁的輸入框中毁葱。
(本人沒找到[由于電腦以前安裝過Jenkins,可能有些步驟沒有],所以暫時使用下面免密登錄)
免密登錄:
修改 config.xml 設置
/Users/niexiaobo/.jenkins/config.xml 文件中
<useSecurity>true</useSecurity> 修改為false ,
然后終端重啟:
brew services restart Jenkins
也可以通過打開地址
http://localhost:8080/restart 重啟
首次安裝會有個安裝過程:
創(chuàng)建用戶/密碼:
點擊即可開始創(chuàng)建新的項目:
4 :創(chuàng)建新的項目之前,需要先安裝一個nodejs插件:
往下滾動找到插件管理:
安裝里搜索nodejs,然后點擊按鈕,立即生效:
創(chuàng)建新的項目,開始配置:
下面以github上建立一個測試項目示范:
前置工作:
登錄github - > 創(chuàng)建一個項目 -> 上傳helloA項目 -> 復制git路徑
5 : 開始配置iOS項目:
構建觸發(fā)器模塊,可根據需要選擇性勾選Build periodically選項贰剥,即按照預先設定的時間自動化構建倾剿。
定時器構建語法
* * * * *
星號中間用 空格 隔開
第一個表示分鐘,取值0~59
第二個表示小時蚌成,取值0~23
第三個表示一個月的第幾天前痘,取值1~31
第四個表示第幾月凛捏,取值1~12
第五個*表示一周中的第幾天,取值0~7芹缔,其中0和7代表的都是周日
用法舉例:
每30分鐘構建一次:H代表形參
H/30 * * * *
每2個小時構建一次:
H H/2 * * *
每天的8點坯癣,12點,22點最欠,一天構建3次: (多個時間點中間用逗號隔開)
0 8,12,22 * * *
每天早上8點到晚上6點每三小時檢查一次
H 8-18/3 * * *
Build periodically(定時構建):周期進行項目構建(它不care源碼是否發(fā)生變化)
Poll SCM(輪訓 SCM):定時檢查源碼變更(根據SCM軟件的版本號)坡锡,如果有更新就checkout最新code下來,然后執(zhí)行構建動作窒所。
shell腳本:
# !/bin/bash -ex
# export LANG=en_US.UTF-8
# 工作空間位置
WORKSPACE="/Users/niexiaobo/.jenkins/workspace"
platforms="artABC"
ProjectName="helloA"
# 切換到工程目錄
cd ${WORKSPACE}/${platforms}/${ProjectName}
# 打開鑰匙串
security unlock-keychain -p ${password} ~/Library/Keychains/login.keychain
# pastry命令行將外層的 www 目錄 合并到 平臺內的 www 目錄
# /Users/Shared/Jenkins/Documents/pastry/bin/pastry bake cordova prepare ${platforms}
# 配置 版本號
buildNumber="Jenkins:${BUILD_NUMBER} svn:${SVN_REVISION}"
# 獲取配置文件地址
PROJECT_INFOLIST="${WORKSPACE}/${platforms}/${ProjectName}/${ProjectName}/Info.plist"
# 修改配置文件 的 版本號
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${buildNumber}" "${PROJECT_INFOLIST}"
# 編譯(單工程用-target,多工程用-workspace)
packageOut="${WORKSPACE}/package_Out"
#執(zhí)行 (生成.xcarchive文件)
xcodebuild archive -scheme "${ProjectName}" -configuration "Release" -archivePath "${packageOut}/${ProjectName}/xc_${BUILD_NUMBER}.xcarchive"
#導出ipa
xcodebuild -exportArchive -archivePath "${packageOut}/${ProjectName}/xc_${BUILD_NUMBER}.xcarchive" -exportOptionsPlist "${packageOut}/${ProjectName}/ExportOptions.plist" -exportPath "${packageOut}/${ProjectName}/ipa_${BUILD_NUMBER}"
6 : 保存完成后,在首頁項目中就可以進行:
6.1 創(chuàng)建工程項目helloA
xcode工具打開,設置開發(fā)者信息,編譯成功 , 將項目上傳到git云端
進入Jenkins首頁,可點擊項目右側按鈕手動執(zhí)行:
點擊上面項目artABC進入:
點擊某一次編譯,可查看編譯日志等等:
7 關于上面shell腳本:
下面了解如何使用命令進行打包:
7.1 新版本xcode 打包 xcodebuild -exportArchive 命令
下面在
終端窗口,cd 命令進入項目路徑, 再進行操作
cd /Users/niexiaobo/.jenkins/workspace/artABC/helloA
(1)執(zhí)行 xcodebuild clean 進行清除
(2)執(zhí)行 (生成.xcarchive文件)
xcodebuild archive -scheme "helloA" -configuration "Release" -archivePath "/Users/niexiaobo/.jenkins/workspace/package_Out/helloA/1.xcarchive"
(3)添加ExportOptions.plist文件到某個路徑
一般我們通過xcode打包有幾種打包選項:
最后當我們導出文件時,會包含以下4種文件
其中ExportOptions.plist文件就包含了導出ipa文件的一些設置:
(4)導出包 格式://xxx.plist代表指定的exportOptionsPlist文件帆锋;
xcodebuild -exportArchive -archivePath xxx.xcarchive -exportOptionsPlist xxx.plist -exportPath ./Product
(如果項目沒用選擇Profile, 需要添加-exportProvisioningProfile 參數(shù))
命令示例:
xcodebuild -exportArchive -archivePath "/Users/niexiaobo/.jenkins/workspace/package_Out/helloA/1.xcarchive" -exportOptionsPlist "/Users/niexiaobo/.jenkins/workspace/package_Out/helloA/ExportOptions.plist" -exportPath "/Users/niexiaobo/.jenkins/workspace/package_Out/helloA/helloAipa"
7.2 xcode 舊版本 打包 命令
進入項目路徑
cd /Users/niexiaobo/.jenkins/workspace/artABC/helloA
(1) 編譯項目(工程目錄下會多出一個 build 文件夾)
xcodebuild -project helloA.xcodeproj -target helloA -configuration Release
(2) PackageApplication命令:
Xcode升級到8.3后(8.3以下直接最后一步打包) 用PackageApplication命令進行打包 提示下面這個錯誤
xcrun: error: unable to find utility "PackageApplication", not a developer tool or in PATH
PackageApplication下載地址:
鏈接: https://pan.baidu.com/s/14LYFvPQb6YJKL0Iy1Kzreg 提取碼: br8v
解壓后存到下面目錄下:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/
然后執(zhí)行:
sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer/
然后執(zhí)行PackageApplication:
chmod +x /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/PackageApplication
(3) 最后進行打包
xcrun -sdk iphoneos PackageApplication -v /Users/niexiaobo/.jenkins/workspace/artABC/helloA/build/Release-iphoneos/helloA.app -o /Users/niexiaobo/.jenkins/workspace/package_Out/helloA_3.ipa
8 : 打包使用CocoaPods項目時
(8.2) 首先安裝CocoaPods環(huán)境
1 安裝CocoaPods環(huán)境
2 pod init //生成 podfile
3 編輯podfile文件
比如添加 : pod 'Reachability', '~> 3.0.0'
4 安裝
pod install
或者:
pod install --verbose --no-repo-update
5 最后會生成helloA.xcworkspace
文件, 也是以后項目啟動文件
(8.2) 然后在.git位置添加忽略文件.gitignore, 然后提交項目到git云端
內容:
#CocoaPods
Pods/
# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
# Mac OS X Finder and whatnot
.DS_Store
## Build generated
build/
DerivedData/
## Various settings
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata/
## Other
*.moved-aside
*.xcuserstate
*.xccheckout
## Obj-C/Swift specific
*.hmap
*.ipa
*.dSYM.zip
*.dSYM
這時候如果直接在Jenkins上打包會報錯, 拉下來的代碼會依然運行helloA.xcodeproj文件, 自然編譯就會報錯.
(8.2) 添加插件
下載
需要下載兩個插件:token-macro.hpi和xcode-plugin.hpi吵取,
https://updates.jenkins-ci.org/download/plugins/token-macro/
https://updates.jenkins-ci.org/download/plugins/xcode-plugin/
在jenkins安裝插件位置:
jenkins->系統(tǒng)管理(Manage Jenkins
)->管理插件(Manage plugin
)->高級advance
->上傳插件.
先上傳安裝token-macro.hpi
,再上傳安裝code-plugin.hpi
锯厢,安裝完后重啟(http://localhost:8080/restart)皮官,即可在構建中看到xcode選項。
上傳插件
進入Manage Jenkins 菜單
進入管理插件欄:
找到上傳插件:
先上傳安裝token-macro.hpi实辑,再上傳安裝code-plugin.hpi捺氢,
安裝完后重啟
http://localhost:8080/restart
(8.3) 配置shell腳本
修改腳本:
(1)由于pod相關文件均被git忽略,clone下來后需要update一下
(2)pod管理使用的是.xcworkspace文件,打包命令需要指定文件
#!/bin/sh
WORKSPACE="/Users/niexiaobo/.jenkins/workspace"
platforms="artABC"
ProjectName="helloA"
# 切換到工程目錄
cd ${WORKSPACE}/${platforms}/${ProjectName}
# 打開鑰匙串
security unlock-keychain -p ${password} ~/Library/Keychains/login.keychain
# pastry命令行將外層的 www 目錄 合并到 平臺內的 www 目錄
# /Users/Shared/Jenkins/Documents/pastry/bin/pastry bake cordova prepare ${platforms}
# 配置 版本號
buildNumber="Jenkins:${BUILD_NUMBER} svn:${SVN_REVISION}"
echo "版本號:${BUILD_NUMBER}"
# 獲取配置文件地址
PROJECT_INFOLIST="${WORKSPACE}/${platforms}/${ProjectName}/${ProjectName}/Info.plist"
echo "配置文件地址${PROJECT_INFOLIST}"
# 修改配置文件 的 版本號
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${buildNumber}" "${PROJECT_INFOLIST}"
packageOut="${WORKSPACE}/package_Out"
# 檢查pod更新
pod install --verbose --no-repo-update
# clean 項目:
xcodebuild -workspace "${WORKSPACE}/${platforms}/${ProjectName}/${ProjectName}.xcworkspace" -scheme "${ProjectName}" -configuration "Release" clean
# 生成archive 文件:
xcodebuild archive -workspace "${WORKSPACE}/${platforms}/${ProjectName}/${ProjectName}.xcworkspace" -scheme "${ProjectName}" -archivePath "${packageOut}/${ProjectName}/xc_${BUILD_NUMBER}.xcarchive" -configuration "Release"
# 導出ipa文件:
xcodebuild -exportArchive -archivePath "${packageOut}/${ProjectName}/xc_${BUILD_NUMBER}.xcarchive" -exportOptionsPlist "${packageOut}/${ProjectName}/ExportOptions.plist" -exportPath "${packageOut}/${ProjectName}/ipa_${BUILD_NUMBER}" -allowProvisioningUpdates
保存,編譯
(8.4)當然不使用shell腳本也行, 如下步驟配置:
進入項目
-配置configure
->刪除execute shell
點擊- 導出IPAexport IPA
:
/Users/niexiaobo/.jenkins/workspace/package_Out/helloA/
ad-hoc
helloA${BUILD_DATE}
/Users/niexiaobo/.jenkins/workspace/package_Out/helloA/export/2/
在Keychain path那里填寫${HOME}/Library/Keychains/login.keychain
helloA
/Users/niexiaobo/.jenkins/workspace/artABC/helloA/helloA
/Users/niexiaobo/.jenkins/workspace/artABC/helloA/
配置完成后保存.
然后回到項目編譯.
9 : 打包上傳到fir
9.1 通過shell上傳
(1)安裝插件 (需要插件支持才能上傳)
打開Mac 終端,輸入命令:
sudo gem install fir-cli
安裝成功:
(2) 獲取token (需要校驗,相當于登錄賬戶密碼)
安裝完插件后, 登錄fir, 移動到右上角賬號,選擇api token :
生成token
(2) 修改已經配置的 shell腳本
假設上面生成的token是 1234567894567890
在腳本最后添加一行:
#!/bin/sh
WORKSPACE="/Users/niexiaobo/.jenkins/workspace"
platforms="artABC"
ProjectName="helloA"
.....
.....
.....
# 導出ipa文件:
xcodebuild -exportArchive -archivePath "${packageOut}/${ProjectName}/xc_${BUILD_NUMBER}.xcarchive" -exportOptionsPlist "${packageOut}/${ProjectName}/ExportOptions.plist" -exportPath "${packageOut}/${ProjectName}/ipa_${BUILD_NUMBER}" -allowProvisioningUpdates
#上傳ipa文件到fir (發(fā)布App Store的包不允許)
fir publish "${packageOut}/${ProjectName}/ipa_${BUILD_NUMBER}/${ProjectName}.ipa" -T "1234567894567890" -c "Uploaded by fir-jenkins plugin"
現(xiàn)在可以構建代碼了.
構建完成后fir下載地址:
9.2 通過Jenkins 插件上傳
(1)下載插件
-> fir 插件下載地址
(2)安裝插件
在jenkins安裝插件位置:
jenkins->系統(tǒng)管理(Manage Jenkins)->管理插件(Manage plugin)->高級advance->上傳fir-plugin.hpi插件.
(3)編輯配置:添加構建事件- > 上傳到fir
添加token , ipa包的文件夾路徑(最后沒有斜杠"/" )
保存后構建項目即可.
-------end---------