
- /
- Posts/
Posts


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

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

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

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

攻城狮周刊(第 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 许可证的步骤和注意事项,帮助用户顺利完成软件安装和使用。

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

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

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)是两种常用的标记语言。本文对比了它们的优缺点,并分享了在不同场景下的使用建议。

为什么越来越多的企业用户开始放弃 VMware?
Broadcom 收购 VMware 后,许多企业用户开始寻找替代方案。Nutanix 作为一个超融合基础设施(HCI)解决方案,提供了更低的成本和更简洁的管理界面,是一个不错的选择。

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

为什么我选择参与 EuroPython 2025 评审?
·1153 字·3 分钟
最近工作之余没怎么贡献代码,主要把时间都用在了评审 EuroPython 2025 (欧洲 Python 2025 大会)的提案上了。

gitstats 升级来袭:支持 JSON 输出、多平台兼容、代码重构!
·557 字·2 分钟
gitstats 经过两个月的持续改进,现已支持 JSON 输出、代码重构、argparse 替换 getopt,并全面兼容 Windows 和 macOS。欢迎使用和 Star 支持!

如何使用 Jenkins Docker Cloud
本文介绍如何使用 Jenkins Docker Cloud 来构建和部署应用,包括配置 Docker 主机以及创建自定义 Docker 镜像。

CPython 停止更新 Copyright 了,为什么?
CPython 停止更新 Copyright 的原因和过程。了解 Python 项目法律团队的建议,以及如何处理开源项目中的版权声明。

复活 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 包管理和分发的生态系统。

你的软件究竟从哪里来?
本文介绍了软件制品的来源证明,强调了在软件开发生命周期中保护代码转换为制品的流程的重要性,并介绍了 SLSA 项目和 Sigstore 的作用。

代码签名(Code Signing) - GaraSign
本文介绍了 GaraSign 代码签名工具的安装、使用和验证方法,帮助开发者实现安全的代码签名。

Python 软件基金会 (PFS) 基础设施概览
·1828 字·4 分钟
本文介绍了 Python 软件基金会 (PFS) 的基础设施,包括其服务、提供商和团队成员,帮助读者了解 PFS 如何支持 Python 社区。


通过 Jenkins-X 社区最终进入到 Jenkins 基础设施团队成为 SRE 的经历
·1989 字·4 分钟
本文介绍了 Hervé Le Meur 如何通过 Jenkins-X 社区的贡献,最终成为 Jenkins 基础设施团队的一名 SRE,并分享了他的经历和对 Jenkins 的看法。

2024年如何保持竞争力:DevOps工程师的关键技能
本文介绍了在2024年DevOps工程师需要掌握的关键技能和能力,以应对裁员潮和人工智能的挑战,保持竞争力。

你一定要了解的 GitHub Action 特性:可重用工作流(Reusable Workflows)
本文介绍了 GitHub Actions 的可重用工作流(Reusable Workflows)特性,帮助开发者和团队更高效地管理和复用 CI/CD 流程。

2023 年开源状况和人工智能的崛起(GitHub)
·7338 字·15 分钟
本文介绍了 GitHub 发布的 2023 年开源状况和人工智能的崛起报告,分析了开发者社区的增长、生成式 AI 的应用以及云原生技术的发展趋势。

cpp-linter-action 最新版支持 Pull Request Review 功能了 👏
·1465 字·3 分钟
本文介绍了 cpp-linter-action 的新功能:Pull Request Review,允许开发者直接在 GitHub 上提交代码修改建议,提升代码质量和协作效率。

看看顶级的开源组织都在用哪些服务和工具
·3253 字·7 分钟
本篇介绍的是大名鼎鼎的开源软件基金会 Apache 所使用的服务(Services)和工具(Tools),这或许能帮助你打开视野,在选择工具的时候提供参考。

如何把 GitHub Release Notes 按照 New features、Bug Fixes ... 进行自动分类
本文将分享针对需要对 GitHub Release Notes 的内容按照标题进行自动分类的两种方式。

如何让 Jenkins Pipeline 在特定错误发生时不中断失败
·268 字·1 分钟
介绍如何在 Jenkins Pipeline 中使用 catchError 捕获特定错误,并在不中断整个构建的情况下更新阶段或构建结果,从而实现更灵活的错误处理。

