打开终端:
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
然后执行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
重新执行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
重新执行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 文件,没有就创建:
StandardOutPath
/var/log/jenkins/jenkins.log
StandardErrorPath
/var/log/jenkins/jenkins.log
EnvironmentVariables
JENKINS_HOME
/Users/xxx/Jenkins/Home
GroupName
daemon
KeepAlive
Label
org.jenkins-ci
ProgramArguments
/bin/bash
/Library/Application Support/Jenkins/jenkins-runner.sh
RunAtLoad
UserName
jenkins
SessionCreate
Jenkins安装时会启动创建名为jenkins的用户,
修改文件:/Library/LaunchDaemons/org.jenkins-ci.plist
里面的GroupName和UserName,
可以将该文件cp到另一个路径修改后再覆盖过来,
然后重启Jenkins(brew services restart Jenkins)即可。
3 :打开网址
http://localhost:8080/
如果已经安装过的,提示登录: 如果第一次安装会提示设置账户密码
根据安装日志显示/Users/{你的电脑名}/.jenkins/
安装地址:
/Users/niexiaobo/.jenkins/
初始密码:
(网上说)在本地文件夹前往/Users/Shared/Jenkins/Home/secrets/initialAdminPassword路径,需要更改secrets文件夹的everyone的权限后,打开initialAdminPassword文件,复制出密码,粘贴到网页的输入框中。
(本人没找到[由于电脑以前安装过Jenkins,可能有些步骤没有],所以暂时使用下面免密登录)
免密登录:
修改 config.xml 设置
/Users/niexiaobo/.jenkins/config.xml 文件中
然后终端重启:
brew services restart Jenkins
也可以通过打开地址
http://localhost:8080/restart 重启
首次安装会有个安装过程:
创建用户/密码:
点击即可开始创建新的项目:
4 :创建新的项目之前,需要先安装一个nodejs插件:
往下滚动找到插件管理:
安装里搜索nodejs,然后点击按钮,立即生效:
创建新的项目,开始配置:
下面以github上建立一个测试项目示范:
前置工作:
登录github - > 创建一个项目 -> 上传helloA项目 -> 复制git路径
5 : 开始配置iOS项目:
构建触发器模块,可根据需要选择性勾选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源码是否发生变化)
Poll SCM(轮训 SCM):定时检查源码变更(根据SCM软件的版本号),如果有更新就checkout最新code下来,然后执行构建动作。
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"
#执行 (生成.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 创建工程项目helloA
xcode工具打开,设置开发者信息,编译成功 , 将项目上传到git云端
进入Jenkins首页,可点击项目右侧按钮手动执行:
点击上面项目artABC进入:
点击某一次编译,可查看编译日志等等:
7 关于上面shell脚本:
下面了解如何使用命令进行打包:
7.1 新版本xcode 打包 xcodebuild -exportArchive 命令
下面在
终端窗口,cd 命令进入项目路径, 再进行操作
cd /Users/niexiaobo/.jenkins/workspace/artABC/helloA
(1)执行 xcodebuild clean 进行清除
(2)执行 (生成.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 参数)
命令示例:
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/
然后执行:
sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer/
然后执行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环境
1 安装CocoaPods环境
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->系统管理(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 (发布App Store的包不允许)
fir publish "${packageOut}/${ProjectName}/ipa_${BUILD_NUMBER}/${ProjectName}.ipa" -T "1234567894567890" -c "Uploaded by fir-jenkins plugin"
现在可以构建代码了.
构建完成后fir下载地址:
9.2 通过Jenkins 插件上传
(1)下载插件
-> fir 插件下载地址
(2)安装插件
在jenkins安装插件位置:
jenkins->系统管理(Manage Jenkins)->管理插件(Manage plugin)->高级advance->上传fir-plugin.hpi插件.
(3)编辑配置:添加构建事件- > 上传到fir
添加token , ipa包的文件夹路径(最后没有斜杠"/" )
保存后构建项目即可.
-------end---------