借助 Gentle 快速部署代码到测试环境的总结

我想很多开发的同学都经历过这样的开发流程:本地修改代码,把代码推到测试环境,重启测试环境需要的服务,本地看效果,改bug重复1-3,功能稳定后上线

这个过程有什问题呢?

    假设你是一个做过运维或者能力很强的人,比如我这种,本地跑测试环境,但是假如一个新人,或者对测试环境中的某些 部分不是很了解的人, 甚至需要和生产环境完全一样的条件下, 本地可能就不好使了. 那么这需要一个测试服务器
    首先你每次修改代码, push ,重启环境都需要你登陆测试环境,至少不够自动化.然后退回本地看效果,这个过程有点浪费时间和经理
    其次是你可能有好几个项目,他们之间可能都没什么共通点. 你需要多个测试环境
    当然你可以写几个脚本,为你每个测试环境写一个东西去自动化这些,未尝不可. 只是需要重复造很多轮子
    假如为了安全有跳板机,你需要登陆跳板机才能跳到你的测试服务器,你可能要写很复杂的expect脚本

然后是我认为最重要的:

凡是屁大点事就放个deamon的运维都是耍流氓, 就拿小屁几台服务器还搞神马salt, ansible之类的事情,真是太无聊了.

这些东西帮助你做了很多事情,但是会让你变得更懒.而且重要的是-它们写的并不一定只符合你的需要或者就不符合你的需要. 我喜欢简单粗暴的实现,最近在看fabric的代码, 作为做过op,也给salt贡献过代码的我,写了这个东西: gentle, 帮助我自动化提交代码到我的测试环境. 这个东西是我认为符合我需要,或者大部分开发同学需要的小东西,基于fabric, docopt 和yaml.
我的工作的一些特点

我负责几个项目, 它们有以下特点

    项目在不同的机房, 有完整的测试环境和相关数据
    项目依赖的服务基本不同,比如有的使用了supervisor, 有的是程序fork后退出了父进程;有的使用了nginx+uwsgi,有的就是nginx+服务等.
    项目之间需要的依赖应用不同,且启动顺序有区别. 这个很好理解, 启动需要先启动A,再启动B,才能启动C
    项目有的需要登陆跳板机

我以前的个人的开发习惯和流程

    我有一个专门的存放服务配置的目录, 后缀是ip或者项目的名字. git版本库, 每次更新后上传到测试环境
    我有专门的op PATH, 做了很多alias, 都是一些python或者shell的脚本,用来同步测试环境,登陆测试环境撑起服务的脚本

看起来以前用的也不错. 但是gentle能怎么样提高呢?

gentle的开发流程

    切换到你要开发的目录
    初始化这个目录,其实就是在当前目录增加一个.gentle.yaml
    根据你的需要配置测试环境账号ip密码, 想要同步的目录, 需要重启的服务和优先级已经命令
    以后每次只需在这个目录下,使用gt publish 或者更懒 gt p, 他就会帮你自动rsync然后重启相关服务.

具体使用可以去我的github或者readthedocs.org

安装和依赖

我已经放到了pypi, 你可以使用pip或者easy_install

sudo pip install gentle

这样在系统环境下会有一个gt命令

fabric有2个对于项目更新的函数,一个是rsync_project,一个是upload_project, upload是把项目压缩在服务器上解压缩,实际上很浪费时间,但是rsync_project不能使用env.password,需要手动输入一次密码,都很不爽,我找到一个解决办法就是sshpass, 帮助自动输入rsync的密码, 我也给fabric提了PR. 我的项目使用了我个人的改进版的rsync_project

如果你是ubuntu 直接:

sudo apt-get install sshpass

其他操作系统可以在这里下载 http://sourceforge.net/projects/sshpass/ 然后编译

tar zxvf sshpass-1.05.tar.gz && cd sshpass-1.05 && ./configure &&
make && sudo make install

一个我的测试环境的例子, 我加注释说明

host: 192.168.3.11 #测试服务器, 格式是user@host:port
password: dongwmspassword #登录服务器需要的密码
gateway: #可以不存在,中间服务器,格式是user@host:port
gatewaypassword: #中间服务器(jump跳板机)的密码
rsync: #这个操作是rsync
  lpath: $ROOT #你可以使用全路径, $ROOT表示当前路径,本地目录
  rpath: /opt/tornado # 测试环境的目录
services: # 每个段落就是一个服务,这里有nginx和supervisor
  nginx:
    command: kill -9 `ps -ef |grep nginx|grep -v grep|awk '{print $2}'` && /opt/nginx/sbin/nginx #启动的命令
    lpath: /usr/local/etc/nginx/nginx.conf #nginx.conf的本地地址
    priority: 1 #优先级越高越先执行
    rpath: /opt/nginx/conf/nginx.conf #测试环境的nginx.conf路径
    sudo: false # 因为这个环境很宽松 不需要sudo
    user: #sudo使用的用户,默认是登陆的用户
  supervisor:
    command: supervisorctl -c /etc/supervisor/supervisord.conf reload
    lpath: /Users/dongwm/settings/supervisord.conf.31
    priority: 2
    rpath: /etc/supervisor/supervisord.conf
    sudo: false
    user:
username: root #登陆服务器的默认用户, 你可以在使用host的时候指定用户

欢迎给我issue和PR

后文

    因为很多人会用到跳板机,我想加入跳板机的用法, 看起来就像直接在本地操作远程一样
    设置输出是否隐藏,目前保留就是为了让我看到执行的过程
    设置支持多测试环境一起部署,或者说让生成环境的部署一样方便

时间: 2024-09-19 22:41:02

借助 Gentle 快速部署代码到测试环境的总结的相关文章

