机房360首页 CalConv();
当前位置:首页 » 云计算资讯 » 用Docker和Git搭建在线开发环境

用Docker和Git搭建在线开发环境

来源:51CTO 作者:DJ编辑 更新时间:2015-12-30 14:40:37

摘要:为什么要在云端搭建开发环境?

  为什么要在云端搭建开发环境

  如今,在传统的开发模式下,版本控制,自动化测试,持续集成都已经陆陆续续放到的云端。

  测试工程师,可以用过自动化测试脚本在云端做大规模的回归测试

  运维工程师,可以通过自动化的部署工具在云端快速部署应用

  产品负责人,可以通过版本控制工具控制产品的发布

  唯独开发工程师还在利用手中的电脑,笔记本等设备来完成开发工作。

  在项目开发阶段,我们通常面临下面几个问题:

  1. 在项目启动阶段,如何让开发工程师快速搭建,并配置开发环境,来缩短项目启动时间和成本。

  2. 在项目开发阶段,如何让开发工程师有:

  - 完全相同的开发环境,来降低调试成本。

  近似于产品环境的架构,来降低部署时因环境差异带来的风险。

  降低对开发设备性能和种类要求,来降低设备成本。

  灵活的分配开发资源(CPU,内存,存储),让需要大量开发资源的工程师快速拿到资源。

  云端开发环境要解决的问题总结

  基于以上思考,我总结了以下4个云端开发环境要解决的问题:

  保证每个开发工程师都能快速的获得一致的“开箱即用”的开发环境

  开发环境摆脱开发设备的种种限制,例如操作系统,设备性能

  让开发环境尽可能模拟产品环境的结构。

  灵活的分配开发资源

  在云端搭建开发环境的挑战

  一个“开箱即用”的开发环境应该包括:功能完备的代码编辑器, 一个应用运行环境,一个调试工具箱。

  为了摆脱设备的限制,集成开发环境可以用HTML5等主流浏览器兼容技术实现。

  为了灵活的分配资源和模拟产品环境,可以将应用运行环境放在云端,并使用容器技术配置。

  调试工具包括日志的输出,断点等功能。

  技术难点总结

  在线的集成开发环境:兼容各大主流浏览器

  隔离的运行环境:隔离,可定制,高效

  调试代码:查看日志,可设置跟踪断点

  潜在的可选技术

  基于技术难点,我做了一些调查研究,选择了几个备选的开源技术。

  在线集成开发环境: ICEcoder, Eclipse Orino, Codiad

  隔离的运行环境: 云端虚拟机, Docker

  代码调试: fluentd

  目前,只确定了使用Docker来实现运行环境。

  集成在线开发环境,我使用Git来解耦代码运行环境和编辑环境,并代码同步。

  代码调试,我使用独立的fluentd服务收集日志,通过SSH登录到虚拟机查看fluent收集的Docker日志。

  云端开发环境的架构概要

  下面这张图是一个简单的架构说明。首先,使用Git来解耦代码的编辑和运行环境。

  我在云端,使用Docker搭建了Git裸库,裸库中用Git hook来同步代码。使用Docker来运行应用,通过浏览器来检查结果。

  因为,代码的编辑和运行环境的分离,开发工程师可以灵活的选择开发工具。开发工具可以是在线编辑器,也可以是本地的编辑器。

  借助于Docker的灵活性,开发工程师可以快速配置出应用运行环境,并分享给开发团队成员。

  概念验证

  在本地编辑代码

  用Git同步到云端

  用docker运行代码查看结果

  责任编辑:DJ编辑

机房360微信公众号订阅
扫一扫,订阅更多数据中心资讯

本文地址:http://www.jifang360.com/news/20151230/n036576405.html 网友评论: pubajax('/comment.aspx','id=078440059347&commCount=1&ChID=0&Today=0','gCount0784400593477740');条 阅读次数:pubajax('/click.aspx','id=078440059347','click_078440059347');
版权声明:凡本站原创文章,未经授权,禁止转载,否则追究法律责任。
相关评论
正在加载评论列表...
function GetCommentList(page) { var Action='id=078440059347&ChID=0&CommentType=GetCommentList&page='+page; var options={ method:'get', parameters:Action, onComplete:function(transport) { var returnvalue=transport.responseText; if (returnvalue.indexOf("??")>-1) document.getElementById("Div_CommentList").innerHTML='加载评论列表失败'; else document.getElementById("Div_CommentList").innerHTML=returnvalue; } }; new Ajax.Request('/comment.aspx?no-cache='+Math.random(),options); } GetCommentList(1);
评论表单加载中...
function GetAddCommentForm() { var Action='id=078440059347&ChID=0&CommentType=GetAddCommentForm'; var options={ method:'get', parameters:Action, onComplete:function(transport) { var returnvalue=transport.responseText; var arrreturnvalue=returnvalue.split('$$$'); if (arrreturnvalue[0]=="ERR") document.getElementById("Div_CommentForm").innerHTML='加载评论表单失败!'; else document.getElementById("Div_CommentForm").innerHTML=arrreturnvalue[1]; } }; new Ajax.Request('/comment.aspx?no-cache='+Math.random(),options); } GetAddCommentForm(); function CommandSubmit(obj) { if(obj.UserNum.value=="") { obj.UserNum.value="Guest"; } if(obj.Content.value=="") { alert('评论内容不能为空'); return false; } var r = obj.commtype; var commtypevalue = '2'; for(var i=0;i
推荐图片