
沈显鹏


攻城狮周刊(第 3 期):OpenClaw 狂热背后,AI 助手回归本地
这里记录每周值得分享的 DevOps 与 AI 技术内容,周五发布。本杂志开源,欢迎投稿。

Explain Error Plugin 又更新了:来自用户反馈的两个实用新功能
最近收到一些用户反馈,我也第一时间对 Explain Error Plugin 做了增强,新增了两个非常实用的功能:支持指定语言输出解释内容和支持在 Pipeline 中获取返回值 AI 的返回值。

什么是 AIOps?一篇文章带你系统认识智能运维
在微服务、混合云和容器化部署横行的今天,IT 系统已变得异常复杂。当成千上万的告警信息涌入时,传统的运维模式很难。AIOps(智能运维),这个由人工智能驱动的变革,正成为 IT 运营管理的“救命稻草”。本文结合 IBM、ServiceNow、GitHub 和 Red Hat 的核心观点,带你透视 AIOps 的全貌。

Clawdbot 变身 Moltbot:把 AI “养”在你的电脑里
最近 Clawdbot 改名为 Moltbot,越来越多的人开始在家里部署这个 AI 助手。本文分享了 Moltbot 的特点、使用体验以及一些注意事项,帮助你更好地理解和使用这款工具。



攻城狮周刊(第 2 期):AI 与平台工程的深度融合,重塑开发者未来
这里记录每周值得分享的 DevOps 与 AI 技术内容,周五发布。本杂志开源,欢迎投稿。

攻城狮周刊(第 1 期):AI 工程化与 DevOps 韧性:2026 年技术发展双主线
这里记录每周值得分享的 DevOps 与 AI 技术内容,周五发布。本杂志开源,欢迎投稿。

GitHub AI 名词全解析:Copilot、Agents、Models 到 MCP,到底谁是谁?
本文通过基于事实的解释和比喻,详细解读了 GitHub 上的 AI 相关概念及其层级关系,帮助读者理清 Models、Agents、Spaces、Spark 等术语的含义和作用。

Backstage(开发者门户)是什么?它能解决什么,又解决不了什么
Backstage 是什么?它为什么在平台工程领域变得如此重要?分享一些对 Backstage 的认识和判断。

一文看懂 DevOps:Packer、Terraform、Docker、K8s 原来是这样分工的!
在 DevOps 世界里,工具一多,很多人都会混淆它们的职责。用汽车产业链类比,帮你一次性理解 Packer、Terraform、Ansible、Docker、Kubernetes 的定位和协作方式。

py-eol:你可能一直在用“过期 Python”,只是没发现
py-eol 是一个轻量的小工具,帮助你快速判断某个 Python 版本是否已过期或即将 EOL,适合本地使用,也能集成到 CI/CD 中,让项目在版本管理上更可靠。

为了让大家少敲两行命令,我把 gnuplot 封成了一个开箱即用的 Python 包
作为一个开源项目维护者,我深知“安装依赖”的痛苦。为了让用户少敲两行命令,我花时间把 gnuplot 封装成了一个开箱即用的 Python 包——gnuplot-wheel。本文分享了这个小轮子的诞生故事和实用价值。

软件开发真相:加两个人,并不会让项目快三倍
在软件开发中,布鲁克斯法则指出“向一个已经延期的软件项目增加人力,只会使它更加延期。”本文通过烤鸡和孕妇的比喻,深入探讨了这一现象背后的原因,并提供了实用的解决方案。

受够了 Jenkinsfile 提交后才报错?试试这个预检查工具!
Jenkinsfile 本地检查神器,利用 API 校验,完美支持 pre-commit。

如何激活 InstallShield 许可证
本文介绍了如何激活 InstallShield 许可证的步骤和注意事项,帮助用户顺利完成软件安装和使用。

开源维护者最讨厌的一句话"Any updates?",你说过吗?
在开源项目的 issue 里,你是否也曾留言“Any updates?”(有什么更新吗?)来询问进展?看似无害的一句话,实际上却可能让维护者感到烦躁和挫败。本文分享了一篇关于这个话题的文章,并提出了更友善的替代做法。

兜兜转转,我发现 GitHub Copilot 才是最香的
经过一段时间的对比和尝试,我还是回到了 GitHub Copilot。本文分享我为何认为它是 2025 年最值得订阅的 AI 编程助手,以及实际使用体验。

Commit Check v2.0.0 重磅发布:支持 TOML 配置、简化 CLI & Hooks、重构验证引擎!
经过了断断续续一个月的开发和测试,我终于完成了这次重大更新。这也是 Commit Check 迎来了自诞生以来最大的一次更新。

