Jenkins部署MacOS Slave实现持续集成(iOS)

解决Linux服务器上的Jenkins无法构建Xcode工程

前言

由于Linux服务器无法安装Xcode,所以Jenkins无法通过shell来调用xcodebuild、xcrun等命令来构建Xcode工程,因此无法持续集成,敏捷开发。下面介绍一种配置Jenkins节点的方式,来实现Linux上的Jenkins构建Xcode工程,并上传ipa到蒲公英pgyer来进行测试。

一、配置MacOS Slave

Jenkins有个强大的功能,配置Slave(奴隶)服务器,来实现分布式部署构建。具体步骤如下:

1. 配置Mac电脑。

系统偏好设置 > 共享 中开启 远程登录,如下图:

2. 创建节点。

Jenkins > 系统管理 > 管理节点 > 新建节点,输入节点名称,记得勾选 Permanent Agent,点击OK。

3. 配置节点。

其中要保证/User/Shared/Jenkins/目录的权限为ssh链接的用户可读写。

Host是Mac的ip地址,Credentials是ssh登录Mac时需要的账户和密码。可以添加一个

下面的部分很重要

PATH环境变量,需要在Mac上通过

echo $PATH
/opt/iOSOpenDev/bin:/opt/local/bin:/opt/local/sbin:/opt/local/bin:/opt/local/sbin:/opt/local/bin:/opt/local/sbin:/opt/local/bin:/opt/local/sbin:/opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/local/bin:/opt/local/sbin/

获取,然后copy过去。

Keychains and Provisioning Profiles路径要填写正确。没有这个选项的安装Keychains and Provisioning Profiles Management插件。

4. 最后保存。

如果看到

即添加Mac Slave成功,且Mac Slave在线。若连不上,请反复确认远程工作目录的权限。

二、配置Jenkins系统设置。

1. 上传证书和描述文件。

Jenkins > 系统管理 > Keychains and Provisioning Profiles Management中上传打包用的证书和描述文件。如下图:

保存。

2. 在 Jenkins > 系统管理 > 系统设置(全局设置)中设置:

很关键。Keychain的路径和密码需要填写Mac中登录用户的密码。

3. 在 Jenkins > 系统管理 > Configure Global Security 中配置:

开启Safe HTML。

三、配置iOS项目。

1. 安装插件。

安装 build-name-setterdescription setter plugin插件。

2. Jenkins > 新建

3. General.

这里添加了参数化构建过程,为了在每次Build时,可以填写更新说明,所以这里天添加了名为News的参数,当用户构建时填写了内容,可以在之后的脚本中通过${News}来获取News的值。

这里指定Mac Slave服务器作为构建Xcode工程的Slave服务器,Xcode打包构建全部交给这个节点(Slave服务器)来完成。

4. 源码管理。

这里填写本地或者远程的代码仓库(如gitlab或者git)。下面的Branch填写指定分支。

5. 构建触发器。

这里暂时不设置,设置了可以自动化测试,和其他脚本配合使用。

6. 构建环境。

把之前上传的证书和描述文件添加上。

设置Build名称,这里添加了自定义名称。注意,高级里面只勾选第一个,不要勾选 Set build name after build ends,否则会报错。

7. 构建

这里使用的脚本。

export LANG="en_US.UTF-8"

security -v unlock-keychain -p "yourpassword"

ipa_name="URWork_iOS_beta"
build_path="${WORKSPACE}/build/"
fastlane gym --workspace URWorkClient.xcworkspace --scheme URWorkClient --clean --configuration Beta --export_method ad-hoc --output_name ${ipa_name} --output_directory ${build_path}

curl -F "file=@${build_path}${ipa_name}.ipa" \
-F "uKey=yourUKey" \
-F "_api_key=yourApiKey" \
-F "updateDescription=${News}" \
https://www.pgyer.com/apiv1/app/upload

最重要、最重要、最重要:

Linux服务器上的Jenkins调用Mac Slave时,是通过之前设置的SSH登录的方式,而Apple为了安全,在ssh登录时,是不允许读取Keychains(钥匙串)的,所以 security -v unlock-keychain -p "yourpassword"这行命令就很重要了。在构建打包前,先解锁Keychains。

当然这里 fastlane 已经提前通过Homebrew安装好了,这里不再赘述。

整体脚本的流程是,先解锁Keychain,然后用fastlane快速打包,最后上传到蒲公英平台,等待测试。

8. 构建后操作。

附代码:

<h3>更新说明:</h3><p>${News}</p><a href="http://www.pgyer.com/urwork_ios" style="display:block;margin:10px 0px;" target="_blank">点击跳转到下载页</a></br>![](http://upload-images.jianshu.io/upload_images/5912049-8dc3cdb1c798b7e3?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

构建完成后,把之前用户输入的更新说明以及蒲公英下载地址二维码通通显示在Build Description中。

四、整体测试

1. 打开Jenkins。

2. 点击develop_iOS。

3. 点击Build with Parameters.

4. 开始构建。

5. 等待构建完成即可。

这里也可以查看构建进度:点击最新的一次构建

点击Console Output


在这里可以查看一些日志,如果出错了,也可以在这里查询。

五、总结。

使用Jenkins打包Xcode工程整体过程很曲折,坑很多,按照这些来,可能还会遇到一些问题,附上一些链接,以供参考。

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

推荐阅读更多精彩内容