引言

代码发布系统是互联网公司必备的运维系统,作用主要用户发布业务代码 到 业务服务器

为什么需要代码发布系统

有的同学可能说,我们公司服务器就那么一台,做个发布系统太麻烦了? 不认同这说法

发布系统有如下好处

  1. 流程管理,加上权限管理,可以在系统记录 谁 做了 什么 操作

  2. 减少人工误操作影响,登录服务器本身操作就是有误操作的可能的

  3. 运维自动化  为运维工作减负

  4. 加快发布速度  不用人工登录N台服务器发布

  5. 方便快速回滚版本

技术选型

git:代码管理工具  git使用笔记

rsync:同步代码到指定服务器

Yii2:php mvc 框架

Bootstrap3:前端框架

jquery:js库

代码发布系统

流程框架图

  1. Web界面化操作,流程化管理 ,提交发布任务

  2. 定时脚本 获取发布任务

  3. 制定同步策略 发布代码

界面化操作,流程化管理

流程化管理在人员比较多的时候优势特别明显,人多手杂很容易出问题。所以在代码发布系统中加入流程化管理也是与时俱进

上图是我画的一个比较完善的流程图(以前公司实现过这么复杂的流程),描述如下

  1. 新建开发分支

  2. 本地开发并提交代码

  3. 发布到测试服务器

  4. 测试人员测试

  5. 测试通过之后等待主管审批上线(测试没通过重走2-4步骤)

  6. 发布上线

  7. 产品 项目经理验收

  8. 项目完成

PS:其中 1、3、6 是业务逻辑(需要脚本帮助的), 其他都是流程控制

定时脚本  获取发布任务

通过流程控制将 发布上线 的任务 推送 队列中去了,就需要有消费队列任务的脚本,关于定时脚本我没有选择使用crontab,因为crontab最低也是从分钟开始 不满足业务需求,建议写一个常驻内存的shell,如下 每2秒运行一次

#!/bin/sh
cmd='php yii release/index'
while true
do
    if [ $(ps -ef |grep  '$cmd' |grep -v grep|wc -l) -eq 0 ];then
        eval $cmd
        sleep 3;
    else
        echo 'queue is Running';
    fi
done

脚本中 release/index 源码地址:https://github.com/apanly/dream/blob/master/console/controllers/ReleaseController.php

关联配置

'ops_repo' => [
   "dream_blog" => [
      'title' => '博客',
      'feature' => [
         'path' => '/home/www/yii_tools/tools'
      ],
      'remote' => [
         'hosts' => [  ],
         'path' => '/home/www/yii_tools/dream',
         'ssh_param' => ' -i /home/www/.ssh/publish_rsa  www@'
      ],
      'version' => [
         '/tmp/release_version/version_blog'
      ]
   ]
]

制定同步策略 发布代码

关于同步策略 我实践过几种,根据不同的情况 使用不同的策略,以下仅是个人经验

  • 单独业务服务器多余10台 少于20台  建议使用 rsync  推送 到 目标服务器(此时如果直接在目标服务器上git 操作 很慢,并且源服务器load有点高)

  • 单独业务服务器少于10台  建议直接 在 目标服务器 执行git命令 (当然也可以rsync)

实例展示

(图一)

(图二)

(图三)

(图四)

  • 图一:展示的是发布任务列表

  • 图二:展示的是添加发布任务的操作

  • 图三:展示的发布任务执行过程中所执行的指令

  • 图四:是对图三的补充,因为本人博客系统很简单 没有远程(remote)服务器,只更新本地服务器,所以图四截图是原来在公司做的系统 发布远程代码的输出,对图三中的remote对象补充

PS:操作对象 version 是版本号操作,作用有两个

  1. 为静态资源加上版本号,浏览器会访问重新请求资源(达到穿透浏览器缓存的作用)

  2. 版本回滚

如下图

参考资料

  1. git使用笔记

  2. 【RBAC】打造Web权限控制系统

原文地址:【运维工具】Git代码发布系统
标签:git   发布系统   运维   rsync

智能推荐