Jenkins Explain Error 插件现已支持 Ollama!🤖
本文介绍了 Jenkins Explain Error Plugin 的新功能,即支持 Ollama 本地模型,帮助用户更高效地分析和解决构建错误。

连微软、NASA 都在用的 C/C++ 工具,终于有了官网!
cpp-linter 相关的项目和工具官网上线了,地址是 https://cpp-linter.github.io/,欢迎大家访问和使用。

白嫖了这么多年,开源基础设施要开始收费了?
开源基础设施并非免费,自来水般的 pip/npm 安装背后是高昂的带宽、存储和运维成本。声明呼吁开发者与企业共同分担,优化工具、支持赞助,才能让我们习以为常的“免费”体验真正可持续。

Conventional Branch 规范一周年:从 0 到全球开发者的选择
12K+ 访问量、多语言翻译、全球开发者采用,Conventional Branch 规范的一周年之路


博客双语发布不再麻烦:GitHub Actions + Gemini API 实践
发现我的博客英文读者比中文还多?于是我用 GitHub Actions + Gemini API,把文章自动翻译成英文,省心又高效。

做开源四年,我得到了 3 个意想不到的收获
有人说开源没用,既赚不到钱,又浪费时间。但我在四年的坚持中,发现了 3 个意想不到的收获:让工作被真正看到、接触更优秀的人和项目、以及一份长期的价值积累。这些收获,其实每个开发者都能借鉴。

你的团队 DevOps 到底“几分熟”?这个开源工具告诉你
如何评估并提升团队的 DevOps 实践水平?我正式发布了开源项目 DevOps Maturity —— 提供评估工具与实践指南。基于业界模型 + 开源工具,几分钟即可快速测出团队的 DevOps 成熟度。

被 Airflow Maintainer 一顿夸:Rust 重写版 pre-commit 项目 prek 的崛起
昨天在网上冲浪,突然看到了一个仓库叫 prek,一看介绍是 —— ⚡ Better pre-commit, re-engineered in Rust。这就引起了我的兴趣,毕竟 pre-commit 作为非常广泛的预提交的工具,如果能改进,尤其是性能方面的改进,肯定是好事。

八年之后,我终于翻新了我的博客
本文记录了我在八年后对博客进行翻新的过程,从 Hexo 到 Hugo 的迁移,以及新博客的功能和设计改进。

Jenkins Explain Error Plugin 支持 Google Gemini 了!🤖
本文介绍了 Jenkins Explain Error Plugin 的新功能,支持 Google Gemini 模型进行错误分析,并提供了配置方法和示例视频。

Jenkins 插件中心居然还没有 AI 插件?我写了一个!🤖
介绍我开发的第一个 Jenkins 插件:Explain Error Plugin。它可以自动解析构建失败的日志信息,并生成可读性强的错误解释,帮助开发者更快地定位和解决问题。

🧊2025软件供应链现状报告:开源时代,我们究竟在和谁打交道?
JFrog发布的《2025软件供应链现状报告》揭示了软件供应链的变化和风险,尤其是AI模型的安全问题。本文分享了报告中的关键发现和对DevOps从业者的启示。

如何修复 Shields.io 徽章在 Jenkins 中无法显示
如果你的 Shields.io 徽章(例如构建状态或文档状态)在 Jenkins 仪表盘中无法显示,很可能是因为 Jenkins 的严格内容安全策略(CSP)限制所致。本文将演示如何通过 Script Console 临时修复,以及如何通过修改 Jenkins 启动参数永久解决。该方法适用于内部 Jenkins 环境,并已在现代 Jenkins 安装中测试验证。

提升代码可追溯性:一招把 PR 描述写入 Git commit
在 Bitbucket 中使用 Commit Message Templates 功能,将 PR 描述自动写入 Git commit message,确保关键信息不会随工具变更而丢失。

如何优雅地控制 Jenkins 构建是否中断?只看这篇
在 Jenkins 中,disableConcurrentBuilds 选项用于管理并发构建。本文介绍了如何根据分支类型动态设置 abortPrevious 的值,从而实现更灵活的构建管理。

CI/CD 不是一次性的项目,而是一个不断演进的系统
在 DevOps 中,CI/CD 流水线需要持续维护和重构。本文探讨了为什么 CI/CD 不是一次性的建设项目,而是一个需要长期投入和持续演进的系统。

