我的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次,这还是在刚起步阶段。可想而知,确实是生产力工具

目录
相关文章
|
10天前
|
运维 Devops 持续交付
DevOps实践:持续集成与持续部署的黄金法则
在软件工程领域,DevOps作为一种文化和实践的集合,旨在加强开发(Dev)与运维(Ops)之间的协作与整合。本文深入探讨了持续集成(Continuous Integration, CI)和持续部署(Continuous Deployment, CD)的概念、重要性以及实施策略,同时结合真实案例分析其在实际运维工作中的应用效果。文章旨在为读者提供一套系统的方法论,以实现软件开发流程的自动化、效率提升及风险降低。 【7月更文挑战第17天】
|
22天前
|
监控 Devops 测试技术
利用DevOps提升开发效率:技术实践与策略
【7月更文挑战第4天】DevOps通过自动化、CI/CD、协作与沟通等手段,显著提升了软件开发的效率和质量。随着云计算、容器化、自动化测试等技术的不断发展,DevOps的实践将更加深入和广泛。未来,更多的企业将采用DevOps文化,构建高效、灵活、可靠的软件开发和运维体系,以应对快速变化的市场需求。 总之,利用DevOps提升开发效率是软件开发领域的重要趋势。通过实施上述实践策略,企业可以加速产品迭代,提高市场竞争力,实现可持续发展。
|
2天前
|
运维 监控 Devops
DevOps实践:持续集成与持续部署的黄金路径
在数字化时代,快速迭代和高质量软件交付成为企业竞争的核心。本文深入探讨了DevOps文化下,持续集成(CI)与持续部署(CD)的最佳实践,旨在为读者提供一套实现高效、自动化的软件发布流程的方法论。通过分析现代软件开发的挑战,结合具体案例,本文详细阐述了如何构建一个灵活、高效的CI/CD流水线,以及如何利用监控和反馈机制不断优化这一过程。文章不仅适合运维人员阅读,同时也为软件开发者和项目经理提供了宝贵的参考。
|
2天前
|
机器学习/深度学习 运维 监控
DevOps实践:从自动化部署到性能监控的全面解析
在当今快速发展的软件行业中,DevOps已经成为提升效率和质量的关键。本文将深入探讨DevOps的核心概念、实施步骤及其带来的益处,同时通过实际案例分析展示如何成功实施DevOps流程,并讨论面临的挑战及未来发展趋势。
|
4天前
|
运维 监控 安全
DevOps实践:构建高效运维团队的五大策略
在当今快速发展的IT领域,DevOps已成为提升软件开发和运维效率的关键。本文将深入探讨如何通过实施五大策略来构建一个高效的运维团队,包括自动化流程、持续改进、协作文化、监控与响应以及安全优先。这些策略旨在帮助组织缩短开发周期,提高软件质量,同时确保系统的稳定性和安全性。
20 5
|
2天前
|
运维 监控 Devops
DevOps文化在团队中的推广与实践:加速创新与提升效率的密钥
【7月更文挑战第25天】DevOps文化在团队中的推广与实践是提升软件开发效率、增强团队协作、提高产品质量和推动创新的关键。通过领导支持、教育培训、自动化工具引入、持续反馈和跨功能团队协作等策略,企业可以逐步构建起高效、响应性强、持续改进的DevOps文化。在这个竞争激烈的市场环境中,DevOps文化将帮助团队更好地应对挑战,实现持续的成功和成长。
|
4天前
|
运维 监控 Devops
DevOps实践:构建高效运维流程
【7月更文挑战第23天】在当今快速发展的信息技术时代,DevOps作为一种文化和实践,正在彻底改变软件开发和运维的方式。本文将深入探讨如何通过实施DevOps原则和工具来构建高效的运维流程,旨在帮助读者理解DevOps的核心概念、实施步骤以及面临的挑战,并提供实用的解决方案和最佳实践。文章将重点介绍自动化部署、持续集成、监控和反馈机制等关键要素,以促进团队协作,提升软件交付速度和质量。
|
6天前
|
运维 监控 安全
DevOps实践:从理论到企业级应用的转化之路
【7月更文挑战第21天】在数字化转型的大潮中,DevOps作为一种提升软件开发与运维效率的方法论,正逐步成为企业IT战略的核心。本文将从DevOps的基本概念出发,深入探讨其在企业级应用中的实践路径,包括文化理念转变、工具链的选择与集成、持续交付的实施步骤以及监控与反馈机制的建立。通过分析成功案例,旨在为读者提供一条清晰的DevOps转型路线图,帮助技术团队和运维人员理解并实施DevOps,以实现快速迭代和高效运营的目标。
|
12天前
|
运维 Devops 测试技术
DevOps实践:从持续集成到自动化部署的旅程
在当今快速发展的软件行业,DevOps作为一种文化和实践的集合,旨在促进开发(Dev)和运维(Ops)之间的协作与整合。本文深入探讨了DevOps的核心原则、实施过程中的关键步骤以及面临的挑战,同时提供了实际案例分析,以展示如何通过持续集成和自动化部署来提升软件开发的效率和质量。
|
10天前
|
运维 监控 Devops
DevOps实践:持续集成与持续部署在现代软件开发中的作用
【7月更文挑战第17天】本文将深入探讨DevOps文化下的两大核心实践——持续集成(CI)和持续部署(CD)。我们将从理论与实操的角度,剖析这两个概念如何转变软件开发流程、提升产品质量与开发效率。文章旨在为读者提供一套清晰的指导原则,帮助他们在实际工作中更好地实施CI/CD,以适应快速变化的市场需求。