时间来到8102年,但是很多中小团队还是缺少持续交付,打包发布还是处于原始手打阶段使得工程师们不能安安心心写点代码,明明今天还有很多bug需要修改,突然测试工程师跑过来说赶紧给我出一个包,这时候你不得不停下手头的工作,默默的给他打个包。

另外对于敏捷开发的团队来说,产品需要随时跟进目前进度,或者“老板们”需要体验一下最新的成果,有一个便捷的地方随时可以安装最新的包对于团队来说也是无比重要的。

目标

测试:可以自己随时通过jenkins构建最新包,然后通过一个小工具直接装最新的版本。

产品:可以随时通过小工具查看,最新的研发成果,随时安装最新的版本。

好了,说了持续交付的重要性,那么准备下材料吧:jenkins+git服务器(我们现在用的gitlab,下文都直接说gitlab)+fastlane+蒲公英+mac机器。当然还有很多其他方案,譬如最简单的jenkins+git服务器也能搞定,多加一个fastlane是未来便于扩展,蒲公英方便安装,就看你要做到什么程度。

po一个效果图:

mac机器

关于mac机器有很多种选择,公司如果有闲置mac miniiMac之类的最好直接利用,黑苹果或者台式机装虚拟机再装mac os费事费力,花费的人力物力已经超出闲置mac miniiMac了。

因为这两种情况我都经历过,以前在Camera360就用过服务端淘汰下来的1U的服务器搭建过虚拟机,不过那个机器是64核,128G的内存,才能撑起Camera360这种体量的工程,普通mac mini打个包要耗费40分钟,如果在测试阶段,测试每天要包的频次变大时,很难负荷,利用1U的高性能机器可以缩短至20分钟。土豪团队可以考虑高配版iMac或者垃圾桶。

有了Mac机器就是配置各种环境,首先必备的是Xcode,然后是fastlane

fastlane

安装

sudo gem install fastlane

安装蒲公英的 fastlane 插件

fastlane add_plugin pgyer

然后进项目目录进行初始化

fastlane init

执行上述命令后,会在我们的项目目录下面生成一个 fastlane 目录,我们唯一关心的就是其配置文件 Fastfile ,配置gym和pgyer参数,更多参数可以参考gym文档pgyer文档

platform :ios do
desc "发布 测试版本 到 蒲公英"
lane :pgy do
#把最近的一个git commit当做当前版本的描述
git_log = sh("git log --no-merges -1 --pretty=format:'# %ai%n# %B by %an'")
gym(
scheme: "iospgy",
export_method: "enterprise",
output_directory: "output",
configuration: "Release"
)
pgyer(
api_key: "811e984eb5e760bb7f2885484c6c4edb",
user_key: "15943af593e531aef0b1f7d6c70d4131",
update_description: git_log
)
end
end

配置完了之后就可以试试用命令打包,在项目根目录执行

fastlane pgy

jenkins和gitlab

这两个东西的安装网上有一大堆教程,如果公司有运维,可以直接让他们帮忙装,如果没有,自己用的云服务器厂商一般也提供docker一键安装。如果也没有云服务器,本机装一个也很快。

配置jenkins节点

有两个关键点需要注意一下:

1.jenkins和你准备拿来做打包机器的mac电脑是否在同一个网络,如果不在,最好通过vpn等方式连接,否则用jenkins自带的javaweb连接不稳定,后期维护相当吐血。

2.如果执行fastlane等命令报错“fastlane: command not found”,则需要配置一下PATH,红框框内容。

PATH可以在命令行输入

echo $PATH

得到值之后拷贝进去就可以了

配置好jenkins节点之后就可以新建项目了

然后配置项目的git地址

根据项目需求配置触发规则,我现在是用的定时任务,每天6点,12点,19点自动触发打包,定时规则可以谷歌搜“jenkins 定时任务”

然后配置执行脚本,一般选用shell脚本

最后写具体的shell执行代码就可以了

蒲公英

由于蒲公英没有iOS版本,所以只有根据文档自己开发一个,否则的话自动打完包还需要把二维码发出来给需要的人扫,相当不方便。根据文档,蒲公英提供接口,让你访问自己所有的上传的APP,并且根据安装APP文档,可以组装好相应的协议。这样就可以实现,通过一个APP安装我们相应版本的功能了。

为了方便大家使用,可以参考我自己开发的一个iOS版蒲公英。clone下来改一下apikeyappkey就可以直接使用啦。

远程构建

要使用jenkins远程构建首先需要安装一个插件Build Authorization Token Root Plugin,如下图:

安装完毕后,去自己的账户下拿token

然后点开jenkins上的工程勾选允许远程构建,并且填写上一步拿到的token

最后在项目里面发起相应的http请求就可以了,具体格式在勾选远程构建的选项下面可以看到。

注:远程触发jenkins是需要授权的,具体可以通过charles抓手动点击触发jenkins构建时的http头可以拿到,或者可以直接写代码

let user = "your username"

let password = "your password"

let credentialData = "\(user):\(password)".data(using: String.Encoding(rawValue: String.Encoding.utf8.rawValue))!

let base64Credentials = credentialData.base64EncodedString()

let headers = ["Authorization": "Basic \(base64Credentials)"]

Alamofire.request("place your url", method: .get, parameters: nil,encoding: URLEncoding.default, headers: headers) .responseJSON { response in

}

