文档章节

穷人也能拥抱‘持续集成’与‘持续交付’

开源中国刘德华
 开源中国刘德华
发布于 2017/07/16 21:43
字数 1288
阅读 3476
收藏 118

文章首发:https://www.dev-heaven.com

如果有问题请加QQ讨论群:656206901

基本概念

什么是持续交付与持续集成?

持续交付所描述的软件开发,是从原始需求识别到 最终产品部署到生产环境这个过程中,需求以小批量形式在团队的各个角色间顺 畅流动,能够以较短地周期完成需求的小粒度频繁交付。频繁的交付周期带来了 更迅速的对软件的反馈,并且在这个过程中,需求分析、产品的用户体验和交互 设计、开发、测试、运维等角色密切协作,相比于传统的瀑布式软件团队,更少 浪费。

持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

基本构建

  • 版本控制:可以简单的理解为代码管理(SCM),如常见的GitHub、GitOSC、GitLab等。
  • 持续集成CI:各种CI工具,如Jenkins、gitlab-ci等
  • 自动化测试
  • 构建工具及构建脚本
  • 部署上线

穷人的持续集成

今天的主角就是阿里云的CRP和OSCGit,先说说开源中国的git服务,它是完全免费的,允许开发者使用私有库托管代码,不是GitHub 7刀每月。另一个就是阿里云的CRP,免费的在线编译打包工具,当然CRP目前是公测,公测了好久了,说不定什么时候就收费了,OSCHINA红薯说他们马上会搞个免费的了。

CRP

给你私有、安全的代码托管服务。集合编译、测试、发布等插件。支持所有Git命令,兼容现有Git工具。私有Git仓库,存储任何类型的源代码及文件。在线浏览和管理代码,提升研发效率。

如何使用?
  1. 新建工作流

  2. 选择工作量模板

  3. 配置工作流

  4. 根据提示创建代码仓库

    笔者这里使用的是OSCGit托管代码的,但是CRP只能从阿里code中拉取代码,所以难题就是怎么打通阿里code和OSCGit,让提交到OSCGit的代码怎么同步到阿里code,自建Git服务器可以使用GitHooks,但是OSCGit,以及GitHub只提供了Webhooks,后面我们在来说怎么使用WebHook同步代码。

  5. 小的注意点

    1. crp中‘编译/测试’环节,可以去掉mvn test以节约时间
    2. 物理输出路径必须填写,否则可能无法部署,可以直接填 target/
  6. 部署配置

    在配置部署前需要配置目标机器,配置好才会出现如图所示的配置。

  7. 配置部署组

    添加机器,请选择直接输入机器列表,这样方便点,注意需要支持公网SSH。

  8. 剩下比较简单,就不再赘述了。

如何同步OSCGit代码到阿里code

使用OSCGit提供的WebHooks,如图

提供一个post接口,将接收osc git server 推送的数据

在接口所在机器上创建仓库镜像

  1. clone代码
git clone --mirror git@git.oschina.net:demo/demo.git

关于--mirror参数,请查看文章最尾部链接 2. a

cd demo.git/
git remote add aliyun git@code.aliyun.com:demo/demo.git # 这里对应你在阿里code上创建的仓库
# 将OSCgit仓库的test和master分支分别推到阿里code,第一次初始化的时候必须这么推,以后只需要执行`git push aliyun `即可。
git push aliyun master
git push aliyun test

使用Nodejs提供webhooks所需接口

这里使用express开发,比较简便,关于express入门请查看我的另一篇博客https://dev-heaven.com/2017/01/06/NodeEE%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8/

npm install express-generator -g
express webhook
vim webhook/routes/index.js

var express = require('express');
var exec = require('child_process').exec;

var router = express.Router();

const GIT_PATH = '/usr/local/src/huweirenmai.git/';

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

router.post('/webhook', function(req, res, next) {
  //var ref = req.body.ref;
  //var branch = ref.substring(ref.lastIndexOf("/") + 1);
  var commands = [
      'cd ' + GIT_PATH,
      'git fetch,
      'git push aliyun'
    ].join(' && ');

  exec(commands, function(err, out, code) {
      if (err instanceof Error) {
        res.status(500).end('Server Internal Error.');
        throw err;
      }
      //process.stderr.write(err);
      //process.stdout.write(out);
      res.status(200).end('OK');
  });  
});
module.exports = router;

