为什么我选择参与 EuroPython 2025 评审?

最近工作之余没怎么贡献代码,主要把时间都用在了评审 EuroPython 2025 (欧洲 Python 2025 大会)的提案上了。

EuroPython 2025

在国内的时候,我从未想过去参与某个活动,并当志愿者服务大家。但是来到欧洲,我突然想多参加点这样的活动。

下面就说说我为什么选择参加志愿者工作,以及最近一周的支援活动有哪些收获和感悟。

Read More

🚀 gitstats 升级来袭:支持 JSON 输出、多平台兼容、代码重构!

大家好!自从上次发文宣布开始维护 gitstats 以来,我一直在不断地改进这个项目,下面是这两个月的主要更新内容:

✨ 新增功能与改进

Read More

How to use Jenkins Docker Cloud

Recently, I am working on Jenkins instance migration, this time I started to use Jenkins Docker Cloud insead of use docker { ... } in Jenkinsfile.

Jenkins cloud plugin

First you need to install Jenkins Docker Cloud plugin https://plugins.jenkins.io/docker-plugin/

Jenkins Docker Cloud is a plugin that allows Jenkins to use Docker containers as build agents.

So you need to config a Docker Host with remote API as follows.

Read More

CPython 停止更新 Copyright 了,为什么?

最近逛 CPython 的仓库发现了这个 Issue gh-126133:

Hugo van Kemenade 他作为 Python 3.14 & 3.15 发布经理提出是否可以停止更新 Copyright。

在工作中,我其中的职责之一也是发布,因此我这个想法的提出也非常感兴趣,跟 CPython 项目一样,我们的项目在每年的年初都要更新 Copyright。

下面我们就一起来看看 Hugo 提出的理由以及最终这个想法被 Python 项目法律团队采纳并最终合并到 CPython 的主分支的过程。

Read More

2024 年终总结

时间过得很快,2024 年即将过去。如果不记录下在这一年里发生的事情,过不了多久就很难回想起这一年都发生了什么。按照惯例,这篇年终总结如期而至。

回看自己年初写下的 Flag,有些实现了,有些做了但不是很好,还有一些没有做到。

Read More

我的女儿

女儿已经两岁七个月了,我还没有单独写过一篇关于她的文章。

我的女儿是个好动的小姑娘,每天充满活力,以至于经常我从下班到家六点半一直陪她到半夜十二点多才能停下来睡觉。

今天是周五晚上,十二点半了还是蹦蹦跳跳不想睡觉,终于在凌晨一点钟熄灯睡觉了。但她突然下床要吃苹果。

Read More

复活 GitStats:让 Git 历史分析焕发新活力

最近的晚上的时间(一般要等到孩子睡了)我正在做一件事:复活已经沉寂多年的 GitStats 项目。

此前,我曾写过两篇关于 GitStats 的文章,如果感兴趣,可以查阅了解。

Read More

pip vs pipx 的区别

pip vs pipx 的区别

在 Python 的生态中,pippipx 都是用于管理包的软件工具,但它们有不同的设计目标和使用场景。有些同学可能会疑惑,两者到底有什么区别?该如何选择?


Read More

用于 DevOps 的 Nix 和 NixOS

当 CI 或更糟的是生产发生灾难性故障时,“在我的计算机上工作”一直是毫无帮助的答案。除其他外,Nix 是一种通过提供可重复、声明性和可靠的系统来解决此问题的方法。这使得它成为通常称为 DevOps 的两个方面的绝佳工具:操作系统的开发和流程。这篇文章将通过一个实际示例展示这两个方面,但首先,让我们从鸟瞰的角度看看这些承诺到底意味着什么。

Read More

Commit Check 更新:新增两个实用功能提升代码质量保障

最近有用户提出两个需求:一是支持在 Pull Request 中增加评论,二是检查 Pull Request 是否已经 rebase。

经过几晚的努力,现在正式宣布在最新的 commit-check 以及 commit-check-action 中新增两个重要功能:pr-commentsbase-merge

这两个功能旨在进一步提升 Pull Request (PR) 的检查能力。

Read More

PowerShell is not recognized as an internal or external command

Recently, while setting up a new Windows Server 2022, I encountered an issue where my Ansible playbook, which previously worked without problems, failed to execute.

Here’s the configuration I used for the Windows host in my Ansible inventory:

Read More

从早到晚,我的 DevOps 一天

很多人可能会好奇,作为一名 DevOps 工程师,每天究竟忙些什么呢?今天就来简单聊聊,作为 DevOps/Build/Release 工程师,我的日常工作节奏是怎样的。

工作准备

每天早上九点半到公司,第一件事就是打开 Slack 和邮箱,优先处理那些紧急或容易回复的消息。遇到比较复杂的内容,就会设置提醒,以防漏掉。之后,会把当天的任务列入 To-Do List,再检查 Jenkins 上是否有失败的任务需要关注。这一系列动作大概会花半小时左右。

Read More

What Optimizations I Made During the Jenkins Upgrade

Background

Recently, I’ve been working on migrating and upgrading Jenkins. The main motivation is the vulnerability CVE-2024-23897.

Jenkins 2.441 and earlier, LTS 2.426.2 and earlier does not disable a feature of its CLI command parser that replaces an ‘@’ character followed by a file path in an argument with the file’s contents, allowing unauthenticated attackers to read arbitrary files on the Jenkins controller file system.

To address this, Jenkins needs to be upgraded to at least version 2.442 or LTS 2.426.3 or above. This was also an opportunity to rework parts of the setup that weren’t initially optimized.

Read More

从 Jenkins 升级,我做了哪些优化

背景

我最近在做的一件事情是迁移并升级 Jenkins。主要动机是因为这个漏洞 CVE-2024-23897

Jenkins 2.441 及更早版本、LTS 2.426.2 及更早版本未禁用其 CLI 命令解析器的一项功能,该功能会将参数中文件路径后的“@”字符替换为文件内容,从而允许未经身份验证的攻击者读取 Jenkins 控制器文件系统上的任意文件。

因此需要将 Jenkins 至少升级到 2.442 或 LTS 2.426.3 及以上版本,也趁此机会重新重构之前没有做满意的部分。

Read More

选择往往比努力更重要

偶尔深夜躺下时,我常常在想,我是怎么就走到这了?这都是源于毕业后的一系列选择吧!

也时常感慨,选择往往比努力更重要。回顾过去十余年,这几个决定对我走到今天起到了至关重要的影响。

Read More