我的devops实践经验分享一二

简介: 前言随着系统越来越大,开发人员、站点、服务器越来越多,微服务化推进,......等等原因,实现自动化的devops越来越有必要。当然,真实的原因是,在团队组建之初就预见到了这些问题,所以从一开始就决定这一块要自动化。

前言

随着系统越来越大,开发人员、站点、服务器越来越多,微服务化推进,......等等原因,实现自动化的devops越来越有必要。
当然,真实的原因是,在团队组建之初就预见到了这些问题,所以从一开始就决定这一块要自动化。
带来的实质好处也是显而易见的,人力成本的节省、规范化的流程、可追溯的发布历史、解脱双手(重复性劳动)、避免人为操作产生的错误等等。

感概一下

1.目前市面上的成套的产品要么贵的要死,要么不支持本地部署,要么就还是一个demo级别的东西,最重要的还是每个公司或者产品都有自己的一些特殊环境或者业务再里面。不一定都适合。反正是比较难找到好用的,而且是成套的产品来。期待一个devops界的SAP,而且还要便宜!
2.几个老大哥产品还是做得很牛逼!比如jira,confluence,jenkins,sonar。官方文档非常完善,网上教程多。接口完备。不像某些产品,看上去高大上,一用起来就是各种坑
3.懂开发的运维觉逼是牛逼的程序员!(^_^)
4.人真的非常重要,不然流程什么的,呵呵,都是个屁......

大概的样子

img_bd9f23398070cdccaa071ba5e5079fa9.png
当然,目前这套工具还有很多不完善的地方,随着不停的使用,或者变化的需求来进一步变化。

gitlab

开源的git仓库,主要有几个用途
1.源代码管理
分支管理规则可以参考gitflow,或者规定一个合适自己的就好,微服务化后,一个站点或者说一个项目参与的开发人员只有有限的几个人。用了简单的方法,master作为发布用分支,每次迭代开发使用新分支,上线前合并到master;线上简单的fix则直接在master分支上提交。
2.配置文件管理
放在gitlab上,主要是为了方便管理,以及追溯修改历史。当然,我们有自己的配置中心,能走配置中心的都尽量走配置中心,只有必须是文件配置管理的才放在gitlab上。
3.发布脚本管理
jenkins需要使用到的发布脚本。根据环境、源代码语言、部署方式等有所不同
img_1a4cd267af8ad2f76fe125bf42772222.png

jira

jira敏捷开发管理工具,管理需求、研发迭代等。在加上他们家公司的wiki做知识库管理基本稳了。
jira用下来发现还是相当强大!各种自定义可配置。页面、字段、流程等等全可配置。有http open api可以直接调用修改信息、触发流程等

使用的发布流程也比较简单。开发创建发布任务,然后提交给测试,测试在jira上操作发布到测试环境,准线上环境,线上环境进行测试等。准线上环境测试完后要发布到线上需要让具有leader权限的人进行一次审核,一方面是让leader知道有什么东西上线了,另一方面也是安全控制的一些原因(比如说节假日前夕最好是不在做更新等,要做更新就得报备,不然出问题节假日就得嗝屁)。
img_a7187c85025c83d8ff94cb5b2fe97b2d.png

截图是比较历史的版本了,最近在jira里面找了一个进度条插件,然后把构建发布的实时进度直接反馈到jira的页面上。这样就不用再打开发布系统查看发布进度了,进一步提高使用体验。

发布流程工作流,根据自身的情况设计的
img_ff0e0933fcb7d2a98562ee4065f28fe3.png

发布系统

这一块,是我们自己开发的一个简单系统。主要作用是衔接各个开源工具的使用。作为一个粘合剂系统使之分散的各个子工具能链接为一个整体。
虽然,jira里面有jenkins插件,jenkins里面有jira的插件,但是组件对各个系统都有版本要求,然后组件使用上也蛮不方便的,最后也有一些需求要解决起来相当麻烦,所以才有了自己的发布系统。
功能还是比较简单,一个前端小伙弄弄页面什么的1个礼拜就完事了,关键还是把当下的各种新技术都秀了一波,虽然页面挺丑的。几个系统的接口调用自己研究写一写也就几天就完事了。
主要完成的几个功能
1.发布配置管理
站点或者系统的开发语言,部署的目标系统,要部署那些主机,是不是docker容器方式,docker要部署几个示例,部署方式并发、串行发布,要走那一个nginx,绑定的域名,绑定的端口等等信息。
在新的系统或者站点发布的时候由运维和研发协调填写,后期则由运维来维护,比如扩缩容等
img_480f4d23f97739a7a365b5fb62814559.png

2.接收jira的发布任务操作通知,并通知到某一个Jenkins去执行,sonar进行静态代码检查等
3.接收jenkins构建部署反馈过来的进度
4.展示构建部署进度
img_ad1a936d5be3f2173a4d0b7581764936.png
5.一部分CMDB系统的功能,主机管理(ip,名称,用户名,密码)之类的。方便。
至于为什么不用世面上已有的CMDB系统,也实属无赖,要么要钱,要么好麻烦、要么没接口。索行自己简单做一个。能满足功能即可。
因为涉及到主机的账号密码之类的,所以密码都是公钥加密存储在系统上。
而密码的使用方有2个,一个是jenkins在部署的时候新机器在创建SSH免密登录的时候要用一次,还有就是远程管理工具要用,所以对密码的使用单独写了个小组件用私钥解密获得密码,然后把发布系统和小组件单独管理

