中小团队快速实现持续交付iOS版
时间来到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版的更多相关文章
- 微信团队原创分享:iOS版微信的内存监控系统技术实践
本文来自微信开发团队yangyang的技术分享. 一.前言 FOOM(Foreground Out Of Memory),是指App在前台因消耗内存过多引起系统强杀.对用户而言,表现跟crash一样. ...
- 微信团队分享:iOS版微信的高性能通用key-value组件技术实践
本文来自微信开发团队guoling的技术分享. 1.前言 本文要分享的是iOS版微信内部正在推广和使用的一个高性能通用key-value 组件的技术实践过程,该组件在微信内部被命名为MMKV(以下简称 ...
- 微信团队分享:iOS版微信是如何防止特殊字符导致的炸群、APP崩溃的?
本文来自微信开发团队yanyang的技术分享. 1.引言 相信大家都遇到过一段特殊文本可以让iOS设备所有app闪退的经历.前段时间大年初一,又出现某个印度语字符引起iOS11系统奔溃,所幸iOS版微 ...
- 微信团队分享:极致优化,iOS版微信编译速度3倍提升的实践总结
1.引言 岁月真是个养猪场,这几年,人胖了,微信代码也翻了. 记得 14 年转岗来微信时,用自己笔记本编译微信工程才十来分钟.如今用公司配的 17 年款 27-inch iMac 编译要接近半小时:偶 ...
- 还在手动部署jar包吗?快速掌握Jenkins安装,教你使用Jenkins实现持续交付
Jenkins Jenkins: 开源软件项目 基于Java开发的一种持续集成工具 用于监控持续重复的工作 旨在提供一个开放易用的软件平台, 便于软件的持续集成 基于Docker安装Jenkins 与 ...
- 【腾讯Bugly干货分享】Android Patch 方案与持续交付
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57a31921ac3a1fb613dd40f3 Android 不仅系统版本众多 ...
- CI Weekly #14 | 如何搭建合适的持续交付开发流程?
时隔 10 个月,flow.ci 开始正式收费上线.为感谢对我们的内测支持,所有内测用户可继续免费使用基础版 30 天,截止至 3 月 15 日失效.欢迎随时告诉我们你对收费版 flow.ci 的反馈 ...
- [持续交付实践] pipeline使用:Multibranch Pipeline
前言 在探讨multiBranch Pipeline之前,很有必要先探讨下如何制定有效的代码分支管理规范,使用高效的版本控制系统,并对构建产物及其依赖进行管理.我们首先要强调,需要进行版本控制的不仅是 ...
- TOP100summit 2017:【案例分享】魅族持续交付平台建设实践
本篇文章内容来自第10期魅族开放日魅族运维架构师林钟洪的现场分享.编辑:Cynthia 一.自动化建设历程1.1 魅族互联网发展的时间线 2003-2008年被称之为“互联网1.0时代”.2003年, ...
随机推荐
- noip第4课作业
1. 计算邮资 [问题描述] 根据邮件的重量和用户是否选择加急计算邮费.计算规则:重量在1000克以内 (包含1000克),基本费8元.超过1000克的部分,每500克加收超重费4元,不足500 ...
- 将一个浮点数转换成人民币读法字符串(java)
public class Num2Rmb { private String[] hanArr = {"零" , "壹" , "贰&qu ...
- cocos 2dx 通过循环实现界面图形的摆放
首先创建一个一维数组 this.starSprites = new Array(); 然后知道星星的间距和坐标后通过如下代码实现位置的摆放 for(var i = 0; i < 6; i++){ ...
- 1.mybatis入门
一:创建表 CREATE TABLE `country` ( `id` ) NOT NULL AUTO_INCREMENT, `countryname` varchar() DEFAULT NULL, ...
- 取得cxgrid的表格的值,仔细看下面的代码
procedure TfrmMain.cxGridDBTableView_List_PSSJCustomDrawCell(Sender: TcxCustomGridTableView; ACanvas ...
- 报错:Missing type map configuration or unsupported mapping
报错:Missing type map configuration or unsupported mapping □ 背景 当把View Model转换成Domain Model保存的时候,发生在Au ...
- C#之简易计算器设计
在学完了C#的方法和数据类型之后,写了一个简易的计算器的界面.本次界面具备加减乘除求余等五项运算.不过存在一点缺陷就是无法判断输入数据的类型,是整数还是小数,由于目前所学知识有限,等学到以后再进行完善 ...
- 【转】C#中Serializable序列化实例详解
这篇文章主要介绍了C#中Serializable序列化,以实例形式详细讲述了系列化的技术及各种序列化方法,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了C#中Serializable序列化.分 ...
- Linux下安装MySQL以及一些小坑
第一次写博客,各位凑合着看吧(假装有人看). 我这里使用的是centos7. 1.首先打开终端,查看有没有安装过MySQL: [root@localhost lyp]# rpm -qa | grep ...
- Codeforces Round #469 (Div. 2)C. Zebras(思维+模拟)
C. Zebras time limit per test memory limit per test 512 megabytes input standard input output standa ...