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


构建界面
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容