jenkins

jenkins绝对可以说是这套工具里面的大佬了,可以说一切都是围着他在转。
接收发布系统发过来的构建请求,拉取代码,编译,拉取配置文件,打包成部署包,上传ftp,发布到私有docker仓库,部署等等。
还要区分系统环境,开发语言(windows、linux、nodejs、.net core)单独处理等。
1.参数化构建过程。比如要构建的分支名称之类的
2.源代码配置。git源代码地址,gitlab固定的代码只读账号,通过SSH进行代码的拉取。
3.调用构建脚本。jenkins内的执行命令大约如下面所示

#!/bin/bash -l
cd /opt/deployscript # 进入构建脚本目录
git pull #拉取最新的构建脚本
#调用构建脚本
#workspace,build_number,jobname,project_name,git_commit,git_branch,env,jira_id,userid
sh /opt/deployscript/${JOB_NAME}/${env}/deploy.sh "${WORKSPACE}" "${BUILD_NUMBER}" "${JOB_NAME}" "${PROJECT_NAME}" "${GIT_COMMIT}" "${selected_branch}" "${env}" "${JIRA_ISSUE_ID}" "${BUILD_USER_ID}"

jenkins的构建脚本

重中之重了,所有的驱动都在这个脚本里面了。分环境、分开发语言单独编写的构建或部署脚本。
为什么每一个站点都有一个脚本的原因则是总有那么一些站点是那么的特殊和优秀,当然觉得多数系统都可以走一个公共的构建脚本。
脚本有不少要调用其他系统接口的,我则直接用.net core 写了一个控制台应用,专门负责这个事情,毕竟写shell不是专业的。
具体的构建脚本就不贴上来了。
脚本执行步骤(net core 测试环境脚本):在每一个部署完成或者出错的时候都把进度反馈到发布系统上。
1.源代码在jenkins配置里面已经帮忙拉取好了。所以脚本不用拉代码了。
2.编译。比如dotnet publish -c Release -r linux-x64 -o “输出路径”
3.编译输出内容打包
4.上传到ftp。
5.拉取配置文件。
6.将输入内容和配置文件,等打成压缩包
6.拉取部署配置。要部署到那些机器,部署要并发还是要串行等
7.检查机器是否已经完成SSH免密配置了,没有配置则拉取密码配置好。
8.并行或者串行进行发布操作
9.SSH到目标机器,上传压缩包,部署脚本
10.执行部署脚本(解压,停掉原来的服务,启动新的服务,检查是否启动成功等)
img_24f2712395138d26dd91cdf4385bb2e6.png

sonar静态代码检查

在发布系统中接收到jira的发布请求后,拉取站点的配置,如果是需要进行sonar检查则把请求发送给sonar的jenkins。
目前我们配置的是发布到产线的时候才做sonar的静态代码检查,然后再sonar系统里面配置了。
后面看需要,是否要对sonar的结果进行邮件。打算这样做。每周出一份代码质量报告,统计一周内已上线的项目和上一周相比错误,漏洞,坏味道,覆盖了等数据的变化。弄个定时任务,sonar 2个接口获取一下数据,存储对比结果,发个邮件就完事了。

简单总结一下

文章随便写写,很多东西交代的不清楚,还有很多东西压根就没有说。比如说堡垒机集成,日志、host监控集成等等等。我不会说实在是我太懒了,打字好累啊!
总之,欢迎交流!!虽然实现的不完整,但是还是适合目前自身的需求的。合适的才是最好的嘛

感谢开源界大佬的贡献,虽然我还没钱捐款。让社区有那么多那么多好用的产品。
感谢前人已经种好的大树,很凉快!

整套工具搭建完成,如果真的算时间估计也就不到一个月,当然真实情况是零零散散的,东戳戳,西戳戳。好在做这个事情之前有一个简单的规划,没有走弯路,虽然再找国产产品的路上耗费了一些时间

从开始使用开始,3个月不到就发了不下2000次,这还是在刚起步阶段。可想而知,确实是生产力工具

