iOS 持续集成(Jenkins(本地) + GitHub + 蒲公英)

说明: iOS的持续集成一定要在Mac上进行

Jenkins安装

使用brew 进行安装 Homebrew
默认已经安装好brew了,下面开始操作了

一.Jenkins命令行安装
  • 在终端输入命令行 brew install Jenkins, Jenkins 基于java环境,所以命令执行后,可能会看到
    Jenkins: Java 1.7+ is required to install this formula.
    JavaRequirement unsatisfied!
    
    You can install with Homebrew-Cask:
      brew cask install java
    
  • 然后根据提示 在终端中输入 brew cask install java ,安装过程需要输入Mac登录密码
  • 安装java环境完成之后,提示 🍺 java was successfully installed!
  • 安装java成功之后,重新执行 brew install Jenkins, 即可.等待完成
  • 结束以后,默认端口8080,终端打印日志可以看到安装成功
如果需要修改端口: 
1.   到java安装环境路径下 cd /usr/local/Cellar/Jenkins/2.73/libexec 
2.   指定端口启动jenkins  java -jar ./Jenkins.war --httpPort=8889

安装成功提示:


Jenkins安装成功提示.jpeg
  • 然后按照日志中的提示: 在终端直接执行Jenkins,等待运行完毕即可
二.Jenkins配置
  • 打开网址 localhost:8080. 第一次打开,会进入到初次登录页面
    Jenkins初次登录页面.png
  • 按照提示进入到路径文件夹下获取密码即可,也可以从刚刚终端输出位置找到默认密码即可 /Users/用户名/.Jenkins/secrets/initialAdminPassword
Jenkins终端密码提示.png

后续步骤如下


Jenkins配置选择页.png

Jenkins安装进度页.png

安装过程保证网络良好,如果卡着不动了,参考下面一个朋友的解决办法.

  • 就在上图所示的这一步下载的时候,基本上最后肯定有几个插件没有下载好,然后就停在这里不动了,不管怎么都不动,然后关机重启,重新进入.wars所在的文件路径,在终端执行java -jar Jenkins.war --httpPort=8888命令才能在输入http://localhost:8888后能登录Jenkins登录界面,才跳到下图所示的管理员用户注册页面
Jenkins注册页面.png

然后就是常规注册,不表!

三.Jenkins 插件安装
  • 登陆后 -> 系统管理 -> 管理插件 -> 可选插件, 搜索需要的插件,选中之后拖到底部,点击安装

    Jenkins 管理页面.png

    Jenkins 管理插件.png

    Jenkins 选择插件.png

    安装下列插件,拖到底部,安装所选插件,(有时候会卡主,需要手动刷新), 也可以选择自动一段时间后刷新页面即可

    GitLab plugin
    - Gitlab是一个用于代码仓库管理的开源项目,用来在Jenkins上管理源代码
    - 当git上的代码被提交 / 创建一个合并请求 / 现有合并请求关闭/合并时, 
    - GitLab 会记录构建状态,然后触发Jenkins,将Git上代码获取到Jenkins 上
    
    Xcode integration   
    - Xcode 编译插件,相当于将Xcode的编译过程的命令行操作,通过界面化展示了出来,Jenkins 调用本地Xcode进行编译,相当于讲一个Xcode 装在了Jenkins上
    
    Credentials Plugin
    - 管理证书插件
    
    Keychains and Provisioning Profiles Management  
    - 钥匙串开发者证书 及 项目描述文件
    
说明: 评论里有个哥们说:

最新的Jenkins直接会从资源库的Provisioning Profiles读取Profiles,模板的 Mobile Profiles 也不用勾选了,大家可以试一下

  • 安装完成后 -> 系统管理 -> Keychains and Provisioning Profiles Management (如果没有的话,查看上一步,安装Keychains and Provisioning Profiles Management插件)
Jenkins密码描述文件设置.png

这个地方需要注意,需要上传两个文件,一个是钥匙串 keychains 文件(用于打开钥匙串中的相应的开发证书),一个是项目所需的描述文件(可以将生产描述文件 和 开发描述文件都传上去)

Jenkins证书和描述文件具体设置页.png

上传到Jenkins上的钥匙串需要输入密码, 上传的描述文件,需要指定一个存放路径,路径自己指定,Jenkins能找到就行

钥匙串的开发证书名称获取: 钥匙串 -> 找到对应开发证书 -> 右键显示简介 -> 细节 -> 常用名称就是我们需要的证书完整名称了,填入到上图对应位置即可

Jenkins钥匙串路径.png

描述文件,就是我们从苹果开发者网站下载的,UUID就是证书的标识,系统会自动识别,不需要手动输入

设置完毕之后点击保存即可,需要注意的是,两个上传操作最好分开进行,因为上传另一个时,之前输入的内容可能会消失,这个地方需要注意下,好好检查下,是否输入完毕.