Twitter如何在数千台服务器上快速部署代码?,互联网营销

答案是:用BT,也就是你我应该都很熟悉的BitTorrent. 对于网站经营者.创业者来说,扩展性的问题是在网站流量成长过程中势必会面对的问题,如何建立一个具有扩展性的架构(scalable architecture)便是在规划网站事业过程中不可或缺的专业知识. 如果服务本身的功能性符合用户需求,却因为架构.程序性能.数据库性能的问题导致服务增长出现瓶颈时,如何评估.分析网站性能瓶颈?厘清问题后如何找出对应的解決方案,可以思考的相关议题可能包括: 如何有效率地厘清问题?从客户端的数据(读取时间)

如何控制服务器虚拟测试环境

虚拟服务器技术被用在试生产环境,目的是节省资金.时间和人力,然而同样的工具如果未经检查就可能会导致结构复杂,资源浪费并使管理难度加大. 行业分析师和IT专业人士说,虚拟化技术解除了物理服务器测试环境的限制,实现了IT员工间的资源共享,这就使得测试工作更容易进行,但却需要进行严格的控制. Forrester调查公司的高级分析师Carey Schwaber说,"在测试环境中采用虚拟化技术的一个缺陷是影像数量的增多,特别是在通过不同操作系统测试多个结构时.环境 的控制工作必须认真进行,必须有相关政策来

客户端测试环境的管理

您是否遇到测试Windows软件时,要安装部署新操作系统或一堆兼容性软件的情况?如果有,花费多长时间?20分钟.半个小时甚至更多? 可以在10分钟之内做到吗? 部署一个Windows测试环境之后,如何让其他人可以很轻松地复用呢? 问题的产生 1.客户端测试环境的概念 所谓客户端测试环境,是指部署在Windows操作系统下的应用软件测试环境,主要涉及操作系统和应用软件,测试环境应该能够满足被测客户端软件启动.运行.执行测试用例的基本操作,同时又能满足各种特殊测试用例的执行需求,如安全性测试用例.兼

快速一键部署测试环境,降低环境配置风险

环境部署是软件测试很重要的一个环节,但也是比较耗时间的环节,很多企业经常是项目立项后,开始邮件申请服务器资源,再三催促审批通过后,进行手工部署搭建环境,然后解决各种依赖和修改各种配置文件.如何有效减少环境部署流程,提升环境搭建效率,并且保证环境配置质量安全呢?针对这些需求,新型一站式研发效能平台,云效的环境管理系统提供了解决方案. 首先,解决测试服务器资源管理的问题. 云效平台统一对测试服务器资源(包含:测试服务器.帐号)进行时间片管理(按时间进行申请占用的方式).企业在后台申请机器信息,点击I

基于资源编排在专有网络环境下快速部署高可用的Dubbox服务(ZooKeeper版)

本文将介绍在专有网络VPC(Virtual Private Cloud)下,基于资源编排服务,快速部署高可用的Dubbox服务的过程.Dubbox服务采用的注册中心是ZooKeeper集群.做这件事情的意义在于:节约部署Dubbox的时间,降低部署Dubbox过程中出错的风险. ROS阿里云资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务.用户通过模板描述多个云计算资源的依赖关系.配置等,并自动完成所有资源的创建和配置,以达到自动化部署.运维

阿里云快速部署Kubernetes - VPC环境

本文展示了一个在阿里云VPC网络上快速部署一个安全的kubernetes集群的方法,安装使用kubeadm工具,这个工具是k8s-release1.5的一部分(注意kubeadm还处在beta版本,欢迎大家使用的时候多提宝贵的意见).本文带大家在阿里云上快速安装kubernetes-1.5.1.由于kubeadm使用的默认镜像仓库是gcr.io/google-containers,国内无法访问,并且支持自定义镜像仓库的代码并不包含在kubeadm-release1.5,因此我们从master分支

针对敏捷开发和测试中开发人员:部署重现缺陷的环境

在敏捷开发的大环境下,产品需要根据用户的需求不断进行变化,产品版本的研发周期越来越短,产品的交付速度越来越快,只有开发和http://www.aliyun.com/zixun/aggregation/9621.html">测试人员之间保持更加有效更加频繁的交互才能保证产品按时高质量地交付给用户.其中,开发人员和测试人员之间交互最多的部分就是缺陷 (defect) 问题的讨论.当测试人员发现问题并提交缺陷以后,开发人员需要重现测试人员发现的问题,并进行研究.最终针对缺陷的产品代码改动被开发人

手把手教你搭建智能合约测试环境、开发、编译、部署以及如何通过JS调用合约方法

如何编写智能合约(Smart Contract)?(I) 完整视频教程 https://v.qq.com/x/page/h0552ba9k8h.html 学习目标 了解智能合约 简单环境搭建 能够利用solidity编写Hello World合约 合约部署 和合约互动 使用solidity语言撰写智能合约 Ethereum上的智能合约需要使用solidity语言来撰写.虽然还有其他能用来撰写智能合约的语言如Serpent(类Python).lll(类Fortran),但目前看到所有公开的智能合约

项目开发中切换部署开发、测试、生产多环境

在开发的过程中,不可避免会接触到至少三个环境的程序部署:开发.测试和生产环境. 每个环境都使用一套数据库配置,路径配置等,如果每次都人工的干预每一个配置文件,工作会比较繁杂,且容易遗漏并且出错. spring3.1之后提供了profile功能,可以切换不同的自定义profile环境,唯一的缺点是和maven结合不大好,只能在web.xml中进行修改. 方法如下: 1.在beans.xml中定义各个环境. <beans profile="develop"> </bean