参考

  1. git-mirror http://blog.csdn.net/agul_/article/details/7843678
  2. https://help.aliyun.com/document_detail/30513.html?spm=5176.doc30516.6.543.cigGFK

全文完!

© 著作权归作者所有

共有 人打赏支持
开源中国刘德华
粉丝 23
博文 14
码字总数 6291
作品 0
浦东
程序员
加载中

评论(20)

SummerOnline
SummerOnline
现在升级ECS又不贵
开源中国刘德华
开源中国刘德华

引用来自“神森浓不绿”的评论

高速翻墙VPN,畅玩Youtube、Facebook,(免费)领取帐号,官网:t.cn/RKiZmbK

只用cccat,感觉好用的不要不要的
hyperfox
hyperfox

引用来自“Kenti”的评论

引用来自“學無止境”的评论

引用来自“Kenti”的评论

不正式生产用,在家里搞个外网映射就行啦
表示这种的耗电都比便宜的云服务要贵。还不稳定

@學無止境 认知里面,开空调才比较耗电,你说的是台式机?

引用来自“學無止境”的评论

是的。台式机:一台电脑大概300W左右,高级点的更高一点,就算300W,公式为:功率W/1000*每天使用时间*30*每度电价格, 300W/1000*24h*30天*每度电的价格=费用。300/1000*24*30*1.3=280,和最简单便宜的云服务(单核*1G*1M=74元/月);:smile:

引用来自“suzezhi”的评论

300W是电源的最大功率吧,不可能永远都在最大功率上跑吧。。。。
你电脑不跑游戏又不做密集运算怎么会一直300w,而且你自己的家用电怎么会是1.3?我们这只有0.55.再说你自己电脑可以配i5 8G内存2T的硬盘啊,跟单核1G 1M的比不太好吧
s
suzezhi

引用来自“Kenti”的评论

引用来自“學無止境”的评论

引用来自“Kenti”的评论

不正式生产用,在家里搞个外网映射就行啦
表示这种的耗电都比便宜的云服务要贵。还不稳定

@學無止境 认知里面,开空调才比较耗电,你说的是台式机?

引用来自“學無止境”的评论

是的。台式机:一台电脑大概300W左右,高级点的更高一点,就算300W,公式为:功率W/1000*每天使用时间*30*每度电价格, 300W/1000*24h*30天*每度电的价格=费用。300/1000*24*30*1.3=280,和最简单便宜的云服务(单核*1G*1M=74元/月);:smile:
300W是电源的最大功率吧,不可能永远都在最大功率上跑吧。。。。
开源中国刘德华
开源中国刘德华

引用来自“理查德1986”的评论

引用来自“理查德1986”的评论

我也在阿里云上面搞了个ECS,不过当时搞活动然后升级到单核2G的版本,里面安装的东西基本和楼主差不多啦。不过Git是用比较简单的Gogs这个占用内存还好,然后配置上jenkins就可以简单地用起来了。

引用来自“橙子先生”的评论

jenkins跑起来经常就让机器卡住了
还好吧,没有什么感觉。不过个人测试用的服务器,我还是将就用着

我还跑了很多其他的服务啊,所以这种边缘性的服务,还是从机器上挪出去比较好
理查德1986
理查德1986

引用来自“理查德1986”的评论

我也在阿里云上面搞了个ECS,不过当时搞活动然后升级到单核2G的版本,里面安装的东西基本和楼主差不多啦。不过Git是用比较简单的Gogs这个占用内存还好,然后配置上jenkins就可以简单地用起来了。

引用来自“橙子先生”的评论

jenkins跑起来经常就让机器卡住了
还好吧,没有什么感觉。不过个人测试用的服务器,我还是将就用着
开源中国刘德华
开源中国刘德华

引用来自“raos1105”的评论

不好意思,用公司的钱,gitlab高配、runner高配
土豪,我们做盆友吧
开源中国刘德华
开源中国刘德华

引用来自“Kenti”的评论

引用来自“學無止境”的评论

引用来自“Kenti”的评论

不正式生产用,在家里搞个外网映射就行啦
表示这种的耗电都比便宜的云服务要贵。还不稳定

@學無止境 认知里面,开空调才比较耗电,你说的是台式机?

引用来自“學無止境”的评论

是的。台式机:一台电脑大概300W左右,高级点的更高一点,就算300W,公式为:功率W/1000*每天使用时间*30*每度电价格, 300W/1000*24h*30天*每度电的价格=费用。300/1000*24*30*1.3=280,和最简单便宜的云服务(单核*1G*1M=74元/月);:smile:
还有这样算的:joy:
开源中国刘德华
开源中国刘德华

