惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Microsoft Azure Blog
Microsoft Azure Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Webroot Blog
Webroot Blog
腾讯CDC
The Last Watchdog
The Last Watchdog
博客园 - 司徒正美
H
Hacker News: Front Page
I
InfoQ
A
Arctic Wolf
H
Hackread – Cybersecurity News, Data Breaches, AI and More
H
Heimdal Security Blog
L
LINUX DO - 最新话题
T
Threat Research - Cisco Blogs
宝玉的分享
宝玉的分享
Last Week in AI
Last Week in AI
Security Latest
Security Latest
D
DataBreaches.Net
C
Check Point Blog
J
Java Code Geeks
www.infosecurity-magazine.com
www.infosecurity-magazine.com
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Attack and Defense Labs
Attack and Defense Labs
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
L
Lohrmann on Cybersecurity
雷峰网
雷峰网
Vercel News
Vercel News
WordPress大学
WordPress大学
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Spread Privacy
Spread Privacy
Forbes - Security
Forbes - Security
阮一峰的网络日志
阮一峰的网络日志
Hacker News: Ask HN
Hacker News: Ask HN
大猫的无限游戏
大猫的无限游戏
I
Intezer
N
News and Events Feed by Topic
小众软件
小众软件
B
Blog RSS Feed
Help Net Security
Help Net Security
Google DeepMind News
Google DeepMind News
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 三生石上(FineUI控件)
S
Security @ Cisco Blogs
美团技术团队
Recent Announcements
Recent Announcements
Martin Fowler
Martin Fowler
Engineering at Meta
Engineering at Meta
The GitHub Blog
The GitHub Blog
MyScale Blog
MyScale Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main

博客园 - 汉克书

新工作新气象 记录一些skill的网站 重构代码的思路想法 内网服务器如何跟服务端通信 增加一下git提交记录的关键词 ai生成一段学习golang的select、context、go、channel的代码 水一篇博文 文件服务器对于devops的用处 git信息提交错误,进行修改 还是没啥东西写的,写点DevOps的想法 就是想吐槽一下信创 这个月好像没啥可以写的,rest client mac和linux终端显示分支 继续一个日常 devops 这个月又没什么东西可以写的,就写个harbor的arm版本获取地方吧 写一个日常吧 docker 在x86运行arm容器 ansible的最佳实践 临时用的
突然想了一些“思路”问题。提出的一些想法
汉克书 · 2025-08-01 · via 博客园 - 汉克书

突然想了一些“思路”问题。提出的一些想法

AI润色后的文章

标题:运维脚本的困境与破局之道:从混乱到规范

引言:
在日常运维工作中,脚本是我们不可或缺的利器。然而,我多次遇到(甚至自己也写过)一些运维脚本,它们在便捷之余,却也带来了不少维护和协作上的麻烦。今天就来聊聊这些常见的问题,以及我的一些思考和改进思路。

一、常见的运维脚本痛点

  1. “孤胆英雄”式开发:

    • 问题: 习惯独自开发,缺乏协作意识。不懂或不遵循基本的 Git 规范,例如分支管理 (feature/bugfix 分支)、规范的合并请求 (Merge Request/Pull Request) 操作。
    • 风险: 代码仅存于个人电脑或单一服务器。一旦设备故障或服务器意外,代码瞬间“蒸发”,损失惨重。
  2. “臃肿巨无霸”式耦合:

    • 问题一(资源耦合): 脚本目录下直接堆砌各种静态文件(安装包、依赖包、配置文件等),并一股脑提交到 Git 仓库。导致仓库体积爆炸,克隆/拉取缓慢,历史记录混乱,完全违背了版本控制的初衷。
    • 问题二(逻辑耦合): 一个 Shell 脚本动辄上千行,所有功能、逻辑、配置都硬塞在一个文件里。阅读、修改、复用、调试都极其困难,牵一发而动全身。

二、破局思路:意识转变与能力提升

解决上述问题,核心在于两点:

  1. 意识转变:拥抱合作与解耦思维

    • 合作: Git 是现代开发的基石。掌握分支策略、合并操作、提交规范是必备技能,是团队协作和代码安全的保障。
    • 解耦: 这是一种关键的工作习惯和思维方式。目标是让代码模块化、职责单一、依赖清晰。学会“分而治之”,模仿优秀项目的架构设计。
  2. 能力提升:系统性学习与模仿

    • 精通一门语言: 对于运维而言,Python 是极佳的选择。关键是要系统性地学习,理解其设计哲学、核心库、工程化实践(包管理、虚拟环境等),而非浅尝辄止,仅满足于“够用”。扎实的语言基础是写出好脚本的前提。
    • 模仿优秀实践: 看别人怎么写!研究优秀开源项目或内部成熟脚本的:
      • 代码框架设计: 如何组织目录结构?如何拆分模块?
      • 代码内容设计: 如何设计函数/类?如何处理错误?如何管理配置?
      • Shell 解耦实例:
        • 方式一:模块化脚本。 一个主入口脚本 (main.sh),通过 source 或直接调用 (bash module1.sh) 引入其他功能独立的子脚本。
        • 方式二:函数化封装。 将不同功能封装成独立的函数(即使在同一文件内),主流程清晰调用这些函数。目标:高内聚,低耦合。
    • 研究并遵守规范: 规范是保证代码质量和可维护性的重要手段。
      • Python: PEP 8 (代码风格), PEP 20 (Zen of Python)
      • Go: Uber Go Style Guide (社区广泛认可)
      • Shell: 参考 Google Shell Style Guide 或其他社区公认的优秀指南。保持代码风格一致至关重要。

