不少朋友问怎么在 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 时代,开源项目要怎么避免被低质量贡献拖垮。
Codex 每月 22 美元的订阅费加上额度限制,让我开始寻找一个便宜、稳定、随时能顶上的备用方案。在尝试 OpenCode 不顺利后,我转向了 Pi + DeepSeek 的组合。结果有点出乎意料:写完整篇博客文章,只花了 0.24 元人民币。
Explain Error Plugin 近期迎来多个重要更新:AI Auto-Fix 自动创建修复 PR、用量统计与配额管控、以及新增对 DeepSeek、Qwen、Azure OpenAI、Custom Okta 四个新 AI 提供商的支持。
在 AI 技术飞速发展的今天,很多公司都在追逐 AI 的浪潮,但我们是否真正理解了“自动化”与“AI Agent”的区别?本文将从实际应用的角度,探讨在什么场景下应该使用确定性的自动化,而在什么场景下应该引入 AI Agent。通过对比分析,我们希望帮助读者在这个全员 AI 的时代,做出更明智的技术选择。
Python 供应链攻击已经发生,一个 pip install 就能偷走你的所有凭证。介绍如何用 pipguard 在安装前拦截恶意包。
效率提升了,但工作量并没有减少,反而更多。需求变快、节奏变快,外界的期待也随之水涨船高——「你不是在用 AI 吗,怎么还没做完?」压力不是消失了,是换了一种形式。
py-eol 是一个专门用来检查 Python 版本是否快到期的工具。它可以扫描项目文件,精确到行号,告诉你哪些地方还在用 EOL 的版本。还可以接入 CI,让检查自动跑,不让过期版本偷偷混进来。
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 现状报告》显示,DevOps 技能已成为职场生存的刚需。40% 的企业将其列为“必须具备”,另有 43% 的企业近期将其列为必选项。相比于培训证书,雇主更看重实战经验。尽管 AIOps 和 DevSecOps 热度极高,但真正的落地仍处于起步阶段。
最近又接触到一个相关但更进一步的概念——Agentic DevOps。花时间阅读了微软 Azure 相关介绍、GitHub 的最新文档以及部分开源实践后,我整理了这篇笔记。目的是记录学习过程,也供同行参考。以下内容基于公开资料和我的理解,不涉及任何夸大预测。
Explain Error Plugin 迎来两个重要更新:支持自定义上下文信息和文件夹级别的 AI 提供商配置。这两个功能让插件在企业环境中的使用更加灵活和强大。
这里记录每周值得分享的技术内容,周五发布。本杂志开源,欢迎投稿。
这里记录每周值得分享的 DevOps 与 AI 技术内容,周五发布。本杂志开源,欢迎投稿。
这里记录每周值得分享的 DevOps 与 AI 技术内容,周五发布。本杂志开源,欢迎投稿。
最近收到一些用户反馈,我也第一时间对 Explain Error Plugin 做了增强,新增了两个非常实用的功能:支持指定语言输出解释内容和支持在 Pipeline 中获取返回值 AI 的返回值。
在微服务、混合云和容器化部署横行的今天,IT 系统已变得异常复杂。当成千上万的告警信息涌入时,传统的运维模式很难。AIOps(智能运维),这个由人工智能驱动的变革,正成为 IT 运营管理的“救命稻草”。本文结合 IBM、ServiceNow、GitHub 和 Red Hat 的核心观点,带你透视 AIOps 的全貌。
最近 Clawdbot 改名为 Moltbot,越来越多的人开始在家里部署这个 AI 助手。本文分享了 Moltbot 的特点、使用体验以及一些注意事项,帮助你更好地理解和使用这款工具。
前几周和几位老同事聚会,聊起了一个我们以前讨论过的话题:要不要出国。
这里记录每周值得分享的 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 许可证的步骤和注意事项,帮助用户顺利完成软件安装和使用。
在开源项目的 issue 里,你是否也曾留言“Any updates?”(有什么更新吗?)来询问进展?看似无害的一句话,实际上却可能让维护者感到烦躁和挫败。本文分享了一篇关于这个话题的文章,并提出了更友善的替代做法。
经过一段时间的对比和尝试,我还是回到了 GitHub Copilot。本文分享我为何认为它是 2025 年最值得订阅的 AI 编程助手,以及实际使用体验。
经过了断断续续一个月的开发和测试,我终于完成了这次重大更新。这也是 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)是两种常用的标记语言。本文对比了它们的优缺点,并分享了在不同场景下的使用建议。
在 CPython 的 Issue 区找到一个合适的 PR,修改代码、测试、提交 Pull Request,第二天醒来发现已经被 Merge 到主分支了!这是一个很好的学习过程,也是对开源社区的贡献。
介绍 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 包管理和分发的生态系统。
本文记录了从 IBM XLC 10.1 升级到 XLC 17.1(IBM Open XL C/C++ for AIX 17.1.0)过程中遇到的问题及解决方法,共涵盖 12 个错误的修复方案。
本文介绍了如何解决 Jenkins agent 上传 artifacts 到 Artifactory 时遇到的 SSL 证书验证问题,包括生成安全认证文件和导入到 Java 的 cacerts 中。
本文介绍 Docker Buildx Bake 的概念、优势、使用场景以及如何使用该功能来加速构建和管理多平台镜像。
本文介绍了SBOM的定义、与SLSA和Black Duck的关系和区别、最佳实践以及可用的生成工具,帮助读者更好地理解和应用SBOM。
本文介绍了 Jenkins pipeline 的一些最佳实践,旨在帮助开发者和运维人员优化 Jenkins 的性能和可维护性。
本文介绍如何生成 GPG 密钥、导出公钥并将其添加到 GitHub,用于提交签名验证。
Groovy 是一种强大的动态语言,适用于 Java 平台,本文介绍了 Groovy 的特性、与 Java 的区别以及在 Jenkins 中的应用场景。
本文介绍了 Vagrant 和 Docker 的区别,分析了它们各自的使用场景和优势,帮助读者选择合适的工具来管理虚拟机或容器。
本文介绍了 Go 语言的基本概念、优势、排名以及初学者应该如何选择学习 Python 还是 Go,提供了实用的学习建议和资源。
本文分享了在编写 Dockerfiles 和使用 Docker 时应遵循的一些最佳实践,包括多阶段构建、镜像优化、安全性等方面的建议。
本文分享了个人在选择显示器时的经验和建议,包括不同尺寸、分辨率和屏幕组合的优缺点,以及如何根据工作需求选择最合适的显示器。
本文介绍了如何使用 Jenkins 的 generic-webhook-trigger 插件来实时获取 Bitbucket 仓库的事件信息,如 Pull Request ID 等。
本文介绍了如何使用 GitHub Actions 自动将发布的博客文章更新到 GitHub 个人主页,提升个人主页的动态性和可读性。
本文介绍了 2021-22 世界质量报告(WQR)的主要发现和趋势,强调了新冠疫情对软件质量和测试的影响,以及 QA 在敏捷和 DevOps 中的重要作用。
这篇文章介绍了 Polaris 的基本概念、支持的编程语言、SaaS 平台的使用方法,以及如何配置和运行 Polaris 进行静态代码分析。它还提供了示例 YAML 配置文件和分析结果的查看方式。
本文总结了 Git 的常用命令和技巧,帮助开发者快速查找和使用 Git 命令,提高工作效率。
本文介绍如何将 SonarQube Community Edition 集成到 Maven、Gradle 及其他类型项目中,包括必要的配置和 Jenkins 流水线示例。
本文介绍在运行 lcov 生成代码覆盖率报告时遇到 “Can’t locate JSON/PP.pm in @INC …” 等 Perl 模块缺失错误的解决方法,包括安装缺失的 Perl 模块。
本文介绍了如何使用 Gcov 和 LCOV 对 C/C++ 项目进行代码覆盖率的度量,包括编译、运行和生成报告的步骤。
本文记录了 SonarQube 的安装步骤,包括 LDAP 配置与 PostgreSQL 数据库设置,并附带一些常见问题的排查方法。
本文介绍在使用 Gcov 编译项目进行代码覆盖率统计时,出现 “hidden symbol `__gcov_init’…” 等错误的原因及解决方法,包括如何在构建时确保符号不被隐藏。
本文介绍如何通过 Bitbucket REST API 为指定提交添加或更新构建状态,并给出 Shell 脚本示例,适用于手动修复或补充构建状态的场景。
本文简要介绍了代码覆盖率的概念、重要性、常见指标、工作原理以及主流工具,强调了不要过度依赖代码覆盖率指标。
本文介绍如何在 Jenkins 流水线中正确处理超时场景,通过 try 和 catch 结合 error 确保超时后作业会失败。
本文记录了在 AIX 上使用 Jenkins 进行 Git Clone 时遇到的两个问题及其解决方法,包括依赖库加载失败和 SSH 认证失败。
在 AIX 系统中遇到 Git 下载大容量仓库时因文件大小限制导致失败,通过修改 ulimit 设置解决问题。
在使用 JFrog Artifactory 上传制品时遇到速度缓慢和上传失败的问题,经过排查和解决,分享经验和教训。