持续集成开篇之(一)代码发布流程

最近在网上看了不少有关CI/CD的文章,其实基本是雷同的,且内容也不是非常完善。确实,当前持续集成用到的开源工具无非还是Git、Jenkins、Ansible(Fabric)这些,不同的应该是各公司的技术框架差异,发布审核流程不同,从而使配置细节也有较大不同。接下来我要分享的一系列文章均是围绕生产版本发布、集群中间件搭建以及监控来写,并且都是这些年(2014-至今)我们一直还在用的技术(包括具体环境搭建以及前后端发布等细节),欢迎拍砖,共同探讨。

我们一直沿用的一套流程如下:

0、在公司内部搭建gitlab服务器,员工自行在公司gitlab服务器通过公司邮箱完成账号注册。

1、配置管理员在gitlab上创建project(项目或仓库),建议按业务线或功能先分group(组),然后再在group下创建具体的project,避免所有project混在一个group。

2、源码放在源码project;编译后可用于发布包放在可发布的project。

3、配置管理员对已注册开发人员分配权限(master、develop、Reporter等),权限可在group上分配,也可细到某个project。

4、开发人员通常只分配develop权限且在develop分支进行开发,开发人员不允许直接提交代码到master(主分支),如需提交到master,则需要发出合并请求,由项目管理者review后决定是否合并。

5、源代码合并后,由合并者打tag触发jenkins构建出用于发布的版本包,并推送到对应发布代码的project中,同步tag,同时根据最新tag发布到测试环境。

6、在经过代码审查、集成测试、功能测试以及安全性测试等都通过后,且经产品人员确认同意发布,再使用jenkins将测试通过的tag发布到RC环境。

7、RC运行正常,产品人员确认同意发布到生产,再使用jenkins将RC通过的tag(测试和RC的tag均是同一个)发布到生产环境。

8、如果发布后出现异常,则使用jenkins按上一次正常tag进行回滚。

上述是一个较理想的流程,但实际开发过程中,一名开发人员可能身兼多职,包括编码、测试等,所以可能更通用的流程如下图1描述所示。

图1
同样,一般中小规模公司,一般只有一到两名运维人员,那么在维护上述发布框架同时,该名运维人员常备的技能如下:

0、与开发、测试、产品同学之间的和谐沟通及协调能力。

1、Gitalb搭建以及配置管理功能,包括备份恢复、邮件通知、权限分配、通过API创建project、Webhooks、tag(标签)规范化并实现自动生成tag等常用维护操作。

2、Jenkins环境搭建以及配置管理功能。包括插件安装、权限分配、邮件通知、脚本创建job、参数化构建等。

3、脚本编写能力,包括Shell、Fabric或借助Ansible完成代码编译、推送、发布(回滚也是发布)等。

4、日志集中收集,如配置syslog-ng和ELK,个人更倾向于用syslog-ng完成集中收集,然后用ELK来展示,因为在发布过程中开发人员更习惯使用tailf来查看发布过程中是否报错以便及时回滚。

5、监控,推荐使用Zabbix+Grafana,也可使用Nagios。实现对网络设备监控(CPU、内存、温度、接口流量等)、服务器硬件监控(通过IPMI接口获取硬件故障信息)、系统监控(内存、CPU、磁盘空间和IO、负载、网卡流量、文件句柄等)、集群中间件监控(集群状态、CPU、内存使用、日志等)服务监控(进程、端口、响应状态码、日志等)、数据库监控(常用命中率指标、表空间、慢查询、日志等)、业务监控等,确保业务7*24不时不中断稳定运行。

6、集群中间件搭建以及维护能力,诸如Zookeeper、Redis、Mongodb、RabbitMQ、RocketMQ等。

7、数据库集群搭建以及维护能力,包括Oracle、MySQL。不过,现在中小规模公司基本在云上,主要用的是RDS,个人觉得阿里云RDS的性能监控可视化做得非常棒,远超AWS。

总结:干运维真得非常不容易,分分钟就会当背锅侠,请对运维好一点!
下一篇:Gitlab搭建与配置技巧

原文地址:https://blog.51cto.com/firefly222/2455073

时间: 2024-11-08 19:05:48

持续集成开篇之(一)代码发布流程的相关文章

python操作git,代码发布流程

代码发布流程 服务器管理 项目管理 发布任务管理 django+channels发布/部署 python如何操作git 安装 pip3 install gitpython 基本使用 # 从远处仓库下载代码到本地 import os from git.repo import Repo # 创建本地存储地址 download_path = os.path.join('jason','NB') # 从远程仓库下载代码 Repo.clone_from('https://github.com/Domini

