前言:
为什么要实现持续化集成?
开发过程中有很多时候都是重复的工作,而这些乏味的工作留给机器,在一定程度上可以节约开发者的时间,也避免一些手动配置带来的问题(偶尔手贱点错了,导致得重新来一次)。那这时候我们就可以使用jenkins 来完成这些工作。简单来说持续化集成有以下优点:
优化工作流程,节约工作时间,快速迭代版本
随时可以部署,可操作者也不再只是开发人员,而是整个Team。
避免低级错误,我们手动部署时候,难免可能因为手误或者遗忘了需要配置的地方,这样子许多时候就需要重新进行部署。
一、Homebrew是什么?
Homebrew是一款Mac OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径的情况,十分方便快捷。
二、安装 Homebrew
打开终端,输入以下代码,稍等片刻,输入密码,等待安装完成
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
三、 Homebrew辅助工具Cakebrew和LaunchRocket(这一步可以省略)
1.Cakebrew 相当于Homebrew可视化管理软件工具,可以轻松的下载安装卸载软件。Cakebrew可以通过brew命令安装
brew cask install cakebrew
也可以直接到Cakebrew官网下载dmg安装,我用brew命令安装失败了,最后去官网下的dmg安装成功了.
注意:点红框按钮下载可以,点绿框按钮下载很慢,使用brew命令安装失败应该跟这个有关,下载软件的链接和绿框按钮的下载链接是同一个链接,点红框下载就是了
2.LaunchRocket 管理root 启动开机启动软件,以及开始或停止服务。安装命令:
brew cask install launchrocket
也可以点击LaunchRocket去下载安装
ps:参考链接3
四、 Jenkins 安装
ps:前三步为准备工作,小编本来打算用Homebrew来安装Jenkins,但是报错了,所以踩了前边一些坑.
1.Jenkins 需要Java 环境,没Java环境运行不起来.这个可以通过Homebrew 安装,命令:
brew cask install java
也可以直接去下载安装,只是下载这个需要先注册一个oracle官网账号,看个人喜好安装就行.
- 安装Jenkins,我们可以到Jenkins 官网直接下载Jenkins pkg 包。
剩下的点击继续就可以了.
安装完成之后,Safari可能会自动打开,如果没有自动打开,手动打开链接http://localhost:8080.这个时候可能会报一个错误。
如果出现了上面的问题,先去双击一下jenkins.war(前边的Jenkins安装成功你的应用程序列表就会有这个了)
如果还是报这个错,也可能是Java环境有问题,尝试重新安装Java环境。
3.重置jenkins用户信息
这个时候如果你重启电脑会发现Jenkins给你新增了一个用户,名字就叫Jenkins,不过这个时候你不知道密码。你可能会去试密码,肯定是是不对的,因为初始密码很复杂。这个时候正确做法是打开http://localhost:8080 ,打开成功会出现下图的重设初始密码的界面。
按照网页中提示路径,找到initialAdminPassword文件->双击打开->复制密码->粘贴到网页输入框.
如果涉及到读写权限问题,移步ps:参考链接4ps:参考链接5解决一下,小编没有遇到权限问题.
4.然后安装常用插件,我选择的推荐的插件,也可以选择插件下载
插件下载完成后,等Jenkins 启动完成,就可以创建管理员用户了.
输入用户名,密码,邮件这些,就算安装完成了。
5.安装一些辅助插件
还是继续登录localhost:8080
(1)安装GitLab插件
因为我们用的是GitLab来管理源代码,Jenkins本身并没有自带GitLab插件,所以我们需要搜索找到
“GitLab”和“Gitlab Hook”这两个插件选中,然后安装。
(2)安装Keychains and Provisioning ProfilesManagement 插件
搜索“ Keychains”就能找到这个插件,安装.我们用这个插件来管理Keychains里的证书和Provisioning配置文件,必须安装
(3)安装Xcode插件
搜索“Xcode integration”选中安装.
安装完了这个,我们就可以配置一个构建项目了。
ps:参考链接4
ps:参考链接5
五、 Jenkins 的配置
敲黑板了!注意了!前边坑不大,后边有坑,不过我都踩过了,除了使用方法,还有踩坑经验.
1.Keychains and Provisioning ProfilesManagement 插件的配置
如上图,只要Keychains and Provisioning ProfilesManagement插件安装成功,在这个位置会多出来这个插件,单击进去,看到如下
这里有两个大坑:
(1)这里需要上传一个 .keychain 为后缀的钥匙串,但是打开存放钥匙串的文件,发现根本就没有.keychain文件,只有一个.keychain-db文件(上传db文件发现根本上传不上去),百度以后才知道新版本的mac系统已经没有这个文件了,旧系统才有,又查了很多资料,有说改名的把-db删掉(无效),有说降级mac系统,拿到.keychain以后再升级系统的(这方法虽然有效,但也太繁琐了点吧,这方法太恶心了!),查了半天也没找到啥方便的办法解决这个问题.突然想起了毛主席的话,自己劳动丰衣足食!既然是钥匙串,那就从钥匙串下手呗,我的方法就是自己创建一个.keychain文件.又要敲黑板了!以下是创建流程:
先创建一个钥匙串,这里命名不能是login,否则会报错,这里以loginCopy为文件名描述,存放位置用默认的就行
然后你需要输入一个秘密,这个密码记录一下,后边的配置会用到.
确定后就会生成这样两个文件,我的当时是放在桌面的,这是桌面上的截图,上边那个文件删了就行了,下边那个.keychain文件就是我们需要的东西.如果你是默认的存放路径,那请看下图,存放.keychain-db的位置多已经生成了这个.keychain文件,如果你没有把.keychain文件存放在这里,那也要手动拖过来,方便文件管理,而且这个文件放在这里最合适了.
这时候再去钥匙串,会发现多了一个名为"loginCopy"的钥匙串,而且里边是没有证书的,这时候,只要去"登录"里边把你需要的证书右键拷贝一份,粘贴到"loginCopy"里边就行了.如果粘贴失败,就去"登录"里找到你需要的证书,生成一个.p12文件,然后双击安装一下,"loginCopy"里也会有那个证书.
这样你的.keychain文件就做好了,然后选取.keychain文件,选完后,再点上传(Upload)按钮.
(2)还是在刚才上传.keychain文件的位置,需要上传对应的Provisioning Profile文件,而且可以上传多个.keychain和Provisioning Profile文件
在上图的路径中能看到上传的文件(这是我的路径,你的路径得看你jenkins安装在哪了),上传完这两种文件,才能进行Keychains and Provisioning ProfilesManagement 插件的正常配置,请看下图
在Upload按钮下边,配置Keychains和Provisioning Profiles.这里需要注意,Filename就是上传的.keychain文件名,Password就是生成这个文件那个密码,下边填写的是.keychain包含的证书名,可以是一个或者多个.Provisioning Profiles Directory Path 需要填写刚才上传上去的配置文件的存放路径,去你安装的jenkins里边找就能找到,配置完别忘了保存一下.
六、 Jenkins 的使用
1.新建item,构建一个项目
填写一个项目名,选Freestyle project 就行了,别的应该也可以,我没试过,有需要的可以去试试.
2.配置General参数,这里可以设置包的保留天数还有天数。
3.设置源码管理
先填写源码的URL,这个URL就是可以克隆到你的代码,如果用的SourceTree,直接去SourceTree的设置里去找就是了.然后填写你需要操作的分支,最后点添加按钮,会出现这样的界面
类型可以选择用户名密码登录也可以选择SSH,如果没有SSH,直接填写你的源码后台的登录用户名和登录密码就行了,ID和描述不用填写.如果有SSH,先配置SSH Key,在Jenkins的证书管理中添加SSH。在Jenkins管理页面,选择“Credentials”,然后选择“Global credentials (unrestricted)”,点击“Add Credentials”,如下图所示,我们填写自己的SSH信息,然后点击“Save”,这样就把SSH添加到Jenkins的全局域中去了。如下图
如果正常的配置正确的话,是不会出现下图中的那段红色的警告。如果有下图的提示,就说明Jenkins还没有连通GitLab或者SVN,那就请再检查SSH Key是否配置正确。
4.构建触发器设置
这里是设置自动化测试的地方。这里涉及的内容很多,暂时我也没有深入研究,这里暂时先不设置。有自动化测试需求的可以好好研究研究这里的设置。
不过这里有两个配置还是需要是配置的
Poll SCM (poll source code management) 轮询源码管理
需要设置源码的路径才能起到轮询的效果。一般设置为类似结果: 0/5 每5分钟轮询一次。
Build periodically(定时build)
一般设置为类似: 00 20 * 每天 20点执行定时build 。当然两者的设置都是一样可以通用的。
格式是这样的
分钟(0-59) 小时(0-23) 日期(1-31) 月(1-12) 周几(0-7,0和7都是周日)(更加详细的设置看这里)也可以点击后边的问号查看帮助.
5.构建环境设置
iOS打包需要签名文件和证书,所以这部分我们勾选“Keychains and Code Signing Identities”和“Mobile Provisioning Profiles”。如果第五步,配置的Keychains and Provisioning ProfilesManagement 插件没问题,那这里就不需要做什么了,勾选下图两个按钮后,选择对应的证书和Provisioning配置文件就行了,如果这里的证书和Provisioning配置文件无法显示,那问题是在第五步,检查Keychains and Provisioning ProfilesManagement插件的配置,修改好了,这里也就正常了.
6.构建设置
我们这里选择执行一段打包脚本.我自己也写了一个脚本,包含一键运行->自动替换图标(多项目且使用不同图标的情况,只有一个项目,可以去掉这部分代码)->自动打包->自动上传到蒲公英(这里也可以改成自动上传fri或者App store).
接下来纯粹就是发福利了,以下是脚本下来地址,下载以后,把脚本中的路径和文件名等地方修改成自己的,copy到jenkins构建设置里边就行了
下载脚本
这里还有一个坑,我的脚本里并没有写更新cocopods的逻辑,如果有用到cocopods,自己想办法解决一下吧,去找一下相关脚本,我也是踩着坑解决的,方法比较简单粗暴,直接把自己原来项目里的pods文件夹copy到jenkins项目里,替换掉了jenkins里的cocopods,你也可以cd到对应项目里,执行pod install命令更新一下.
7.构建后操作
一般第6步都是构建和打包,在这一步进行上传等构建完成以后的操作,因为这里也可以用一个第6步那种脚本操作,所以我这一步什么都没做,把这一步的脚本合并到第6步里一起执行了。至此,我们的Jenkins设置就全部完成了。点击构建,就会开始构建项目了。
结束语:到这里,jenkins的安装/配置/使用以及踩的一些坑都写到这里了,写这篇文章我也是参考了好多篇文章,里边的部分图片和文字也是摘自其它文章,摘图摘文字并不是为了抄袭,而是为了踩坑,希望大家理解并支持,浏览了很多文章解决问题,这里也不一一列出那些文章的作者了,总之,谢谢各位大牛们,在这里向你们致敬,由衷的感谢你们支撑我完成了这篇文章!另外,技术水平有限,写作水平也有限,呕心沥血,有不足的地方,还请各位看官不吝赐教,谢谢!😁