asdf-clang-tools:使用 asdf 安装 Clang 工具的新选择
asdf-clang-tools 是一个 asdf 插件,用于安装和管理 Clang Tools 相关工具(如 clang-format、clang-tidy、clang-query 和 clang-apply-replacements 等)。


还在用 Wiki/Confluence?你可能在生产垃圾
在企业中,Wiki 和 Confluence 等文档工具如果缺乏统一管理和审核机制,可能会导致信息混乱和知识沉淀失败。本文探讨了如何避免这种情况,并借鉴开源社区的成功经验。

还在用 pip 和 venv?那你可真落伍了,赶紧体验 uv!
uv 是一个由 Astral 团队开发的 Python 包管理工具,它能替代 pip、venv、pip-tools 的功能,提供更快的依赖解析速度和更现代的项目管理方式。

微软、NASA 都在用?我用业余时间维护了 4 年的项目破百了
cpp-linter-action 是一个 GitHub Action,提供 C/C++ 代码的格式化和静态分析功能。它使用 clang-format 和 clang-tidy,支持多种配置和自定义规则。项目自 2021 年创建以来,已被多个知名组织和开源项目使用。


从零配置 Sphinx + ReadTheDocs:快速部署自动化文档
在开源项目或团队协作中,Sphinx + ReadTheDocs 是一个易于维护、可自动部署的文档系统。本文记录了配置过程和注意事项。

Markdown 不香了吗?为什么越来越多 Python 项目用 RST?
Markdown 和 reStructuredText(RST)是两种常用的标记语言。本文对比了它们的优缺点,并分享了在不同场景下的使用建议。

一觉醒来,我的 PR 已经被 Merge 到 CPython 主分支了!
在 CPython 的 Issue 区找到一个合适的 PR,修改代码、测试、提交 Pull Request,第二天醒来发现已经被 Merge 到主分支了!这是一个很好的学习过程,也是对开源社区的贡献。

复活 GitStats:让 Git 历史分析焕发新活力
介绍 GitStats 项目的复活过程,包括迁移到 Python 3、创建现代化流水线、发布到 PyPI 和 Docker,以及未来的改进计划。


PowerShell 不是内部或外部命令
介绍在 Windows Server 2022 上执行 Ansible playbook 时出现 PowerShell 无法识别的问题原因及解决方法。


从 Jenkins 升级,我做了哪些优化
本文介绍了在升级 Jenkins 的过程中所做的优化,包括使用 Docker Compose 部署、重构 Jenkins Shared Library、引入 Windows Docker Container 等,以提升 CI/CD 流程的效率和安全性。

DevOps进阶:揭秘首席DevOps工程师的职责与技能
本文介绍了首席DevOps工程师的职责、核心技能和对公司的价值,帮助你了解如何在DevOps领域实现职业发展。

约定式分支规范中文版正式发布!
本文介绍了约定式分支规范的中文版,旨在通过结构化的命名约定提高 Git 分支的可读性和可操作性。

初步了解 PyPA(Python Packaging Authority)下的知名项目和关系
本文介绍了 PyPA(Python Packaging Authority)下的知名项目,包括 pip、setuptools、wheel 等,并分析了它们之间的关系,帮助读者更好地理解 Python 包管理和分发的生态系统。

从 XLC 10.1 升级到 IBM Open XL C/C++ for AIX 17.1.0 的问题与解决方案
本文记录了从 IBM XLC 10.1 升级到 XLC 17.1(IBM Open XL C/C++ for AIX 17.1.0)过程中遇到的问题及解决方法,共涵盖 12 个错误的修复方案。

解决通过 Jenkins Artifactory plugin 上传 artifacts 失败的问题 “unable to find valid certification path to requested target”
本文介绍了如何解决 Jenkins agent 上传 artifacts 到 Artifactory 时遇到的 SSL 证书验证问题,包括生成安全认证文件和导入到 Java 的 cacerts 中。

Docker Buildx Bake 加速构建和管理多平台镜像的利器
本文介绍 Docker Buildx Bake 的概念、优势、使用场景以及如何使用该功能来加速构建和管理多平台镜像。

详解SBOM:定义、关系、区别、最佳实践和生成工具
本文介绍了SBOM的定义、与SLSA和Black Duck的关系和区别、最佳实践以及可用的生成工具,帮助读者更好地理解和应用SBOM。

为什么我的 Jenkins Controller 越来越慢?可能犯了这些错误...
本文介绍了 Jenkins pipeline 的一些最佳实践,旨在帮助开发者和运维人员优化 Jenkins 的性能和可维护性。


