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

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

目标

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

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

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

po一个效果图:

mac机器

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

因为这两种情况我都经历过,以前在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下来改一下apikey和appkey就可以直接使用啦。

远程构建

要使用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. 两个jsp文件运行后弹出对话框 下载文件问题

    这个问题是两个jsp字符编码不一致的问题 如图所示 划线部分是要特别注意的地方 出错往往是这里 有时是“;”后面有无空格 如果login.jsp有 那么loginCheck.jsp也必须要有而且是同样 ...

  2. Codeforces Round #265 (Div. 2) C. No to Palindromes! 构造不含回文子串的串

    http://codeforces.com/contest/465/problem/C 给定n和m,以及一个字符串s,s不存在长度大于2的回文子串,现在要求输出一个字典比s大的字符串,且串中字母在一定 ...

  3. myeclipse6.6+maven跑springside4.1的demo

    1.安装myeclipse6.6 2.myeclipse6.6安装maven 2.1 删除原有maven. 关闭Eclipse程序, 进入MyEclipse插件目录/eclipse/features ...

  4. python3使用ip地址代理

    第一种IP地址代理方式from urllib import request if __name__ == "__main__": # 访问网址 url = 'http://www. ...

  5. StringBuffer 去掉最后一个字符

    StringBuffer stringBuffer=new StringBuffer (); stringBuffer.append("aaa,"); stringBuffer.d ...

  6. 代码面试集锦 1 - Uber

    Given an array of integers, return a new array such that each element at index i of the new array is ...

  7. php根据修改时间删除指定目录下文件

    //$dir-文件地址,$files-存储返回数组,$type-查找文件类型组 public function read_dir($dir,&$files,$type) { if(!is_di ...

  8. #loj3089 [BJOI2019]奥术神杖

    卡精度好题 最关键的一步是几何平均数的\(ln\)等于所有数字取\(ln\)后的算术平均值 那么现在就变成了一个很裸的01分数规划问题,一个通用的思路就是二分答案 现在来考虑二分答案的底层怎么写 把所 ...

  9. 【ElasticSearch】:Mapping相关

    Mapping 类似数据库中的表结构定义,主要作用如下: 定义Index下的字段名(Field Name). 定义字段类型,例如数值型.字符串型.布尔型等. 定义倒排索引相关配置,比如是否索引.记录p ...

  10. 关于oracle RAC心跳线采用直连 还是交换机连接的建议

    关于oracle RAC心跳线的连接方式,各个论坛,包括网上文章的说法是:官方说是不建议直连,建议采用交换机连接的方式!PS:但是,一直没有找到官方文档的出处,有知道的兄弟,烦请评论区提供下地址!!! ...