中小团队快速实现持续交付iOS版的更多相关文章

  1. 微信团队原创分享:iOS版微信的内存监控系统技术实践

    本文来自微信开发团队yangyang的技术分享. 一.前言 FOOM(Foreground Out Of Memory),是指App在前台因消耗内存过多引起系统强杀.对用户而言,表现跟crash一样. ...

  2. 微信团队分享:iOS版微信的高性能通用key-value组件技术实践

    本文来自微信开发团队guoling的技术分享. 1.前言 本文要分享的是iOS版微信内部正在推广和使用的一个高性能通用key-value 组件的技术实践过程,该组件在微信内部被命名为MMKV(以下简称 ...

  3. 微信团队分享:iOS版微信是如何防止特殊字符导致的炸群、APP崩溃的?

    本文来自微信开发团队yanyang的技术分享. 1.引言 相信大家都遇到过一段特殊文本可以让iOS设备所有app闪退的经历.前段时间大年初一,又出现某个印度语字符引起iOS11系统奔溃,所幸iOS版微 ...

  4. 微信团队分享:极致优化,iOS版微信编译速度3倍提升的实践总结

    1.引言 岁月真是个养猪场,这几年,人胖了,微信代码也翻了. 记得 14 年转岗来微信时,用自己笔记本编译微信工程才十来分钟.如今用公司配的 17 年款 27-inch iMac 编译要接近半小时:偶 ...

  5. 还在手动部署jar包吗?快速掌握Jenkins安装,教你使用Jenkins实现持续交付

    Jenkins Jenkins: 开源软件项目 基于Java开发的一种持续集成工具 用于监控持续重复的工作 旨在提供一个开放易用的软件平台, 便于软件的持续集成 基于Docker安装Jenkins 与 ...

  6. 【腾讯Bugly干货分享】Android Patch 方案与持续交付

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57a31921ac3a1fb613dd40f3 Android 不仅系统版本众多 ...

  7. CI Weekly #14 | 如何搭建合适的持续交付开发流程?

    时隔 10 个月,flow.ci 开始正式收费上线.为感谢对我们的内测支持,所有内测用户可继续免费使用基础版 30 天,截止至 3 月 15 日失效.欢迎随时告诉我们你对收费版 flow.ci 的反馈 ...

  8. [持续交付实践] pipeline使用:Multibranch Pipeline

    前言 在探讨multiBranch Pipeline之前,很有必要先探讨下如何制定有效的代码分支管理规范,使用高效的版本控制系统,并对构建产物及其依赖进行管理.我们首先要强调,需要进行版本控制的不仅是 ...

  9. TOP100summit 2017:【案例分享】魅族持续交付平台建设实践

    本篇文章内容来自第10期魅族开放日魅族运维架构师林钟洪的现场分享.编辑:Cynthia 一.自动化建设历程1.1 魅族互联网发展的时间线 2003-2008年被称之为“互联网1.0时代”.2003年, ...

随机推荐

  1. 浅尝辄止之MongoDB

    1 简介 MongoDB是一个介于关系数据库和非关系数据库之间的产品,基于分布式文件存储的数据库,旨在为WEB应用提供可扩展的高性能数据存储 解决方案.MongoDB将数据存储为一个文档,数据结构由键 ...

  2. web-day1

    第1章   WEB01-HTML篇 今日任务 网站信息页面案例 网站图片信息页面案例 网站友情链接页面案例 网站首页案例 网站注册页面案例 网站后台页面案例 教学导航 教学目标 了解什么是标记语言 了 ...

  3. Linux命令行获取本机外网IP地址

    问题: 服务器地址为net映射地址,本机ifconfig无法直接获取映射的公网地址. 方法: [root@TiaoBan- nidongde]# curl http://ifconfig.me 50. ...

  4. WPF放大镜效果

    在做WPF项目中,不止两个项目需要有放大镜功能. 第一个项目是一个手术室的远程示教系统,主要是为了方便专家演示病症时,可以放大图片上的某些部位. 第二个项目是一个工厂的MES项目,其中有个功能是质量预 ...

  5. [leetcode.com]算法题目 - Length of Last Word

    Given a string s consists of upper/lower-case alphabets and empty space characters ' ', return the l ...

  6. [leetcode.com]算法题目 - Jump Game

    Given an array of non-negative integers, you are initially positioned at the first index of the arra ...

  7. HttpURLConnection与HttpClient随笔

    目前在工作中遇到的需要各种对接接口的工作,需要用到HTTP的知识,工作完成后想要做一些笔记,本来知识打算把自己写的代码粘贴上来就好了,但是偶然发现一篇博文对这些知识的总结非常到位,自认无法写的这么好, ...

  8. 【文文殿下】P3740 [HAOI2014]贴海报

    题解 一开始想到离散化,然后暴力模拟.但是存在一种hack数据: [5,7] [1,5] [7,9] 这样会错误的认为第一个区间被覆盖了(因为两个端点被覆盖).所以我们设置一个玄学调参系数,在一个区间 ...

  9. Web 前端 注意知识点

    一.  前端使用技巧: 1. button的用法.在使用按钮时可以自由在内设置style属性,来改变形态.可以给予type=sbumit提交属性. 2. 各种使用符号: # <!--小于 大于 ...

  10. Dapper实现一对多对象关系聚合导航属性

    领域对象:Game(游戏), Room(游戏群),两者一对多的关系,SQL语句中会用到JOIN public class Game : AggregateRoot { public string Ta ...