Mac Jenkins的本地安装和iOS/pods配置使用,以及上传到蒲公英/fir

打开终端:

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 文件,没有就创建:

<?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安装时会启动创建名为jenkins的用户,
修改文件:/Library/LaunchDaemons/org.jenkins-ci.plist

里面的GroupName和UserName,
可以将该文件cp到另一个路径修改后再覆盖过来,
然后重启Jenkins(brew services restart Jenkins)即可。


3 :打开网址

http://localhost:8080/

如果已经安装过的,提示登录: 如果第一次安装会提示设置账户密码


图片.png

根据安装日志显示/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 重启

首次安装会有个安装过程:


图片.png

创建用户/密码:


图片.png
图片.png

点击即可开始创建新的项目:


图片.png

4 :创建新的项目之前,需要先安装一个nodejs插件:

图片.png

往下滚动找到插件管理:


图片.png

安装里搜索nodejs,然后点击按钮,立即生效:


图片.png

创建新的项目,开始配置:

下面以github上建立一个测试项目示范:

前置工作:
登录github - > 创建一个项目 -> 上传helloA项目 -> 复制git路径

5 : 开始配置iOS项目:

图片.png
图片.png
图片.png

构建触发器模块,可根据需要选择性勾选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下来,然后执行构建动作。

图片.png
图片.png
图片.png

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

图片.png

xcode工具打开,设置开发者信息,编译成功 , 将项目上传到git云端


图片.png

进入Jenkins首页,可点击项目右侧按钮手动执行:

图片.png

点击上面项目artABC进入:


图片.png

点击某一次编译,可查看编译日志等等:


图片.png

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"
终端命令:生成.xcarchive文件

(3)添加ExportOptions.plist文件到某个路径
一般我们通过xcode打包有几种打包选项:


图片.png

最后当我们导出文件时,会包含以下4种文件


图片.png

其中ExportOptions.plist文件就包含了导出ipa文件的一些设置:


图片.png

(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 文件, 也是以后项目启动文件

图片.png

(8.2) 然后在.git位置添加忽略文件.gitignore, 然后提交项目到git云端
图片.png

内容:

#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 菜单

进入管理插件栏:


图片.png

找到上传插件:


图片.png

先上传安装token-macro.hpi,再上传安装code-plugin.hpi,

图片.png

安装完后重启
http://localhost:8080/restart

图片.png

(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/

图片.png

在Keychain path那里填写${HOME}/Library/Keychains/login.keychain


图片.png

helloA
/Users/niexiaobo/.jenkins/workspace/artABC/helloA/helloA
/Users/niexiaobo/.jenkins/workspace/artABC/helloA/

图片.png

配置完成后保存.

然后回到项目编译.


图片.png

9 : 打包上传到fir

9.1 通过shell上传

(1)安装插件 (需要插件支持才能上传)

打开Mac 终端,输入命令:

 sudo gem install fir-cli

安装成功:


图片.png
(2) 获取token (需要校验,相当于登录账户密码)

安装完插件后, 登录fir, 移动到右上角账号,选择api token :


图片.png

生成token


图片.png
(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下载地址:


图片.png

9.2 通过Jenkins 插件上传

(1)下载插件

-> fir 插件下载地址

(2)安装插件

在jenkins安装插件位置:
jenkins->系统管理(Manage Jenkins)->管理插件(Manage plugin)->高级advance->上传fir-plugin.hpi插件.

(3)编辑配置:添加构建事件- > 上传到fir
图片.png

添加token , ipa包的文件夹路径(最后没有斜杠"/" )


图片.png

保存后构建项目即可.

-------end---------

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容