在 Jenkins 上用了这么久的 Groovy,是时候认识一下它了
Groovy 是一种强大的动态语言,适用于 Java 平台,本文介绍了 Groovy 的特性、与 Java 的区别以及在 Jenkins 中的应用场景。

Vagrant 和 Docker 的区别,该如何选?
本文介绍了 Vagrant 和 Docker 的区别,分析了它们各自的使用场景和优势,帮助读者选择合适的工具来管理虚拟机或容器。

什么是 Go ?Go 的优势和现状。初学者应该学习 Python 还是 Go?
本文介绍了 Go 语言的基本概念、优势、排名以及初学者应该如何选择学习 Python 还是 Go,提供了实用的学习建议和资源。

你一定要了解这 17 条 Docker 最佳实践!
本文分享了在编写 Dockerfiles 和使用 Docker 时应遵循的一些最佳实践,包括多阶段构建、镜像优化、安全性等方面的建议。

2022年序员如何选择显示器?1080p还是2K? 单屏还是多屏?
本文分享了个人在选择显示器时的经验和建议,包括不同尺寸、分辨率和屏幕组合的优缺点,以及如何根据工作需求选择最合适的显示器。

组织内如何评估 CI/CD 成熟度
本文介绍了如何使用 Jenkins 的 generic-webhook-trigger 插件来实时获取 Bitbucket 仓库的事件信息,如 Pull Request ID 等。

GitHub Actions 还能这么玩?自动将发布的博客文章更新到 GitHub 个人主页
本文介绍了如何使用 GitHub Actions 自动将发布的博客文章更新到 GitHub 个人主页,提升个人主页的动态性和可读性。

2021-22 世界质量报告(World Quality Report)
本文介绍了 2021-22 世界质量报告(WQR)的主要发现和趋势,强调了新冠疫情对软件质量和测试的影响,以及 QA 在敏捷和 DevOps 中的重要作用。



SonarQube Community Edition 如何集成到项目中
本文介绍如何将 SonarQube Community Edition 集成到 Maven、Gradle 及其他类型项目中,包括必要的配置和 Jenkins 流水线示例。

运行 lcov 报错 "Can't locate JSON/PP.pm in @INC ..."
本文介绍在运行 lcov 生成代码覆盖率报告时遇到 “Can’t locate JSON/PP.pm in @INC …” 等 Perl 模块缺失错误的解决方法,包括安装缺失的 Perl 模块。

使用 Gcov 和 LCOV 做 C/C++ 项目的代码覆盖率
本文介绍了如何使用 Gcov 和 LCOV 对 C/C++ 项目进行代码覆盖率的度量,包括编译、运行和生成报告的步骤。

SonarQube 安装与常见问题排查
本文记录了 SonarQube 的安装步骤,包括 LDAP 配置与 PostgreSQL 数据库设置,并附带一些常见问题的排查方法。

