Jenkins在Mac上的安装与使用

一、Jenkins的作用

我要这Jenkins有何用?结合使用经验,简单总结如下:

1.一旦在Jenkins服务器上把项目配置好,就可持续集成(CI),分分钟打包,让开发者从繁琐的集成中解脱出来,专注于更为重要的业务逻辑上。

比如测试人员找开发者打包,而开发者正在修改项目代码,一般使用Xcode等工具打包,要先注释掉正在修改中的代码,避免未经验证的代码产生bug,打包之后再把注释掉的代码恢复。这非常影响开发者的逻辑思路,若正在修改的代码量很多就悲催了。但使用Jenkins,会直接拷贝SVN(或其它源代码仓库)上检入的最新代码到工作空间进行打包,和开发者计算机本地的代码互不影响,也不用担心打包之前忘记更新代码。开发者只需连接SVN内网后,在Jenkins页面上点击打包按钮,即可一键完成打包任务。

2.Jenkins构建可记录SVN的提交版本号,能监控每次打包对应的代码更新内容,从而有效的定位不同版本的包产生的问题所在位置。
3.Jenkins的多样化特性,使它能人性化地服务于开发团队:

⦁ 易于安装,无需数据库支持,界面化配置操作简单方便;
⦁ 可预设集成时间,支持自动化构建,如每晚九点自动打包;
⦁ 构建完成后,支持声音提醒及Email通知打包结果;
⦁ 提供详细的日志,能实时监控集成中存在的错误;
⦁ 支持分布式构建,可让多台计算机一起打包测试;
⦁ 提供大量开源插件,并支持扩展插件,可开发适合自己团队使用的工具;

二、Jenkins的安装

在Mac终端输入命令行:java -version,查看java运行环境
若没有安装java,则先下载并安装java环境。(下载地址点我

安装后查看到版本如下:

然后下载jenkins 的pkg安装文件(下载地址点我),双击打开一步步安装完成后,会自动使用默认浏览器打开http://localhost:8080/ 的网址,且共享目录下多出一个Jenkins用户。

在本地文件夹前往/Users/Shared/Jenkins/Home/secrets/initialAdminPassword路径,需要更改secrets文件夹的everyone的权限后,打开initialAdminPassword文件,复制出密码,粘贴到网页的输入框中。

下面安装Jenkins的插件:

创建管理员用户和密码,点击下一步:

Jenkins安装完毕,点击start using jenkins 按钮,即可进入Jenkins管理页面!

三、配置iOS项目

Jenkins创建iOS项目,有两种配置方法,一种是用shell脚本配置,另一种是用Xcode插件配置,个人推荐使用脚本配置项目,成功率高,可控性强!

(1)Shell脚本配置方法

点击"新建",输入item的名称,选择"构建一个自由风格的软件项目",点击"OK"。

下面依次配置模块:General->源码管理->构建触发器->构建环境->构建->构建后操作。
General模块主要填写三个地方:项目名称及描述、丢弃旧的构建、参数化构建过程

源码管理模块,我这里配置的是SVN的地址及账号:

构建触发器模块,可根据需要选择性勾选Build periodically选项,即按照预先设定的时间自动化构建。日程表的填写内容有5个参数,从左到右的参数含义如下:
⦁ 第1个参数:分钟 minute,取值 0~59;
⦁ 第2个参数:小时 hour,取值 0~23;
⦁ 第3个参数:天 day,取值 1~31;
⦁ 第4个参数:月 month,取值 1~12;
⦁ 第5个参数:星期 week,取值 0~7,0 和 7 都是表示星期天;
5个参数可选择性设定,不写死的参数用 * 号代替,参数之间用空格隔开。例如"0 21 * * *"表示每晚21点0分自动化构建一次,"0 * * * *"表示每个小时的第0分钟执行一次构建等。

构建环境模块需要安装一个NodeJS插件,此时先点击保存按钮保存配置好的参数,然后点击左上角的Jenkins,找到系统管理,点击管理插件,点击可选插件,在过滤条中输入"NodeJS",查找到NodeJS Plugin插件,直接安装此插件。

安装完成后回到系统管理,点击Global Tool Configuration工具,找到NodeJS选项配置插件,自定义别名,安装目录填写“/usr/local”,点击左下角保存按钮。

这里在系统管理->系统设置中,点击顶部主目录旁边的"高级"按钮,可顺便配置工作空间根目录和构建记录根目录。

回到项目的配置页面,发现构建环境模块里多出了“Provide Node & npm bin/ folder to PATH”选项,勾选它并选中刚刚配置的NodeJS插件别名。

构建模块,点击增加构建步骤里的Execute shell,编辑shell脚本,配置打包过程。

以下是我配置的具体脚本内容,其中工程目录可根据需要自定义,带有 * 号的item名称和证书信息部分要换成与自己工程相对应的内容:

# !/bin/bash -ex
# export LANG=en_US.UTF-8
# 工作空间位置
WORKSPACE="/Users/Shared/Jenkins/Home/jobs/****/workspace"
# 切换到工程目录
cd ${WORKSPACE}/${ProjectName}/platforms/${platforms}
# 打开钥匙串
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}/${ProjectName}/platforms/${platforms}/${ProjectName}/${ProjectName}-Info.plist"
# 修改配置文件 的 版本号
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${buildNumber}" "${PROJECT_INFOLIST}"
# 编译(单工程用-target,多工程用-workspace)
xcodebuild -target ${ProjectName} -scheme ${ProjectName} clean build -configuration ${mode}\
PROVISIONING_PROFILE="****"\
CODE_SIGN_IDENTITY="****"\
PRODUCT_BUNDLE_IDENTIFIER="****"\
SYMROOT=${WORKSPACE}/Sym.root
# ipa包的导出目录
packageOut="${WORKSPACE}/package_Out"
# 删除旧包,重新创建目录
rm -rdf ${packageOut}
mkdir -p ${packageOut}
# 打包
xcrun -sdk iphoneos PackageApplication -v "${WORKSPACE}/Sym.root/${mode}-iphoneos/${ProjectName}.app" \
-o "${packageOut}/${ProjectName}_${BUILD_NUMBER}.ipa"
# pastry命令行编译打包
# /Users/Shared/Jenkins/Documents/pastry/bin/pastry bake compile ${platforms} -m ${mode} -bc "${bc}"

