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

目录
相关文章
|
8天前
|
运维 监控 Devops
DevOps文化下的自动化运维实践
【8月更文挑战第30天】在DevOps的浪潮中,自动化运维不再是选择题而是必答题。本文将深入浅出地探讨如何通过脚本和工具实现日常运维任务的自动化,从而提升效率,减少人为错误,确保系统的稳定性和安全性。我们将一起学习编写简单的自动化脚本,并探索如何使用现成的自动化工具来简化我们的工作。
|
9天前
|
运维 Devops jenkins
DevOps实践:自动化部署与持续集成
【8月更文挑战第29天】本文深入探讨了DevOps文化中的两大核心实践——自动化部署和持续集成。通过介绍这两个概念,解释了它们如何相互促进并提升软件开发的效率和质量。文章将展示具体的代码示例,指导读者如何在实际项目中实现这些实践,以及如何从中受益。
|
1天前
|
运维 Kubernetes Devops
DevOps 实践:从理论到现实的转变
【9月更文挑战第5天】本文旨在探索 DevOps 的核心理念与实践,通过深入浅出的方式,揭示 DevOps 如何影响现代软件开发和运维。文章不仅讨论了 DevOps 的理论框架,还提供了具体的实施案例,帮助读者理解如何在现实世界中应用这些概念。我们将一同见证 DevOps 如何优化流程、提高效率,并最终促进业务的成功。
|
10天前
|
运维 安全 Devops
云时代的运维之光:DevOps实践与挑战
在数字化浪潮中,DevOps作为提升软件开发效率和运维能力的重要理念,正引领着企业IT管理的革新。本文将探讨DevOps的核心价值、实施策略及其面临的挑战,旨在为读者提供一条清晰的路径,以实现更高效、更可靠的软件交付和运维管理。
|
5天前
|
运维 Cloud Native Devops
云原生时代的DevOps实践:自动化、持续集成与持续部署
【9月更文挑战第3天】未来,随着人工智能、大数据等技术的不断融入,DevOps实践将更加智能化和自动化。我们将看到更多创新的技术和工具涌现出来,为软件开发和运维带来更多便利和效益。同时,跨团队协作和集成也将得到进一步加强,推动软件开发向更加高效、可靠和灵活的方向发展。
|
3天前
|
Devops jenkins Shell
DevOps实践:持续集成与持续部署(CI/CD)的探索之旅
【9月更文挑战第3天】在软件开发的世界里,DevOps已经成为了提升效率、加速产品迭代的关键。本文将深入浅出地探讨DevOps文化中的核心实践——持续集成(Continuous Integration,CI)和持续部署(Continuous Deployment,CD),并展示如何通过实际操作来优化开发流程。我们将一起踏上这段旅程,解锁自动化的魅力,让代码更流畅地转化为价值。
|
8天前
|
Java Devops 持续交付
探索Java中的Lambda表达式:简化代码,提升效率DevOps实践:持续集成与部署的自动化之路
【8月更文挑战第30天】本文深入探讨了Java 8中引入的Lambda表达式如何改变了我们编写和管理代码的方式。通过简化代码结构,提高开发效率,Lambda表达式已成为现代Java开发不可或缺的一部分。文章将通过实际例子展示Lambda表达式的强大功能和优雅用法。
|
10天前
|
运维 Prometheus 监控
DevOps实践之道:从自动化到持续改进的旅程
【8月更文挑战第26天】 在数字化时代的浪潮中,DevOps作为软件开发和运维的结合体,已经成为推动企业IT效率提升的重要力量。本文将通过一系列浅显易懂的例子和步骤,引导读者理解DevOps的核心理念,并展示如何在实际工作中实现从自动化部署到持续改进的过程。文章不仅分享技术实践,更探讨了DevOps文化对于团队协作和个人成长的影响。
47 7
|
8天前
|
监控 安全 Devops
DevOps实践:持续集成和部署的自动化之旅
【8月更文挑战第30天】在软件开发的快节奏世界中,DevOps已成为推动项目成功的关键因素。本文将深入探讨如何通过持续集成(CI)和持续部署(CD)实现自动化,以加速开发流程、提升软件质量并确保快速交付。我们将从基础概念出发,逐步过渡到实际操作,最后讨论如何克服实施过程中的挑战。
|
10天前
|
运维 Devops 持续交付
自动化运维之路:从脚本到DevOps探索后端开发:从基础到高级实践
【8月更文挑战第28天】在数字化时代的浪潮中,企业对于IT运维的要求越来越高。从最初的手动执行脚本,到如今的自动化运维和DevOps实践,本文将带你领略运维的演变之旅。我们将探索如何通过编写简单的自动化脚本来提升效率,进而介绍DevOps文化的兴起及其对现代运维的影响。文章将为你揭示,通过持续集成、持续部署和微服务架构的实践,如何构建一个高效、可靠的运维体系。准备好让你的运维工作变得更加智能化和自动化了吗?让我们一起踏上这段旅程。 【8月更文挑战第28天】 本文旨在为初学者和有一定经验的开发者提供一个深入浅出的后端开发之旅。我们将一起探索后端开发的多个方面,包括语言选择、框架应用、数据库设计
下一篇
DDNS