修复 "hidden symbol `__gcov_init' in ../libgcov.a(_gcov.o) is referenced by DSO" 错误
本文介绍在使用 Gcov 编译项目进行代码覆盖率统计时,出现 “hidden symbol `__gcov_init’…” 等错误的原因及解决方法,包括如何在构建时确保符号不被隐藏。

使用 REST API 添加或更新 Bitbucket 构建状态
本文介绍如何通过 Bitbucket REST API 为指定提交添加或更新构建状态,并给出 Shell 脚本示例,适用于手动修复或补充构建状态的场景。

关于代码覆盖率 (About Code Coverage)
本文简要介绍了代码覆盖率的概念、重要性、常见指标、工作原理以及主流工具,强调了不要过度依赖代码覆盖率指标。

Jenkins 作业超时后让构建失败的方法(已解决)
本文介绍如何在 Jenkins 流水线中正确处理超时场景,通过 try 和 catch 结合 error 确保超时后作业会失败。

解决在 AIX 上 Git Clone 失败的两个问题
本文记录了在 AIX 上使用 Jenkins 进行 Git Clone 时遇到的两个问题及其解决方法,包括依赖库加载失败和 SSH 认证失败。

通过解除文件资源限制:解决在 AIX 使用 Git 下载大容量仓库失败问题
在 AIX 系统中遇到 Git 下载大容量仓库时因文件大小限制导致失败,通过修改 ulimit 设置解决问题。

关于 Artifactory 上传制品变得非常缓慢,偶尔失败的问题分享
在使用 JFrog Artifactory 上传制品时遇到速度缓慢和上传失败的问题,经过排查和解决,分享经验和教训。

解决 ESlint HTML 报告在 Jenkins 作业中无法正常显示的问题
本文记录了 ESlint HTML 报告在 Jenkins 中因内容安全策略(CSP)限制而无法正确显示的问题,并介绍了如何通过修改 Jenkins 配置使报告正常加载。

Git 常见设置指北
本文介绍了在使用 Git 提交代码之前需要进行的一些常见设置,包括配置用户名和邮箱、处理换行符、编写规范的提交信息等,帮助开发者更好地管理代码版本。

当 Artifactory “Download Folder 功能被禁用”时如何下载整个文件夹的制品
本文介绍了在 JFrog Artifactory 禁用“Download Folder”功能时,如何使用 Artifactory REST API 来批量下载整个文件夹的制品,并提供了基于 Shell 脚本的示例实现。

为什么 Windows Installer 会弹出窗口?(已解决)
本文解释了一个常见的 Windows 安装程序问题:安装时意外弹出窗口的原因,以及通过修正构建文件夹命名规则来解决该问题的方法。

JaCoCo 代码覆盖率实践分享
本文介绍了 JaCoCo 的使用方法,包括 Gradle 配置、执行测试生成报告、报告参数说明以及如何忽略指定的包或类影响测试覆盖率结果。

你的 Python 代码够不够 Pythonic?
本文介绍了 Pythonic 的概念,并通过示例展示如何编写更简洁、优美的 Python 代码,帮助开发者提升代码质量和可读性。

在 Jenkins 中为不同分支设置不同的默认参数
本文介绍如何在 Jenkins 多分支流水线中,根据构建分支动态设置不同的默认参数,从而实现分支差异化配置。

基于谷歌代码审查(Code Review)法则的思考与实践
本文介绍了谷歌的代码审查法则,并分享了如何在团队中有效实施代码审查的实践经验,包括流程控制和自动化检查等方面。

Jenkins 升级后 Windows Agent 无法启动的解决方法
本文介绍 Jenkins 升级后 Windows Agent 无法启动的问题,以及通过更新 Windows Slaves 插件和修改配置文件来解决的步骤。

预测 2021 年的 DevOps 趋势
本文介绍了 2021 年 DevOps 领域的主要趋势,包括微服务架构、无服务器计算、Kubernetes 的普及以及 DevSecOps 的兴起。

2021年DevOps工程师的学习路线
本文介绍了成为DevOps工程师所需的技能和工具,涵盖软件开发、操作系统、网络安全、容器化、持续集成与部署等方面的知识。

Jenkins 中 `result` 与 `currentResult` 的区别
本文解释了 Jenkins Pipeline 中 result 与 currentResult 的区别,并通过 Declarative Pipeline 与 Scripted Pipeline 示例展示它们在不同阶段的表现。

在 Windows 上开启 22 端口并让其处于监听状态
本文介绍如何在 Windows 上开启 22 端口并确保其处于监听状态,以便支持 SSH 连接。内容包括安装 OpenSSH 以及防火墙配置步骤。

建议在 Bitbucket/GitHub 中启用的仓库设置
列出 Bitbucket 和 GitHub 仓库推荐启用的设置,包括禁止强制推送、分支保护、标签管理、合并检查以及提交信息规范等。

启用与禁用 Git sparse-checkout
介绍如何启用与禁用 Git sparse-checkout,包括配置只检出指定目录的示例,以及如何恢复到完整检出状态。

解决 Code Sign 默认时间戳服务器 http://timestamp.verisign.com/scripts/timstamp.dll 不可用
本文介绍了如何解决 Verisign 时间戳服务器不可用的问题,提供了替代的时间戳服务器地址,帮助开发者顺利完成代码签名。

2021 年国外 IT 公司对于 DevOps 工程师的要求有哪些?
了解国外 IT 公司对 DevOps 工程师的技能要求,帮助你在 2021 年树立学习方向,获取理想岗位。

备份 Jenkins 的方法
介绍如何使用 ThinBackup 插件或 Shell 脚本备份 Jenkins,确保 Jenkins 配置和构建数据安全存储。

JaCoCo 实现原理 (JaCoCo Implementation Design)
介绍 JaCoCo 的实现设计,包括覆盖率分析机制、Java 版本要求、字节码操纵、内存使用等方面的内容。


写给那些想使用 JFrog Artifactory 管理制品的人
本文介绍了 JFrog Artifactory 的概念、优势、工作原理以及最佳实践,帮助读者了解如何使用 Artifactory 管理软件制品。