【运维工具】Git代码发布系统的更多相关文章

  1. Python自动化运维工具-Fabric部署及使用总结

    使用shell命令进行复杂的运维时,代码往往变得复杂难懂,而使用python脚本语言来编写运维程序,就相当于开发普通的应用一样,所以维护和扩展都比较简单,更重要的是python运维工具fabric能自 ...

  2. linux自动化运维工具Ansible saltstack Puppet、Chef、Fabric之间的对比

    发现分布式是一个发展的趋势,无论是大型网站的负载均衡架构还是大数据框架部署,以及云存储计算系统搭建都离不开多台服务器的连续部署和环境搭建. 当我们的基础架构是分散式或者基于云的,并且我们经常需要处理在 ...

  3. CheungSSH国产自动化运维工具开源Web界面

    CheungSSH web2.0 发布文档 CheungSSH 简介 CheungSSH是一款国人自主研发的Linux运维自动化管理服务器软件,秉着为企业降低运营成本,解放管理员双手和自动化生产的理念 ...

  4. 自动化运维工具之 Ansible 介绍及安装使用

    一.初识Ansible 介绍: Absible 使用 模块(Modules)来定义配置任务.模块可以用标准脚本语言(Python,Bash,Ruby,等等)编写,这是一个很好的做法,使每个模块幂等.A ...

  5. 自动化运维工具SaltStack详细部署

    ==========================================================================================一.基础介绍==== ...

  6. 自动化运维工具SaltStack详细部署【转】

    ==========================================================================================一.基础介绍==== ...

  7. 轻量级自动化运维工具Fabric的安装与实践

    一.背景环境 在运维工作中,经常会遇到重复性的劳动,这个时候为了效率就必须要使用自动化运维工具. 这里我给大家介绍轻量级自动化运维工具Fabric,Fabric是基于Python语言开发的,是开发同事 ...

  8. Python自动化运维工具fabric的安装

    使用shell命令进行复杂的运维时,代码往往变得复杂难懂,而使用python脚本语言来编写运维程序,就相当于开发普通的应用一样,所以维护和扩展都比较简单,更重要的是python运维工具fabric能自 ...

  9. distri.lua的web运维工具

    我的新手游项目很快就要进入到寻找发行商的环节,最近几天相对较空闲,逐将工作重心转移到服务器组运维工具的制作上. 回想一年之前经历的那个不算成功的端游项目,因为运维工具设计得不合理,使用十分不方便,游戏 ...

随机推荐

  1. nginx访问不了zabbix安装配置界面

    通过yum安装的php等其他各种软件,配置好后,html目录下面php可以解析,但是就是访问不到setup.php文件.后来各种查找,发现是setup解析错误 PHP Parse error:  sy ...

  2. 命令行环境下简单实用的工具——重定向&管道

    如果你对管道和重定向应用自如了,无需继续往下看.本文虽然以windows上cmd命令行环境演示,但同样适用于Unix/Linux等平台. 引言 关于管道和重定向,最初是在刘汝佳的<算法竞赛入门经 ...

  3. laravel安装笔记

    一.安装composer 安装之前将\php\php.ini文件中的php_openssl.dll扩展库开启,否则composer在安装过程中会出现错误提示. (我在安装过程中发现apache目录下的 ...

  4. 【Javascript】解决Ajax轮询造成的线程阻塞问题(过渡方案)

    一.背景 开发Web平台时,经常会需要定时向服务器轮询获取数据状态,并且通常不仅只开一个轮询,而是根据业务需要会产生数个轮询.这种情况下,性能低下的Ajax长轮询已经不能满足需求,频繁的访问还会造成线 ...

  5. 【转载】scribe、chukwa、kafka、flume日志系统对比

    原文地址:http://www.ttlsa.com/log-system/scribe-chukwa-kafka-flume-log-system-contrast/ 1. 背景介绍许多公司的平台每天 ...

  6. Win10 Migrate apps to the Universal Windows Platform (UWP)

    https://msdn.microsoft.com/en-us/library/mt148501.aspx

  7. 无法从“char*转换为“LPCWSTR”

    解决办法: 第一种方法:工程属性->配置属性->右边 项目默认值->字符集 改为未设置 第二种:一般直接加个L在前面,当是字符串常量的时候可以这样,也可以_T(x)等   来自:软件 ...

  8. Oracle在存储过程中如何返回结果集

    Oracle和Sqlserver不一样的地方有很多. 个人最深的体会是存储过程返回结果集,在Sqlserver中直接select查询就行,Oracle就不行了. 这里,就用最简单的例子说明存储过程返回 ...

  9. Mac安装软件报“打不开。。。,因为它来自身份不明的开发者”的解决办法

    问题描述 在Mac上安装git,双击pkg进行安装,报如下图错误: 解决办法 不要双击pkg文件,改成选中文件之后,鼠标右键,选择“打开方式->安装器(默认)”,即可继续安装.

  10. UML学习(三)-----序列图

    UML的模型中可分为两种,动态模型和静态模型.用例图.类图和对象图都是UML中的静态结构模型.而在UML系统动态模型的其中一种就是交互视图,它描述了执行系统功能的各个角色之间相互传递消息的顺序关系.序 ...