三、总结与行动建议

运维脚本的质量,直接关系到效率、可靠性和团队协作体验。告别“一次性脚本”,拥抱工程化和规范化,是提升运维能力的必经之路。

如何开始?

  1. 立即行动学习: 花时间系统学习 Git 和 Python(或其他选定的语言)。
  2. 刻意模仿练习: 找到优秀的脚本或项目,拆解其结构,模仿其设计。例如,可以参考我这个 Ansible 脚本模板
    • 它演示了配置管理的思路:config/config.sh 存放默认配置,config.ini 允许用户覆盖自定义配置,实现了配置与脚本逻辑的解耦。
  3. 拥抱规范和工具: 严格遵守语言和项目的编码规范,利用 Linter (shellcheck, pylint, gofmt 等) 检查代码。
  4. 善用脚手架: 好的脚手架能快速生成符合最佳实践的项目结构,避免从零开始的混乱。强烈推荐试试我的高效脚手架工具:Cheetah (猎豹)。它能帮你快速初始化结构清晰、配置分离、符合规范的脚本项目模板,助你事半功倍!

别再让混乱的脚本拖累你的效率。从今天开始,用规范和工程化的思维来编写和维护你的运维脚本吧!


发布说明:

  1. 标题: 采用了更具吸引力的标题,点出核心矛盾(困境)和解决方案(破局)。
  2. 结构: 清晰分成了“问题”、“思路”、“总结与行动建议”三大部分,逻辑更连贯。
  3. 语言: 将你的口语化表达(如“说起来是一回事,做起来又是另外一回事”、“也别总结了”)转化为更书面化、流畅的博客语言,同时保留了你的核心观点和个人风格(如“老牛逼了”转化为了更得体的推荐语)。
  4. 内容强化:
    • 在“解耦”部分,更清晰地阐述了两种 Shell 解耦方式。
    • 在“模仿”部分,补充了研究“框架设计”和“内容设计”的具体点。
    • 在“规范”部分,补充了具体规范的名称(如 Google Shell Style Guide)。
  5. 链接处理:
    • 将你的 Ansible 模板示例自然地融入到了“模仿练习”的建议中,并说明了它的价值(展示配置解耦)。
    • 将脚手架推荐作为“行动建议”的最后一点,并进行了更详细的描述(说明了它能解决什么问题),使其推荐更自然、更有说服力。
  6. 结尾: 增加了明确的行动号召(“如何开始?”),鼓励读者实践。

我自己写的内容

遇见过好几次运维脚本,内容如下

问题

独自开发,不懂合作

  1. 自己一个人开发脚本,不懂使用git的规范,例如分支的使用,合并操作
  2. 代码只有一份,一旦电脑挂了,或者服务器挂了,直接找不到代码

不解耦

  1. 直接把一堆静态文件,例如:各种安装包,依赖包等,全部都放在当前脚本的路径下面,跟随代码直接提交到git仓库,仓库过大而导致的一些问题。
  2. 一个shell脚本内容过多,把所有内容都塞在一个文件里面。

思路

  1. 第一点,还是得多学习。例如git使用
  2. 解耦的思维方式,这个方式是一种工作习惯,需要转换的是思维,模仿

具体方式

  1. 系统性的学习一门开发语言,例如运维使用比较多的是python。一定是系统的学,而不是学了一点点的内容够用就行。
  2. 然后去看别人的代码,是如何设计的,学习代码框架的设计,代码内容的设计。说起来是一回事,做起来又是另外一回事,还是去学习别人的框架的
    • 例如shell脚本可以两种方式进行解耦。方式1: 一个入口脚本,然后去source或者直接调用其他的脚本。 方式2: 把“所有”的代码都用函数进行框起来。
  3. 多研究规范问题。python的pep8, golang的uber-guide, shell的xxxx(自己找一下)

总结

也别总结了,上面只是我的一些想法。

  1. shell脚本如何设计,可以模仿一下我的ansible的脚本模板,其中config/config.sh是默认配置,config.ini是用户可以配置的内容,一种覆盖操作

最后,继续推荐我的脚手架,老牛逼了 https://github.com/go-cheetah/cheetah

posted on 2025-08-01 09:31  汉克书  阅读(43)  评论()    收藏  举报