打開終端:
1 : 安裝jenkins (當(dāng)前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.
根據(jù)提示更新:
brew cask install homebrew/cask-versions/adoptopenjdk8
Updating Homebrew...
重新安裝jenkins
brew install jenkins
然后執(zhí)行war包(更換對應(yīng)的版本號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 (當(dāng)前11)
brew cask install java11
重新執(zhí)行war包(更換對應(yīng)的版本號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 :打開網(wǎng)址
如果已經(jīng)安裝過的,提示登錄: 如果第一次安裝會提示設(shè)置賬戶密碼
根據(jù)安裝日志顯示/Users/{你的電腦名}/.jenkins/
安裝地址:
/Users/niexiaobo/.jenkins/
初始密碼:
(網(wǎng)上說)在本地文件夾前往/Users/Shared/Jenkins/Home/secrets/initialAdminPassword路徑,需要更改secrets文件夾的everyone的權(quán)限后,打開initialAdminPassword文件,復(fù)制出密碼,粘貼到網(wǎng)頁的輸入框中。
(本人沒找到[由于電腦以前安裝過Jenkins,可能有些步驟沒有],所以暫時使用下面免密登錄)
免密登錄:
修改 config.xml 設(shè)置
/Users/niexiaobo/.jenkins/config.xml 文件中
<useSecurity>true</useSecurity> 修改為false ,
然后終端重啟:
brew services restart Jenkins
也可以通過打開地址
http://localhost:8080/restart 重啟
首次安裝會有個安裝過程:
創(chuàng)建用戶/密碼:
點(diǎn)擊即可開始創(chuàng)建新的項(xiàng)目:
4 :創(chuàng)建新的項(xiàng)目之前,需要先安裝一個nodejs插件:
往下滾動找到插件管理:
安裝里搜索nodejs,然后點(diǎn)擊按鈕,立即生效:
創(chuàng)建新的項(xiàng)目,開始配置:
下面以github上建立一個測試項(xiàng)目示范:
前置工作:
登錄github - > 創(chuàng)建一個項(xiàng)目 -> 上傳helloA項(xiàng)目 -> 復(fù)制git路徑
5 : 開始配置iOS項(xiàng)目:
構(gòu)建觸發(fā)器模塊,可根據(jù)需要選擇性勾選Build periodically選項(xiàng),即按照預(yù)先設(shè)定的時間自動化構(gòu)建。
定時器構(gòu)建語法
* * * * *
星號中間用 空格 隔開
第一個表示分鐘,取值0~59
第二個表示小時,取值0~23
第三個表示一個月的第幾天,取值1~31
第四個表示第幾月,取值1~12
第五個*表示一周中的第幾天,取值0~7,其中0和7代表的都是周日
用法舉例:
每30分鐘構(gòu)建一次:H代表形參
H/30 * * * *
每2個小時構(gòu)建一次:
H H/2 * * *
每天的8點(diǎn),12點(diǎn),22點(diǎn),一天構(gòu)建3次: (多個時間點(diǎn)中間用逗號隔開)
0 8,12,22 * * *
每天早上8點(diǎn)到晚上6點(diǎn)每三小時檢查一次
H 8-18/3 * * *
Build periodically(定時構(gòu)建):周期進(jìn)行項(xiàng)目構(gòu)建(它不care源碼是否發(fā)生變化)
Poll SCM(輪訓(xùn) SCM):定時檢查源碼變更(根據(jù)SCM軟件的版本號),如果有更新就checkout最新code下來,然后執(zhí)行構(gòu)建動作。
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 目錄 合并到 平臺內(nèi)的 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"
#導(dǎo)出ipa
xcodebuild -exportArchive -archivePath "${packageOut}/${ProjectName}/xc_${BUILD_NUMBER}.xcarchive" -exportOptionsPlist "${packageOut}/${ProjectName}/ExportOptions.plist" -exportPath "${packageOut}/${ProjectName}/ipa_${BUILD_NUMBER}"
6 : 保存完成后,在首頁項(xiàng)目中就可以進(jìn)行:
6.1 創(chuàng)建工程項(xiàng)目helloA
xcode工具打開,設(shè)置開發(fā)者信息,編譯成功 , 將項(xiàng)目上傳到git云端
進(jìn)入Jenkins首頁,可點(diǎn)擊項(xiàng)目右側(cè)按鈕手動執(zhí)行:
點(diǎn)擊上面項(xiàng)目artABC進(jìn)入:
點(diǎn)擊某一次編譯,可查看編譯日志等等:
7 關(guān)于上面shell腳本:
下面了解如何使用命令進(jìn)行打包:
7.1 新版本xcode 打包 xcodebuild -exportArchive 命令
下面在
終端窗口,cd 命令進(jìn)入項(xiàng)目路徑, 再進(jìn)行操作
cd /Users/niexiaobo/.jenkins/workspace/artABC/helloA
(1)執(zhí)行 xcodebuild clean 進(jìn)行清除
(2)執(zhí)行 (生成.xcarchive文件)
xcodebuild archive -scheme "helloA" -configuration "Release" -archivePath "/Users/niexiaobo/.jenkins/workspace/package_Out/helloA/1.xcarchive"
(3)添加ExportOptions.plist文件到某個路徑
一般我們通過xcode打包有幾種打包選項(xiàng):
最后當(dāng)我們導(dǎo)出文件時,會包含以下4種文件
其中ExportOptions.plist文件就包含了導(dǎo)出ipa文件的一些設(shè)置:
(4)導(dǎo)出包 格式://xxx.plist代表指定的exportOptionsPlist文件;
xcodebuild -exportArchive -archivePath xxx.xcarchive -exportOptionsPlist xxx.plist -exportPath ./Product
(如果項(xiàng)目沒用選擇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 舊版本 打包 命令
進(jìn)入項(xiàng)目路徑
cd /Users/niexiaobo/.jenkins/workspace/artABC/helloA
(1) 編譯項(xiàng)目(工程目錄下會多出一個 build 文件夾)
xcodebuild -project helloA.xcodeproj -target helloA -configuration Release
(2) PackageApplication命令:
Xcode升級到8.3后(8.3以下直接最后一步打包) 用PackageApplication命令進(jìn)行打包 提示下面這個錯誤
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) 最后進(jìn)行打包
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項(xiàng)目時
(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
文件, 也是以后項(xiàng)目啟動文件
(8.2) 然后在.git位置添加忽略文件.gitignore, 然后提交項(xiàng)目到git云端
內(nèi)容:
#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上打包會報(bào)錯, 拉下來的代碼會依然運(yùn)行helloA.xcodeproj文件, 自然編譯就會報(bào)錯.
(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),即可在構(gòu)建中看到xcode選項(xiàng)。
上傳插件
進(jìn)入Manage Jenkins 菜單
進(jìn)入管理插件欄:
找到上傳插件:
先上傳安裝token-macro.hpi,再上傳安裝code-plugin.hpi,
安裝完后重啟
http://localhost:8080/restart
(8.3) 配置shell腳本
修改腳本:
(1)由于pod相關(guān)文件均被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 目錄 合并到 平臺內(nèi)的 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 項(xiàng)目:
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"
# 導(dǎo)出ipa文件:
xcodebuild -exportArchive -archivePath "${packageOut}/${ProjectName}/xc_${BUILD_NUMBER}.xcarchive" -exportOptionsPlist "${packageOut}/${ProjectName}/ExportOptions.plist" -exportPath "${packageOut}/${ProjectName}/ipa_${BUILD_NUMBER}" -allowProvisioningUpdates
保存,編譯
(8.4)當(dāng)然不使用shell腳本也行, 如下步驟配置:
進(jìn)入項(xiàng)目
-配置configure
->刪除execute shell
點(diǎn)擊- 導(dǎo)出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/
配置完成后保存.
然后回到項(xiàng)目編譯.
9 : 打包上傳到fir
9.1 通過shell上傳
(1)安裝插件 (需要插件支持才能上傳)
打開Mac 終端,輸入命令:
sudo gem install fir-cli
安裝成功:
(2) 獲取token (需要校驗(yàn),相當(dāng)于登錄賬戶密碼)
安裝完插件后, 登錄fir, 移動到右上角賬號,選擇api token :
生成token
(2) 修改已經(jīng)配置的 shell腳本
假設(shè)上面生成的token是 1234567894567890
在腳本最后添加一行:
#!/bin/sh
WORKSPACE="/Users/niexiaobo/.jenkins/workspace"
platforms="artABC"
ProjectName="helloA"
.....
.....
.....
# 導(dǎo)出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)在可以構(gòu)建代碼了.
構(gòu)建完成后fir下載地址:
9.2 通過Jenkins 插件上傳
(1)下載插件
-> fir 插件下載地址
(2)安裝插件
在jenkins安裝插件位置:
jenkins->系統(tǒng)管理(Manage Jenkins)->管理插件(Manage plugin)->高級advance->上傳fir-plugin.hpi插件.
(3)編輯配置:添加構(gòu)建事件- > 上傳到fir
添加token , ipa包的文件夾路徑(最后沒有斜杠"/" )
保存后構(gòu)建項(xiàng)目即可.
-------end---------