如何在 GitHub 与非 GitHub 项目中采用软件供应链安全
本文介绍如何使用 SLSA 与 Witness 在 GitHub 与非 GitHub 项目中实现软件供应链安全,以提升软件开发与部署流程的安全性。

Witness 和 SLSA 💃
本文介绍了 Witness 的概念、工作原理以及如何使用 Witness 来生成和验证软件工件的来源,强调了其在提高软件供应链安全性方面的重要性。

Python 和 SLSA 💃
本文介绍了如何在 Python 生态系统中使用 SLSA 框架来生成和验证 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 中。

2023 年最值得关注的 DevOps 趋势
·2676 字·6 分钟
本文介绍了2023年DevOps领域的主要趋势,包括云原生技术的持续采用、加强安全性和合规性、开发与运营团队协作、自动化和人工智能的发展等。

从 AIX 上传构件到 Artifactory 失败
·888 字·2 分钟
本文介绍在 AIX 上通过 Jenkins 上传构件到 Artifactory 时遇到的 SSL 证书验证问题,包括更新 Java 的 cacerts 文件来解决问题。


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

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

如果你是项目成员,是 Fork 原始仓库还是直接原始仓库中修改代码?
·1017 字·3 分钟
本文讨论了在开源项目中,作为项目成员是 Fork 原始仓库还是直接在原始仓库中修改代码的利弊,帮助开发者做出更合适的选择。

程序员自我修养之Git提交信息和分支创建规范(工具篇)
·1268 字·3 分钟
本文介绍如何使用 Commit Check 工具来验证 Git 提交信息、分支命名、提交用户名字、提交用户邮箱等是否符合规范。

SLSA 框架与软件供应链安全防护
·2548 字·6 分钟
本文介绍了 SLSA 框架的概念、目的、等级划分以及如何在软件供应链中应用 SLSA 来提升安全性,帮助读者理解 SLSA 在软件开发和部署中的重要性。

如何在 DevOps 任务中使用 ChatGPT?
本文探讨如何在 DevOps 任务中使用 ChatGPT,包括自动化代码审查、测试、部署和文档生成等方面的应用。

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

如何在 Jenkins 多分支流水线中实现 [skip ci]
本文介绍如何在 Jenkins 多分支流水线中实现 [skip ci] 功能,根据提交信息跳过构建。

如何修复 WSL 中的 "Temporary Failure in name resolution" 错误
·200 字·1 分钟
本文介绍如何通过配置 DNS 并确保修改持久化,来解决 WSL 中的 “Temporary failure in name resolution” 问题。


C/C++ 代码格式化和静态分析检查的一站式工作流 Cpp Linter
·2289 字·5 分钟
本文介绍了 C/C++ 代码格式化和静态分析检查的工具和工作流,重点介绍了 clang-tools 的使用和集成方式。



在 Windows 做开发还能这么爽?WSL + VS Code + Docker Desktop 你值得有用
本文介绍了如何在 Windows 上使用 WSL、VS Code 和 Docker Desktop 进行开发,提供了安装和配置的详细步骤,以及使用这些工具的优势和体验。

关于 Docker,containerd,CRI,CRI-O,OCI,runc 的解释以及它们是如何工作在一起的
·2812 字·6 分钟
本文介绍了 Docker、containerd、CRI、CRI-O、OCI 和 runc 等容器生态系统中的关键组件和标准,解释它们之间的关系以及如何协同工作。


靠谱:在不删除和重建 GitHub 仓库的情况下与父(Fork)仓库分离(Unfork)
本文介绍了如何通过 GitHub Support 实现与父仓库的分离,避免删除和重建仓库带来的数据丢失问题,帮助开发者更好地管理 Fork 的仓库。

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

已解决 - The Pip Inspector tree parse failed to produce output
·524 字·2 分钟
本文介绍在 Black Duck Detect 中出现 “The Pip Inspector tree parse failed to produce output” 错误的原因分析及解决方法。

2022 年最值得关注的 DevOps 趋势和问答
·1993 字·4 分钟
本文介绍了2022年DevOps领域的主要趋势,包括无服务器计算、微服务架构、Kubernetes的普及以及DevSecOps的兴起,并回答了一些关于DevOps行业的问题。

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

什么是 Vagrant? Vagrant 和 VirtualBox 的区别
·1346 字·3 分钟
本文介绍了 Vagrant 的概念、发展历史以及如何使用 Vagrant 创建和管理虚拟机,强调了 Vagrant 相比传统虚拟机的优势。

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

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

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