构建后操作模块,点击"增加构建后操作步骤"按钮,选择"Archive the artifacts",在用于存档的文件输入框中输入"package_Out/*",这样构建完成后,生成的ipa包链接就会显示在页面上,点击链接即可把ipa包下载到本地。

配置完毕,返回Jenkins->item页面,点击Build with Parameters选项,点击"开始构建"按钮,即可一键打包!打包过程中,可点击屏幕左下角构建历史中的本次构建版本,然后点击Console Output选项查看控制台输出的详细日志,可实时查看本次构建明细。

构建完成后,查看构建历史,蓝色圆球代表构建成功,红色圆球代表构建失败,灰色圆球代表构建中断。点击本次构建记录,可查看对应的SVN提交版本号及修改明细。点击构建产生文件下的链接,即可把ipa包下载到本地。

(2)Xcode插件配置方法

此种方法的模块配置和脚本配置过程基本一致,主要不同的是"构建环境"和"构建"两个模块,这里要安装Xcode integration和Keychains and Provisioning Profiles Management两个插件。

首先配置证书和描述文件,进入系统管理->Keychains and Provisioning Profiles Management页面,把"/Users/管理员用户名/Library/Keychains/login.keychain"目录下的login.keychain文件拖拽到页面中的"选取文件"按钮上,点击upload按钮,Jenkins会把这个Keychain文件拷贝到/Users/Shared/Jenkins/Library/Keychains/login.keychain目录下。同样原理,把/Users/管理员用户名/Library/MobileDevice/Provisioning Profiles目录下的工程描述文件也拖拽到"选取文件"按钮上,并点击upload按钮。

回到item配置的"构建环境"模块,勾选Keychains and Code Signing Identities和Mobile Provisioning Profiles两个选项,查看参数是否自动配置正确。若参数输入框没有自动匹配,点击保存按钮,退出再次进入配置页面,即可看到相应的证书和描述文件了。

下面进入"构建"模块,点击"增加构建步骤"按钮,选择"Xcode"选项。General build settings部分依次填写工程Target名->勾选清除缓存->填写打包模式(Debug、Release)->勾选"Pack application, build and sign .ipa?"->填写ipa名称及导出路径。

Code signing & OS X keychain options部分勾选"Unlock Keychain?",填写钥匙串文件路径和密码,钥匙串密码一般就是开机密码。

注意如果项目使用了Cocoapods,则需要配置Advanced Xcode build options部分的设置,文件无需写扩展名。至此,Xcode插件方法配置完毕,可以开始构建了。

四、配置Android项目

配置安卓项目需安装两个插件:Gradle Plugin和Android Emulator Plugin,具体安装步骤同上。同样需要安装java环境,并把java路径配置到系统环境变量中,参考如何在mac下配置Java环境变量

下面点击Jenkins ->系统管理 –>系统设置 –> Environment variables 来编辑环境变量:

同样构建一个自由风格的软件项目,配置好SVN源码管理模块。不同的是,在"构建"模块要选择Invoke Gradle Script来配置参数:勾选Use Gradle Wrapper选项,在Tasks一栏中填写"clean build",勾选Force GRADLE_USER_HOME to use workspace选项,点击保存。

配置完毕,可开始构建打包。构建完成后点击apk文件链接,可直接把包下载到本地。

五、问题总结

1.若构建卡在编译那里,先在工作空间中,用Xcode打开工程编译成功一次,再重新构建;

2.确保SVN仓库地址不要存在中文,并且构建时要连接SVN内网;

3.若提示找不到证书和描述文件,打开钥匙串,设置证书权限为"允许所有应用程序访问此项目",并删除钥匙串存在的过期证书;

4.遇到不好定位的构建失败问题,可尝试清理工作空间,重新构建;

5.使用Xcode8以后的版本,在用Jenkins构建时可能提示xib文件报错,把工程里所有的xib文件打开方式设置为用"Xcode 7.x"打开,提交修改至SVN,重新构建;


6.相关Terminal命令

若在浏览器重启Jenkins,直接在本地网址后面加上restart即可,如:
http://localhost:8080/restart

Mac终端启动Jenkins服务:
sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist

Mac中终端停止Jenkins服务:
sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist

Mac终端卸载Jenkins:
~/Library/Application Support/Jenkins/Uninstall.command

Mac终端显示系统隐藏文件,需按option+cmd+esc重启Finder:
defaults write ~/Library/Preferences/com.apple.finder AppleShowAllFiles -bool true

Mac终端不显示系统隐藏文件,需按option+cmd+esc重启Finder:
defaults write ~/Library/Preferences/com.apple.finder AppleShowAllFiles -bool false

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

推荐阅读更多精彩内容