引用来自“wf2311”的评论

我之前也试着CRP发布过Java项目,但因为我的项目里面的部分jar包引用了我个人的maven仓库,导致编译失败。我看日志,好像maven依赖还想只会到阿里云的仓库去找,如果要以来maven私服,需要怎么配置?
<repositories>
<repository>
<id>zuihuibao</id>
<url>http://121.41.132.23:8083/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
學無止境
學無止境

引用来自“Kenti”的评论

引用来自“學無止境”的评论

引用来自“Kenti”的评论

不正式生产用,在家里搞个外网映射就行啦
表示这种的耗电都比便宜的云服务要贵。还不稳定

@學無止境 认知里面,开空调才比较耗电,你说的是台式机?
是的。台式机:一台电脑大概300W左右,高级点的更高一点,就算300W,公式为:功率W/1000*每天使用时间*30*每度电价格, 300W/1000*24h*30天*每度电的价格=费用。300/1000*24*30*1.3=280,和最简单便宜的云服务(单核*1G*1M=74元/月);:smile:
从传统IT运维到云运维,浙江移动是这样炼成的!

随着云计算概念的逐步落地,越来越多的企业拥抱“云”。一方面,云计算的快速发展打破了竖井、应用和平台解耦的界限,而另一方面,也对企业如何加强自身核心能力掌控、统一管理建设运营、提升...

郭岳
2016/06/16
0
0
加速开源现代化,BMC DevOps开发应用实践

  【IT168 资讯】为了让开发、测部署试,以及运维更好的结合在一起,DevOps出现了,至此它便成了加速应用交付过程关注的宠儿。有些人认为DevOps有点姗姗来迟,因为业务的成功很显然是取决于...

it168网站
2017/06/26
0
0
我们应该如何基于容器来进行软件的持续交付(二)?

概述 接着上一篇的内容,我们有讲到“持续交付是文化,自动化是基石,垮职能团队协作是根本”,本文将以软文的形式介绍持续交付平台WiseBuild结合Rancher容器管理平台我们是如何进行跨职能团...

wise2c
2016/12/26
85
0
微服务概述

微服务的诞生 微服务架构(Microservice Architect)是一种架构模式,它提倡将单块架构的应用划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的...

李景枫
2016/04/17
122
0
干货预告:服务机器人“后半场”,如何用AI赋能新零售?

  电商来势汹汹,零售店搭上人工智能的顺风车才能曲线求生。   随着互联网电商的深入发展,原来很多线下的消费开始被线上所取代,传统零售行业受到巨大的冲击,客流量下滑,利润率降低,...

人工智能机器人联盟
2017/12/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

最全最强解析:支付宝钱包系统架构内部剖析(架构图)

支付宝系统架构概况 典型处理默认 资金处理平台 财务会计 支付清算 核算中心 交易 柔性事务 支付宝的开源分布式消息中间件–Metamorphosis(MetaQ) Metamorphosis (MetaQ) 是一个高性能、高可...

晨猫
34分钟前
4
0
竞品分析

那什么样的场景需要用关键纬度分析法分析竞品呢? 竞品分析的目的是为了看竞品们和自己产品重合的业务都具备哪些功能点,以及这些功能是怎么做的,以此确定自己产品的优化方向。 竞品们的业务...

于谦老师
42分钟前
1
0
OSChina 周三乱弹 —— 公司女同事约我

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子:分享水木年华的单曲《蝴蝶花(2002年大提琴版)》 《蝴蝶花(2002年大提琴版)》- 水木年华 手机党少年们想听歌,请使劲儿戳(这里) ...

小小编辑
今天
1K
16
Linux环境搭建 | VMware下共享文件夹的实现

在进行程序开发的过程中,我们经常要在主机与虚拟机之间传递文件,比如说,源代码位于虚拟机,而在主机下阅读或修改源代码,这里就需要使用到 「共享文件」 这个机制了。本文介绍了两种共享文...

良许Linux
今天
9
0
JUC锁框架——AQS源码分析

JUC锁介绍 Java的并发框架JUC(java.util.concurrent)中锁是最重要的一个工具。因为锁,才能实现正确的并发访问。而AbstractQueuedSynchronizer(AQS)是一个用来构建锁和同步器的框架,使用A...

长头发-dawn
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部