三.项目创建
Jenkins新建项目.png
  • 点击Jenkins主目录下的新建按钮,进到新建项目页面,输入项目名称,选择构建一个自由风格的软件项目
Jenkins具体新建项目.png
  • 创建完毕之后,可以在Jenkins主界面,看到项目,点击进入项目,在左侧选项栏中,选择配置,进入配置界面
  • 在构建步骤,需要添加脚本和xcode设置,后面会讲
Jenkins项目设置.png

构建新版本时,之前的ipa如果想保留,可以设置ipa包名称按照时间戳命名

Git设置,Credentials相当于告诉GitLab插件,GitHub账号和密码,在自己的电脑上一般不用设置,需要设置的话,可以设置账号和密码,也可以上传密钥方式

当前打包触发方式,需要自己设置,我这里没有设置,可以定时,或者安装githook插件

构建环境中钥匙串和描述文件,一般在第一次设置时,会不显示我们之前上传的钥匙串和描述文件内容,保存退出,再次进入一次就可以了

Git上只有podfile文件,没有将pods文件上传上去,所以要执行一个脚本更新一下,pod:添加构建步骤 -> Execute shell,需要放到最前,因为pods要在编译前就添加

#!/bin/bash -l
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
echo ++++++++++++++++++++++++++++++++++
pod install --verbose --no-repo-update
echo ++++++++++++++++++++++++++++++++++

添加xcode运行步骤,需要注意的是:如果项目使用pods需要设置scheme和xcworkspace 同名

Code signing & OS X keychain options步骤,要输入Development Team ID这个就是开发证书编号,就是我们在描述文件和钥匙串上传的那个开发证书最后几位数字

打包成功之后,将ipa上传到蒲公英是一个不错的选择,需要ukey和apikey,蒲公英

#蒲公英上的User Key
uKey="你的ukey,蒲公英获取"
#蒲公英上的API Key
apiKey="蒲公英获取"
#执行上传至蒲公英的命令
echo "++++++++++++++upload+++++++++++++"
curl -F "file=@/Users/用户名/.jenkins/workspace/Jenkins_Demo/build/Jenkins_Demo.ipa" -F "uKey=${uKey}" -F "_api_key=${apiKey}"  http://www.pgyer.com/apiv1/app/upload
echo http://www.pgyer.com

在本地项目提交到Git时,项目中最好设置好项目配置,什么证书啊,描述文件啊,等等,因为Jenkins的打包代码是你提交的代码,我们应该按照打包的设置设置好,然后提交.Jenkins相当于一个运行脚本和记录的平台,打包环境的配置还是要自己来的

准备工作完成以后,点击保存,回调项目目录,进行构建

Jenkins本地项目设置.png

Jenkins本地项目设置2.png

这个可以通过通过终端,cd到项目路径下, xcodebuild -list ,查看当前项目是否有schemes(一个workspace可以包含多个project,一个project可以包含多个target,Scheme包含了所有的target集合,用于指定一个应用),如果没有的话,需要到 Product --> Scheme --> Manage Schemes 找到和项目同名的scheme

shared打开,使得Jenkins也可以进行调用编译

三.运行Jenkins项目
  • 配置完成以后,回到项目页面点击立即构建,构建当前项目.


    Jenkins立即构建.png
  • 构建过程

Jenkins更新Git代码.png
Jenkinspofile文件更新.png
  • 打包完成之后,将ipa包上传到蒲公英上,蒲公英会给注册手机发送短信,当然你也可以在Jenkins中加入邮件通知,通过邮件获取结果


    Jenkins上传到蒲公英.png
  • 关于Linux下Jenkins管理iOS代码的问题,可以参考这篇文章,当然你也可以问我,后续有时间在写吧,坑还是很多的

jenkins 更新描述文件

  1. 将 Xcoode signing 改成手动模式 (debug 和 release)手动选择对应的描述文件

  2. 从 Xcode 9 开始,打包需要一个plist文件,用来指定打包的类型和文件,如果修改了描述文件名称和类型,也需要更改相应的配置

  3. 如果还不行的话,将之前的该项目描述文件删除,因为打包时,会自动选择一个默认的描述文件进行打包

写在最后:

当你看到 Finished : SUCCESS的时候,表示你已经成功了,在成功的路上,试验了很多次,记得看到一个简友说他试了40多次.从不知道Jenkins是啥,一步步的走来,一个个坑,一个个踩,成功了,却觉得理所当然.希望你可以成功.有问题和错误欢迎留言!

参考文章,相信你看完一定会有收获

从零开始写个自动打包IPA脚本

iOS持续集成:Jenkins+GitLab+蒲公英

Project、Target、Workspace and Scheme

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念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

推荐阅读更多精彩内容