目录
相关文章
|
2天前
|
运维 Kubernetes Devops
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
【5月更文挑战第25天】 在当今快速迭代的软件发展环境中,传统的IT运维模式已经难以满足敏捷性和效率的双重要求。本文将探讨如何通过整合DevOps理念和容器化技术来构建一个高效且稳定的云基础设施。文章首先概述了DevOps的核心原则和实施过程中的挑战,接着分析了容器化技术的优势以及它如何帮助解决这些挑战。最后,文中将展示一个具体的实践案例,说明如何将DevOps和容器化技术结合应用于实际的云基础设施部署中,以提升运维效率和系统稳定性。
|
2天前
|
运维 Kubernetes Devops
构建高效自动化运维体系:DevOps与容器技术融合实践
【5月更文挑战第25天】 在当今快速迭代的软件开发周期中,传统的IT运维模式已难以满足高效率、低成本和敏捷响应的业务需求。本文将探讨如何通过整合DevOps理念和容器技术来构建一个高效的自动化运维体系。我们将详细剖析持续集成/持续部署(CI/CD)流程的实施,容器化技术的运用,以及这些策略如何帮助企业实现运维效率的显著提升和服务稳定性的保障。文章还将提供一些实用的工具选择建议,并讨论在实施过程中可能遇到的挑战及相应的解决策略。
|
3天前
|
运维 Kubernetes Devops
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
【5月更文挑战第24天】 在当今快速迭代和竞争激烈的软件市场中,传统的IT运维模式已难以满足业务敏捷性和效率的双重要求。本文将深入探讨如何通过DevOps理念和容器化技术的有机结合,打造一个既高效又稳定的云基础设施环境。文章不仅剖析了DevOps的核心原则、自动化工具链的搭建,还详细阐述了容器化技术如Docker和Kubernetes在现代云部署中的关键作用。此外,本文还将分享一系列真实案例,展现这一融合实践如何在企业中落地,以及它所带来的显著效益和潜在挑战。
|
3天前
|
运维 Kubernetes Devops
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
【5月更文挑战第24天】 在当今快速迭代的软件发展环境中,传统的运维模式已无法满足敏捷开发和持续集成的需求。本文深入探讨了如何通过融合DevOps理念和容器化技术来构建一个高效、稳定且可扩展的云基础设施。文章首先概述了DevOps的核心概念及其在现代软件交付过程中的重要性,接着详细阐述了容器化技术的优势以及它如何改变应用部署和维护的方式。文章通过实际案例分析,展示了这一融合模式在提高自动化水平、优化资源利用以及加快产品上市时间方面的显著效益。
|
6天前
|
运维 Kubernetes Devops
构建高效可靠的云基础设施:DevOps与容器化技术融合实践
【5月更文挑战第21天】在数字化转型的浪潮中,企业对云基础设施的依赖日益加深。本文探讨了如何通过融合DevOps理念和容器化技术来构建一个既高效又可靠的云基础设施。文章首先回顾了DevOps的核心概念和实施要点,接着介绍了容器化技术的基础知识及其优势。随后,文中详细阐述了将DevOps和容器化技术结合的实践策略,包括持续集成/持续部署(CI/CD)流程的优化、微服务架构的应用以及自动化测试的重要性。最后,通过案例分析展示了这种融合如何在真实环境中提升运维效率和系统稳定性。
|
12天前
|
运维 Kubernetes Devops
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
【5月更文挑战第15天】 在当今的云计算时代,企业为了保持竞争力,不断寻求提高软件交付速度和服务质量的方法。本文将探讨如何通过结合DevOps原则和容器化技术来构建一个既高效又稳定的云基础设施。文章首先介绍了DevOps的核心概念及其如何促进开发与运维的协作,然后详细阐述了容器化技术如何优化应用部署和运行环境。最后,通过一个实际案例分析,展示了这种融合策略在提升自动化水平、加快部署速度以及增强系统稳定性方面的具体成效。
|
12天前
|
运维 监控 Devops
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
【5月更文挑战第14天】 在当今快速迭代的软件发展环境中,传统的IT运维模式已难以满足业务需求。本文探讨了如何通过DevOps文化和容器化技术的融合来构建一个高效且稳定的云基础设施。文中不仅分析了DevOps的核心理念及其对于提升运维效率的影响,还深入剖析了容器化技术如Docker和Kubernetes在自动化部署、弹性伸缩及微服务架构中的关键作用。此外,文章还将分享一系列实践经验,帮助读者理解如何在实际工作中将DevOps与容器化技术有效结合,以支持业务的敏捷性和可靠性。
21 2
|
12天前
|
运维 Kubernetes Devops
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
【5月更文挑战第14天】 随着云计算的普及和企业数字化转型的深入,构建一个高效、稳定且能快速响应市场变化的云基础设施已成为众多组织的技术战略核心。本文将探讨如何通过DevOps文化和容器化技术的结合,实现自动化运维流程,提升服务部署效率,确保系统的可扩展性和高可用性。我们还将分析面临的挑战及解决方案,并展示在实际案例中的应用成果。
10 0
|
12天前
|
安全 Devops 测试技术
深入了解阿里云云效DevOps:构建高效软件开发实践
阿里云云效DevOps,集成CI/CD与自动化测试,提升开发效率。支持持续集成确保代码质量,自动化测试加速交付,多环境及灰度发布保障安全可靠性。助团队构建高效开发实践,增强竞争力。
37 1
|
12天前
|
运维 Kubernetes Devops
构建高效自动化运维体系:DevOps与容器化技术融合实践
【5月更文挑战第6天】随着企业IT架构的复杂化以及快速迭代的市场需求,传统的运维模式已难以满足高效率和高质量的交付标准。本文将探讨如何通过结合DevOps理念和容器化技术来构建一个高效的自动化运维体系,旨在实现持续集成、持续部署和自动化管理,提升系统的可靠性、可维护性和敏捷性。

热门文章

最新文章