Atlassian Data Center 2029 年 3 月停止,但 Bitbucket 和 Bamboo 不在停止名单里。逼着团队动起来的是 Jira 上云,代码要不要跟着走成了躲不开的问题。我搭了一套 Bitbucket DC 9.4 和 Jenkins 2.541.3,把 multibranch job 切到 Bitbucket Cloud,记下哪些地方会坏、哪些不会。
10 月 19 日,OVHcloud CLI 的 release 文件被人用偷来的开发者凭据换成了窃密程序。我查了 242 个热门 Go 和 Rust CLI 项目的最新 release,179 个可以被同样换掉,而且下载的人没有任何独立的东西可以核对。这篇讲怎么查的、为什么校验和文件不算数,以及维护者能做的三件事。
我身边写代码的人几乎都在用 AI,可 20 个大型开源项目里,2026 年第三季度只有 13.2% 的提交写明了 AI 参与,Rust、Kubernetes、Django 接近 0。很多人用了,但没写。
我的看法:维护者不必追问代码是不是 AI 写的,该看贡献者能不能为它负责;写明 AI 参与仍然是更好的做法。
按提交邮箱的域名统计 107 个大型开源项目近一年的 44.6 万个提交:29% 来自组织邮箱,但中位数项目只有 16%。
公司项目和社区项目差别很大,Google 一年里向其中 40 个项目提交过代码,还有五分之一的提交看不出来自哪里。
Jenkins 2.580.1 不再在 war 里自带拆分出去的插件。我把 38 个 LTS 版本的 controller 只换核心升到 2.580.1,从 12 个版本起来就失败,联网也救不回来。这篇讲日志长什么样、为什么会这样,以及老 controller 该怎么升。
Jenkins 的 agent 也必须跑 Java 21,Solaris、HP-UX、AIX 7.1 这些最高只有 Java 8 的构建机就连不上新版 Jenkins 了。Agent8 把官方 agent.jar 降级到 Java 8,让它们继续当普通的 agent。
Keelhaven 0.8.0 里面的大部分更新都来自真实用户的反馈:新的备份 destinations、可自定义的备份参数、备份预览、只保留最近 N 个快照。
我给 restic 做了个 macOS 菜单栏客户端 Keelhaven:选文件夹、选目的地、设频率,然后可以忘掉它。备份到你自己的硬盘、S3 桶或者 NAS,加密在本机完成,没有账号系统,不收集任何数据。
mkdocs-ng v1.8.0 发布了,这是 fork 以来的第一个功能版本。内置主题不再复制多余的 highlight.js 资源,clean build 快约 14%,产物少约 440 个文件;搜索终于能搜到 while、if 这类编程关键词。1.9.0 将针对 mkdocs serve 做增量构建优化。
三周前我介绍了业余项目 Open Delivery Spec (ODS)。这三周里 CLI 又发了 5 个版本,新增了两条主线:用确定性信号回答"这个 AI PR 敢不敢合",以及每个 PR 自动产出一份标准格式的 AI 代码证据文档。本文依旧基于项目真实现状,不做任何夸大。
申请 Anthropic 开源开发者计划通过了,拿到了 6 个月 Claude Max 20x 的免费使用权。聊聊申请条件、为什么能通过,以及这些年维护开源项目的一些感受。
最近写文章越来越多用 AI 帮忙,但写完总感觉哪里不对——那味道太冲了。Peter Yang 做了一个叫 no-ai-slop 的开源 skill,专门识别和去除英文写作里的 AI 套话模式,但没有中文版。我把它翻译并适配成了中文版本,支持 20 多种中文 AI 套话模式的检测和编辑。如果你也在用 AI 写公众号或技术文章,这个工具应该能帮你。
最近我对 GitHub Copilot 的态度发生了一次比较大的变化:从原来的"吹"变成了现在的"黑"。在对比了 Claude Code 之后,我发现 Copilot 在跨仓库支持、高级工程师意识等方面存在明显不足,已经让我不愿意再和它讨论问题了。
过去几个月我业余做了一个开源组织 Open Delivery Spec (ODS)。起因是 AI 生成的代码越来越多,但团队缺乏可靠的治理手段。本文基于项目真实现状,记录思路、进展与边界,不做任何夸大。
Conventional Branch 规范迎来首次重大更新。1.1.0 版本新增了 AI Coding Agent 分支前缀支持(ai/、copilot/、cursor/、claude/、codex/),同时提供了 machine-readable 的 spec.json 和 agent 注册表,让规范不仅面向人,也面向工具。
之前 jenkinsfilelint 需要连接一个可用的 Jenkins 服务器才能做语法校验。现在 v1.5.0 新增了 standalone 模式,只需要有 Docker,就能在本地启动一个最小 Jenkins 环境来验证 Jenkinsfile 语法。这篇文章详细介绍这个模式的实现思路和用法。
Claude Code 等 AI 工具默认会往提交里塞签名,很多人根本没注意到。Commit Check v2.11.0 引入 AI 归属治理,一行配置即可在 CI 层面拒绝带 AI 签名的提交。本文也聊聊这个功能的边界,以及这半年 Commit Check 解决的其他几个痛点。
我写了一个验证 Jenkinsfile 的小工具,原本只是想让它出现在 Jenkins 官方的开发工具列表里。结果 Jenkins 维护者提议:不如直接把项目转进 jenkinsci 组织?这篇文章记录了从 PR 到 transfer 再到官方博客的完整过程,包括中间踩的一个很有意思的坑。
本文从 Agent 边界设计、Tool Engineering、可观测性、评估体系、Memory 分层、Human-in-the-Loop、成本控制和安全八个维度,拆解一套面向企业落地的 Agentic Application 架构思路。
Conventional Branch 项目网站正式从 conventional-branch.github.io 迁移到 conventionalbranch.org。从去年用户提议到今年最终落地,聊聊域名迁移背后那些犹豫、踩坑和思考。
pre-commit 生态里 C/C++ 的工具一直比较薄弱。cpp-linter-hooks 是目前唯一同时支持 clang-format 和 clang-tidy 的 pre-commit hook,还内置了编译数据库自动检测、版本锁定、自动修复等实用功能。本文介绍它的用法和设计思路。
有用户提 Issue 希望 Conventional Branch 能提供官方 Agent Skill,我觉得这个需求很合理。当天就把它做了出来,现在通过 npx skills add 一行命令就能下载使用。恰逢本周项目也突破了 100 个 Star,一并聊聊。
从接手 mkdocs-ng 维护以来发了四个版本,修了十几个 Bug,去掉了 mergedeep 依赖。接下来 v1.8.0 会是一个功能版本,计划去掉旧 Python 版本支持、移除内置主题的 CDN 依赖、提供稳定的 Python API。
不少朋友问怎么在 Jira 里做一个类似 GitHub Copilot 的 AI Agent。本文结合我在 Jira 里实际开发的一个类似应用,分享从账号准备、Jira Automation 触发、Webhook 对接,到 Skills 能力体系搭建的完整思路。核心是利用现有服务,低成本快速实现。
这个月 Codex 自动续费了。原本我已经不太打算继续订,但这次续费反而让我重新比较了 Codex、DeepSeek V4 系列和 Copilot 的实际体验。对我来说,AI 编程工具的核心差距,已经不只是模型能力,而是谁能更稳定、更便宜、更持续地帮我写代码。
过去十天,我给 RepoKeeper 提交了一百多次代码,从一个概念验证跑到了 v1.2.0。它现在有六个模块,两个后端,支持 DeepSeek/OpenAI/Claude,还能用自己来开发自己——这篇文章讲讲它到底进化成了什么。
MkDocs 快两年没更新了,Material for MkDocs 也进了维护模式。作为重度用户,我 fork 了这两个项目,发布了 mkdocs-ng 和 mkdocs-ng-material,更新一下包名就能继续用。
读完 Mario Zechner 的「I’ve sold out」,又翻了 pi 仓库里的 AGENTS.md 和 CONTRIBUTING.md,我发现这个项目在很多地方都和常见的开源协作方式不太一样。新贡献者的 issue 和 PR 默认关闭、周末不 review、不懂代码就别提 PR。看起来很强硬,但背后其实是在认真处理一个问题:AI 时代,开源项目要怎么避免被低质量贡献拖垮。
Explain Error Plugin 近期迎来多个重要更新:AI Auto-Fix 自动创建修复 PR、用量统计与配额管控、以及新增对 DeepSeek、Qwen、Azure OpenAI、Custom Okta 四个新 AI 提供商的支持。
Codex 每月 22 美元的订阅费加上额度限制,让我开始寻找一个便宜、稳定、随时能顶上的备用方案。在尝试 OpenCode 不顺利后,我转向了 Pi + DeepSeek 的组合。结果有点出乎意料:写完整篇博客文章,只花了 0.24 元人民币。
网上看到一个梗图,让我想到一个问题:什么场景该用确定性自动化,什么场景该上 AI Agent?这篇文章聊聊我的判断标准。
PyCon LT 第一天,我与 Airflow 大佬 Jarek “面基”了。分享了我的“追星”经历,以及 Mozilla 工程师关于工具链的高质量分享。
Python 供应链攻击已经发生,一个 pip install 就能偷走你的所有凭证。介绍如何用 pipguard 在安装前拦截恶意包。
py-eol 是一个专门用来检查 Python 版本是否快到期的工具。它可以扫描项目文件,精确到行号,告诉你哪些地方还在用 EOL 的版本。还可以接入 CI,让检查自动跑,不让过期版本偷偷混进来。
效率提升了,但工作量并没有减少,反而更多。需求变快、节奏变快,外界的期待也随之水涨船高——「你不是在用 AI 吗,怎么还没做完?」压力不是消失了,是换了一种形式。
Hadolint 的 pre-commit 集成长期缺少自动安装方案,困扰社区三年。本文介绍如何通过将 Hadolint 二进制封装成 Python Wheel 包并发布到 PyPI,让 pre-commit 像安装任何 Python 工具一样一键集成 Hadolint,彻底消除手动下载与环境配置的负担。
上篇文章写了被 Canonical 捐款 这件事,有读者问:你怎么就被选中了?
一开始我也没搞清楚。后来认真研究了一下 thanks.dev 的运作机制,才把整件事的底层逻辑想明白了——以及,什么样的项目更容易被下游厂商的钱砸到。
最近有个读者给我发私信,说现在找到工作很难,让我帮看看简历,想问问我有没有什么找工作的建议。现在的就业市场,似乎比以前更看重你可以做什么,做过什么。换句话说,学历重要,但能力更重要。
今天无意中发现,Canonical 已经连续四个月通过 thanks.dev 给我捐款支持 badgepy 的开发了。虽然金额不大,但这个反馈对我来说意义重大。它让我意识到,有时候我们只要坚持做对的事情,不去过多担心回报,结果可能会在一个完全意想不到的地方,以一种温暖的方式给你反馈。
最近我对开源项目 GitStats 的 UI 进行了大幅改版,新增了深色/浅色模式切换、响应式适配和现代化视觉设计,让报告看起来像一个真正的产品。
OpenClaw 是一个很好的 idea,但不会是一个很好的 solution。高成本、安全隐患、大厂竞争、用户教育缺失——这四块石头压在一起,很难撑起一个长期繁荣的生态。
最新的《2025年 DevOps 现状报告》显示,40% 的企业已将 DevOps 经验列为"必须具备",43% 的企业近期将列入必选项。相比于培训证书,雇主更看重实战经验。AIOps 和 DevSecOps 热度虽高,落地仍处起步阶段。
最近又接触到一个相关但更进一步的概念——Agentic DevOps。花时间阅读了微软 Azure 相关介绍、GitHub 的最新文档以及部分开源实践后,我整理了这篇笔记。目的是记录学习过程,也供同行参考。以下内容基于公开资料和我的理解,不涉及任何夸大预测。
Explain Error Plugin 迎来两个重要更新:支持自定义上下文信息和文件夹级别的 AI 提供商配置。这两个功能让插件在企业环境中的使用更加灵活和强大。
这里记录每周值得分享的技术内容,周五发布。本杂志开源,欢迎投稿。
这里记录每周值得分享的 DevOps 与 AI 技术内容,周五发布。本杂志开源,欢迎投稿。
这里记录每周值得分享的 DevOps 与 AI 技术内容,周五发布。本杂志开源,欢迎投稿。
最近收到一些用户反馈,我也第一时间对 Explain Error Plugin 做了增强,新增了两个非常实用的功能:支持指定语言输出解释内容和支持在 Pipeline 中获取返回值 AI 的返回值。
最近 Clawdbot 改名为 Moltbot,越来越多的人开始在家里部署这个 AI 助手。本文分享了 Moltbot 的特点、使用体验以及一些注意事项,帮助你更好地理解和使用这款工具。
微服务和混合云让 IT 系统越来越复杂,成千上万的告警让传统运维难以为继。本文结合 IBM、ServiceNow、GitHub 和 Red Hat 的观点,梳理 AIOps 的核心概念和价值。
这里记录每周值得分享的 DevOps 与 AI 技术内容,周五发布。本杂志开源,欢迎投稿。
这里记录每周值得分享的 DevOps 与 AI 技术内容,周五发布。本杂志开源,欢迎投稿。
本文通过基于事实的解释和比喻,详细解读了 GitHub 上的 AI 相关概念及其层级关系,帮助读者理清 Models、Agents、Spaces、Spark 等术语的含义和作用。
Backstage 是什么?它为什么在平台工程领域变得如此重要?分享一些对 Backstage 的认识和判断。
在 DevOps 世界里,工具一多,很多人都会混淆它们的职责。用汽车产业链类比,帮你一次性理解 Packer、Terraform、Ansible、Docker、Kubernetes 的定位和协作方式。
py-eol 是一个轻量的小工具,帮助你快速判断某个 Python 版本是否已过期或即将 EOL,适合本地使用,也能集成到 CI/CD 中,让项目在版本管理上更可靠。
作为一个开源项目维护者,我深知“安装依赖”的痛苦。为了让用户少敲两行命令,我花时间把 gnuplot 封装成了一个开箱即用的 Python 包——gnuplot-wheel。本文分享了这个小轮子的诞生故事和实用价值。
在软件开发中,布鲁克斯法则指出“向一个已经延期的软件项目增加人力,只会使它更加延期。”本文通过烤鸡和孕妇的比喻,深入探讨了这一现象背后的原因,并提供了实用的解决方案。
Jenkinsfile 本地检查神器,利用 API 校验,完美支持 pre-commit。
本文介绍了如何激活 InstallShield 许可证的步骤和注意事项,帮助用户顺利完成软件安装和使用。
经过一段时间的对比和尝试,我还是回到了 GitHub Copilot。本文分享我为何认为它是 2025 年最值得订阅的 AI 编程助手,以及实际使用体验。
在开源项目的 issue 里,你是否也曾留言“Any updates?”(有什么更新吗?)来询问进展?看似无害的一句话,实际上却可能让维护者感到烦躁和挫败。本文分享了一篇关于这个话题的文章,并提出了更友善的替代做法。
经过了断断续续一个月的开发和测试,我终于完成了这次重大更新。这也是 Commit Check 迎来了自诞生以来最大的一次更新。
本文介绍了 Jenkins Explain Error Plugin 的新功能,即支持 Ollama 本地模型,帮助用户更高效地分析和解决构建错误。
cpp-linter 相关的项目和工具官网上线了,地址是 https://cpp-linter.github.io/,欢迎大家访问和使用。
开源基础设施并非免费,自来水般的 pip/npm 安装背后是高昂的带宽、存储和运维成本。声明呼吁开发者与企业共同分担,优化工具、支持赞助,才能让我们习以为常的“免费”体验真正可持续。
12K+ 访问量、多语言翻译、全球开发者采用,Conventional Branch 规范的一周年之路
在欧洲工作一年多,我只加过一次班,这让我深刻体会到东西方工作文化的差异。
发现我的博客英文读者比中文还多?于是我用 GitHub Actions + Gemini API,把文章自动翻译成英文,省心又高效。
有人说开源没用,既赚不到钱,又浪费时间。但我在四年的坚持中,发现了 3 个意想不到的收获:让工作被真正看到、接触更优秀的人和项目、以及一份长期的价值积累。这些收获,其实每个开发者都能借鉴。
如何评估并提升团队的 DevOps 实践水平?我正式发布了开源项目 DevOps Maturity —— 提供评估工具与实践指南。基于业界模型 + 开源工具,几分钟即可快速测出团队的 DevOps 成熟度。
昨天在网上冲浪,突然看到了一个仓库叫 prek,一看介绍是 —— ⚡ Better pre-commit, re-engineered in Rust。这就引起了我的兴趣,毕竟 pre-commit 作为非常广泛的预提交的工具,如果能改进,尤其是性能方面的改进,肯定是好事。
本文记录了我在八年后对博客进行翻新的过程,从 Hexo 到 Hugo 的迁移,以及新博客的功能和设计改进。
本文介绍了 Jenkins Explain Error Plugin 的新功能,支持 Google Gemini 模型进行错误分析,并提供了配置方法和示例视频。
介绍我开发的第一个 Jenkins 插件:Explain Error Plugin。它可以自动解析构建失败的日志信息,并生成可读性强的错误解释,帮助开发者更快地定位和解决问题。
JFrog发布的《2025软件供应链现状报告》揭示了软件供应链的变化和风险,尤其是AI模型的安全问题。本文分享了报告中的关键发现和对DevOps从业者的启示。
如果你的 Shields.io 徽章(例如构建状态或文档状态)在 Jenkins 仪表盘中无法显示,很可能是因为 Jenkins 的严格内容安全策略(CSP)限制所致。本文将演示如何通过 Script Console 临时修复,以及如何通过修改 Jenkins 启动参数永久解决。该方法适用于内部 Jenkins 环境,并已在现代 Jenkins 安装中测试验证。
在 Bitbucket 中使用 Commit Message Templates 功能,将 PR 描述自动写入 Git commit message,确保关键信息不会随工具变更而丢失。
在 Jenkins 中,disableConcurrentBuilds 选项用于管理并发构建。本文介绍了如何根据分支类型动态设置 abortPrevious 的值,从而实现更灵活的构建管理。
在 DevOps 中,CI/CD 流水线需要持续维护和重构。本文探讨了为什么 CI/CD 不是一次性的建设项目,而是一个需要长期投入和持续演进的系统。
asdf-clang-tools 是一个 asdf 插件,用于安装和管理 Clang Tools 相关工具(如 clang-format、clang-tidy、clang-query 和 clang-apply-replacements 等)。
AI 的出现让很多人感到“虚”,但它不会取代我们的职位,而是改变我们的做事方式。本文分享了对 AI 的体会和每天一小步的坚持。
在企业中,Wiki 和 Confluence 等文档工具如果缺乏统一管理和审核机制,可能会导致信息混乱和知识沉淀失败。本文探讨了如何避免这种情况,并借鉴开源社区的成功经验。
uv 是一个由 Astral 团队开发的 Python 包管理工具,它能替代 pip、venv、pip-tools 的功能,提供更快的依赖解析速度和更现代的项目管理方式。
cpp-linter-action 是一个 GitHub Action,提供 C/C++ 代码的格式化和静态分析功能。它使用 clang-format 和 clang-tidy,支持多种配置和自定义规则。项目自 2021 年创建以来,已被多个知名组织和开源项目使用。
GitHub 的访问问题让很多程序员感到困扰,尤其是在国内。本文分享了个人的体验和对网络问题的思考。
在开源项目或团队协作中,Sphinx + ReadTheDocs 是一个易于维护、可自动部署的文档系统。本文记录了配置过程和注意事项。
Markdown 和 reStructuredText(RST)是两种常用的标记语言。本文对比了它们的优缺点,并分享了在不同场景下的使用建议。
Broadcom 收购 VMware 后,许多企业用户开始寻找替代方案。Nutanix 作为一个超融合基础设施(HCI)解决方案,提供了更低的成本和更简洁的管理界面,是一个不错的选择。
在 CPython 的 Issue 区找到一个合适的 PR,修改代码、测试、提交 Pull Request,第二天醒来发现已经被 Merge 到主分支了!这是一个很好的学习过程,也是对开源社区的贡献。
最近工作之余没怎么贡献代码,主要把时间都用在了评审 EuroPython 2025 (欧洲 Python 2025 大会)的提案上了。
gitstats 经过两个月的持续改进,现已支持 JSON 输出、代码重构、argparse 替换 getopt,并全面兼容 Windows 和 macOS。欢迎使用和 Star 支持!
本文介绍如何使用 Jenkins Docker Cloud 来构建和部署应用,包括配置 Docker 主机以及创建自定义 Docker 镜像。
CPython 停止更新 Copyright 的原因和过程。了解 Python 项目法律团队的建议,以及如何处理开源项目中的版权声明。
介绍 GitStats 项目的复活过程,包括迁移到 Python 3、创建现代化流水线、发布到 PyPI 和 Docker,以及未来的改进计划。
pip 用来给项目安装依赖库,装在全局或虚拟环境里;pipx 专门安装 Python 命令行工具,每个工具一个独立的虚拟环境。本文从用途、安装范围和依赖隔离三方面对比两者,并说明什么时候该用哪个。
介绍在 Windows Server 2022 上执行 Ansible playbook 时出现 PowerShell 无法识别的问题原因及解决方法。
本文介绍了作为 DevOps 工程师的日常工作节奏,从早上到晚上,涵盖工作准备、会议、代码管理、构建发布等环节。
本文介绍了在升级 Jenkins 的过程中所做的优化,包括使用 Docker Compose 部署、重构 Jenkins Shared Library、引入 Windows Docker Container 等,以提升 CI/CD 流程的效率和安全性。
本文介绍了首席DevOps工程师的职责、核心技能和对公司的价值,帮助你了解如何在DevOps领域实现职业发展。
本文介绍了约定式分支规范的中文版,旨在通过结构化的命名约定提高 Git 分支的可读性和可操作性。
本文介绍了 PyPA(Python Packaging Authority)下的知名项目,包括 pip、setuptools、wheel 等,并分析了它们之间的关系,帮助读者更好地理解 Python 包管理和分发的生态系统。