时间来到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. POJ1064--Cable master(Binary Search)

    Description Inhabitants of the Wonderland have decided to hold a regional programming contest. The J ...

  2. 20155326刘美岑2016-2017-2《Java程序设计》第一周学习总结

    20155326刘美岑 2006-2007-2 <Java程序设计>第1周学习总结 教材学习内容总结 在老师的要求下我看了这门课的考察方式.这门课和以前上的课有些差别,成绩是由平时一点一点 ...

  3. web-day9

    第9章WEB09-Servlet篇 今日任务 完成系统的登录的功能 完成登录系统后页面定时跳转 记录系统登录成功后,系统被访问多少次 教学导航 教学目标 了解HTTP协议 掌握Servlet的编写 了 ...

  4. Mahout简介

    Mahout简介 一.mahout是什么 Apache Mahout是ApacheSoftware Foundation (ASF)旗下的一个开源项目,提供了一些经典的机器学习的算法,皆在帮助开发人员 ...

  5. Opencv打开摄像头,读不到图像,一般来说先读取第一帧,舍弃,然后就正常了

    舍弃第一帧的程序: cap >> img; cv::waitKey(100);  if (cvWaitKey(5) == 27) break; cap >> img;

  6. delphi怎么做桌面滚动文字?

    就是在桌面显示从TXT读取出来的字,并限制在1个框内移动(就是从框左边出现往右边移动并从框边消失)我用HDC+textout只是读取字显示到桌面,不知道桌面移动哪位大侠指点下啊,或用其他方法,最好有详 ...

  7. 3.翻译:EF基础系列--EF怎么工作的?

    原文链接:http://www.entityframeworktutorial.net/basics/how-entity-framework-works.aspx 这里,你将会大概了解到EF是怎么工 ...

  8. 多项式&生成函数(~~乱讲~~)

    多项式 多项式乘法 FFT,NTT,MTT不是前置知识吗?随便学一下就好了(虽然我到现在还是不会MTT,exlucas也不会用) FTT总结 NTT总结 泰勒展开 如果一个多项式\(f(x)\)在\( ...

  9. win10+Theano+GPU

    1. cuda + cudnn 首先还是要先安装GPU库,具体和caffe安装中一样. 2. Theano 为防止下载速度慢,配置清华镜像 conda config --add channels ht ...

  10. flask框架~简易编写

    flaks框架: 先导报 from flask import Flask 重定向模块:redirect url_for是简易寻址跳转 jsonify强转为json格式 建立flask对象:app = ...