Jenkins持续集成iOS项目

1. Jenkins 环境搭建

1.1 Jenkins 安装

1.1.1 从 Jenkins 官网 https://jenkins.io 下载安装包后,点击安装。


Jenkins 安装包下载

1.1.2 安装完成之后,Safari可能会自动打开,如果没有自动打开,打开浏览器,输入http://localhost:8080

如果打开的不是下图的页面,也可以手动在浏览器中输入 http://localhost:8080。


Jenins 安装完成后出现的页面

打开 terminal 命令,获取初始密码:

$ sudo cat /Users/Shared/Jenkins/Home/secrets/initialAdminPassword

输入密码后,点击继续安装 Jenkins插件。

安装Jenkins 插件

在创建用户界面中输入用户名、密码,用于 Jenkins登录。

创建用户

提示:

如果页面出现了问题。可能是Java环境有问题,安装低一点的 jdk 版本即可。

1.2 安装插件


1.2.1 安装 Xcode integration 插件

依次选择系统管理->管理插件,在“可选插件”中选中“Xcode integration”安装。

1.2.2 安装 Keychains and Provisioning Profiles Management 插件

提示:

jenkins 的启动、关闭、重启管理,可以使用命令行完成:

java -jar jenkins.war --httpPort=8080  启动

localhost:8080/restart  重启

localhost:8080/exit      退出

localhost:8080/reload    重新加载

2. Jenkins 配置

2.1 系统设置


系统设置


添加开发证书


添加钥匙串访问

2.2 管理svn, git 的登录账号


登录认证管理


添加svn,git登录账号

3. 创建打包项目

前提:

(1)将 /Users/longhua/Library/MobileDevice 目录下的 Provisioning Profiles 复制到 /Users/Shared/Jenkins/Library/MobileDevice 目录下,直接拷贝MobileDevice文件夹就可以了;

(2)将 /Users/longhua/Library/Keychains 文件夹 复制到 /Users/Shared/Jenkins/Library 目录下;

新建任务1


新建任务2


新建任务3


新建任务4


新建任务5

说明:

要将工程的自动签名管理去掉,选择手动管理。进行手动 archive 。生成的 ExportOptions.plist 拷贝到 /Users/Shared/Jenkins/Home/workspace/MusicPlayer/build 目录下;

将 /Users/longhua/Library/MobileDevice/Provisioning\ Profiles 中对应的 .mobileprovision 文件 拷贝到 /Users/Shared/Jenkins/Library/MobileDevice/Provisioning\ Profiles 中;



新建任务6

点击“立即构建”,进行项目打包。

4. Jenkins 节点使用

4.1 SSH 登录管理

4.1.1 Slave 机器设置


Slave机器设置共享

记住后面的 ssh 登录地址。

4.1.2 Master 中生成 SSH密钥,将公钥拷贝到 Slave 机器的 authorized_keys 文件中

(1)Master 中生成 SSH密钥

//ssh密钥 默认保存在 .ssh 目录下,如果没有生成过就没有,查看Master机器是否有 SSH 密钥

$ open ~/.ssh

//如果没有就生成

$ ssh-keygen -t rsa -C “你的邮箱账号" -b 4096

#可以使用-t选项选择加密方式,包括 RSA 和 DSA 两种密钥

#例如:$ssh-keygen -t dsa 或者ssh-keygen -t rsa

#加密方式不同,key的名称不同,其他没有区别

#如果没有指定密钥,默认RSA

(2) 将公钥拷贝到 Slave 机器的 authorized_keys 文件中

// ssh 登录 Slave机器

$ ssh user@host

The authenticity of host 'host (12.18.429.21)' can't be established.

  RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.

  Are you sure you want to continue connecting (yes/no)?

这段话的意思是,无法确认host主机的真实性,只知道它的公钥指纹,问你还想继续连接吗?

Are you sure you want to continue connecting (yes/no)? yes

系统会出现一句提示,表示host主机已经得到认可。

输入密码登录。

当远程主机的公钥被接受以后,它就会被保存在文件$HOME/.ssh/known_hosts之中。下次再连接这台主机,系统就会认出它的公钥已经保存在本地了,从而跳过警告部分,直接提示输入密码。

// 拷贝 Master 的公钥 id_rsa.pub 到 Slave 机器的 authorized_keys 文件中,可以手动或通过shell命令。

$ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub

4.2 添加节点

4.2.1 Master 的 Credentials 中添加 SSH 账号

将 Master 中的 id_rsa 私钥拷贝到 Private Key 中。

 Credentials 中添加 SSH 账号

4.2.2 新建节点

Master 的 Jenkins 中选择:“系统管理” 》“管理节点” 》“新建节点”,

节点配置

4.3 项目测试


Master中使用节点项目设置1


Master中使用节点项目设置2

常见问题:

(1)启动 slave 节点时出现:

ERROR: Server rejected the 1 private key(s) for XXX (credentialId:21cdf000-1ffd-49d3-8984-e664cc3cf2cd/method:publickey)

[11/10/14 11:25:16] [SSH] Authentication failed.

hudson.AbortException: Authentication failed.

方案:

已经在 Slave 的 authorized_keys文件上添加了 Master 的 id_rsa.pub 公钥,连接时还是报错,

修改 slave 的 authorized_keys 文件权限。

$ chmod 755 ~/.ssh/authorized_keys

(2) 让节点执行 xcodebuild archive 时提示

InstallationBuildProductsLocation/Applications/dd.app: unknown error -1=ffffffffffffffff

Command /usr/bin/codesign failed with exit code 1

** ARCHIVE FAILED **

错误!

方案:

(1.1)登录 Slave 机器的 jenkins 用户,修改 authorized_keys 文件权限。

$ chmod 755 ~/.ssh/authorized_keys

(1.2)修改 Slave 机器的 keyAccess 访问权限

打开钥匙串访问,登录 》我的证书,选中相关的develop, release 证书,找到对应证书下面带钥匙的,点右键选择“显示简介”,选择“允许所有应用程序访问此项目”。

(1.3)Master 机器Jenkins程序中的job 工程的 shell 命令中的

login.keychain 的登录密码是 Slave 的;

5. 参数化构建

下面以svn管理的,混合开发项目为例说明。

参数化构建1
参数化构建2


参数化构建3


参数化构建4


参数化构建5
参数化构建6

说明:

build下需要的文件有:jenkins.sh, HBuilder-Hello-Info-release.plist, ExportOptions.plist(ExportOptions-release.plist)。

jenkins.sh:存放脚本命令

HBuilder-Hello-Info-release.plist:发布时使用的info.plist,里面有个推、分享、地图等key, password值

ExportOptions.plist:debug时使用

ExportOptions-release.plist:release时使用

工程 build的目录文件如下:

参数化构建7

jenkins.sh脚本:

jenkins.sh-1


jenkins.sh-2


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

推荐阅读更多精彩内容