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

文章首发:https://www.dev-heaven.com
如果有问题请加QQ讨论群:656206901

首先说一说为什么说穷人,笔者自己买了一台阿里云的ECS服务器,最开始是一台便宜的单核1G的服务器(其实前面还有更苦的,一把辛酸泪就不说了),苦了它了,里面跑了一堆服务,诸如Tomcat、Nginx、MySQL、Redis、RabbitMQ、JVM等等,发现本来就很吃力,后来又想搞个持续集成部署个Jenkins,结果搞挂了几次服务器,每次内存飙到95%(要知道Gitlab要求机器最好为4G),只能重启服务器了。又没钱升级配置,只能看看有什么服务比较好。

基本概念

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

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

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

基本构建

  • 版本控制:可以简单的理解为代码管理(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参数,请查看文章最尾部链接

  1. 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

全文完!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,039评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,223评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,916评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,009评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,030评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,011评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,934评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,754评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,202评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,433评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,590评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,321评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,917评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,568评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,738评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,583评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,482评论 2 352

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,650评论 18 139
  • 本文以Gitlab来讲解Git使用以及持续集成, 持续集成采用的是Gitlab CI. 其他代码托管网站,如Git...
    x1596357阅读 5,412评论 0 6
  • <<互联网敏捷DevOps和自动化之5.持续集成>>持续集成的价值是什么?对于开发和测试人员又意味着什么呢?1.1...
    燕京博士阅读 2,784评论 0 5
  • 现在想想十年前自己怎么可以如此意气风发。初来萍乡乍到的我,硬是抱着想在这个城市做好一本杂志的梦想,起早贪黑,不顾任...
    不再虚荣的胡晶阅读 1,031评论 4 0
  • 文‖蒹葭姑娘所有的遇见都是久别重逢。遇见 踏着六点半的夕阳走出办公室大门,天边淡淡的余晖,脚下尚有热气的土地...
    蒹葭姑娘阅读 291评论 1 1