持续集成 Jenkins +Gitlab + SSH 自动发布 HTML 代码

一.整体流程 二.Jenkins 配置 2.1.首先安装插件 Gitlab Hook Plugin GitLab Plugin Publish Over SSH 2.2.配置目标服务器 系统管理 ---> 系统设置 ---> Publish over SSH 如果不想使用密钥认证登陆,也可以使用 账户密码登陆. 2.3.创建 job 我们创建一个自由风格的 job,配置好 git 源,这里也可以配置无密钥登陆,我这里使用账户密码. 创建触发器,用于自动构建,我们需要把其中的 url 添加到我们

代码发布项目(三)——python操作git、代码发布流程(服务器管理、项目管理)

一.python如何操作git 如果你想用python代码操作git需要下载一个模块 安装 pip install gitpython 基本使用 # 从远处仓库下载代码到本地 import os from git.repo import Repo # 创建本地存储地址,没有会自动创建文件 download_path = os.path.join('jason','NB') # 从远程仓库下载代码 Repo.clone_from('https://github.com/DominicJi/Teac

明晚九点|发布系统演进与持续集成

主题:发布系统演进与持续集成 内容: 背景介绍 手动发布的阶段 自动化阶段---脚本 puppet 自主研发支持 支持容器化 持续集成 主讲师:萝卜 多年 go 语言开发经验 从事自动化运维和基础架构相关工作 背景 管理什么? 用户 权限 配置文件 软件包 服务 机器 cron 特色 支持异构系统,linux.windows 支持多种语言,java.php.c++.web 大规模部署 跨 IDC 与其它运维工具无缝集成 支持全量与增量发布 支持健康检查 支持各种并发控制 支持各种数据统计 实时性

持续集成并不能消除 Bug,而是让它们非常容易发现和改正(转)

互联网软件的开发和发布,已经形成了一套标准流程,最重要的组成部分就是持续集成(Continuous integration,简称 CI). 本文简要介绍持续集成的概念和做法. 一.概念 持续集成指的是,频繁地(一天多次)将代码集成到主干. 它的好处主要有两个. 1.快速发现错误.每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易. 2.防止分支大幅偏离主干.如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成. 持续集成的目的,就是让产品可以快速迭代,同时还

使用Docker实现丝般顺滑的持续集成

持续集成(Continuous Integration,简称CI)作为先进的项目实践之一,近年来逐渐受到国内软件公司的重视:但对于许多朋友来说,可能从未听说过持续集成这个词,抑或只是了解概念但并没有实践过. 什么是持续集成?它对软件开发有哪些好处呢? 持续集成的概念 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.尤其是近些年来,敏捷(Agile)在软件工程领域越来越红火,如何能在不断变化的需求中快速适应和保证软件质量也显得

持续集成是什么?

互联网软件的开发和发布,已经形成了一套标准流程,最重要的组成部分就是持续集成(Continuous integration,简称 CI). 本文简要介绍持续集成的概念和做法. 一.概念 持续集成指的是,频繁地(一天多次)将代码集成到主干. 它的好处主要有两个. 1.快速发现错误.每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易. 2.防止分支大幅偏离主干.如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成. 持续集成的目的,就是让产品可以快速迭代,同时还

持续集成之戏说Check-in Dance(转)

add by zhj: 先说一下持续集成的定义,这是ThoughtWorks首席科学家Martin Fowler在<持续集成>第二版中给出的,“持续集成是一种软件开发实践.在持续集成中,团队成员频繁集成他们的工作成果,一般每人每天至少集成一次,也可以多次.每次集成会经过自动构建(包括自动测试)的验证,以尽快发现集成错误.许多团队发现这种方法可以显著减少集成引起的问题,并可以加快团队合作软件开发的速度.” 这里是<持续集成>第二版的一些简单介绍:http://www.infoq.co

有容云老司机带路, 使用Docker实现丝般顺滑的持续集成

持续集成作为最先进的项目实践之一,近年来逐渐受到国内软件公司的重视:但对于许多朋友来说,可能从来都没有听说过持续集成这个词,抑或只是了解一个概念但并没有实践过. 什么是持续集成?它对软件开发有哪些好处呢? 持续集成的概念 持续集成,Continuous integration ,简称CI. 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.尤其是近些年来,敏捷(Agile) 在软件工程领域越来越红火,如何能在不断变化的需求中快