Skip to main content
Background Image

Posts

Conventional Branch Specification One-Year Anniversary — From Zero to Global Developer Adoption
·247 words·2 mins
12K+ visits, multilingual translations, and global developer adoption—the journey of the Conventional Branch specification’s first year
Blog Bilingual Publishing Made Easy — GitHub Actions + Gemini API in Practice
·443 words·3 mins
Discovered my blog has more English than Chinese readers? So I used GitHub Actions + Gemini API to automatically translate articles into English, saving time and effort.
Four Years of Open Source —— Three Unexpected Rewards
Some say open source is useless, yielding neither profit nor time savings. But through four years of dedication, I’ve discovered three unexpected rewards: increased visibility for my work, connections with exceptional people and projects, and the accumulation of long-term value. These rewards are applicable to every developer.
DevOps Maturity — From Reflection to Open Source Practice
·407 words·2 mins
How to assess and improve your team’s DevOps maturity. Official release of the DevOps Maturity open source project, with assessment tools and practical guides.
Eight Years Later, I Finally Revamped My Blog
·502 words·3 mins
This article records the process of revamping my blog after eight years, from migrating from Hexo to Hugo, to the functional and design improvements of the new blog.
Jenkins Explain Error Plugin Now Supports Google Gemini! 🤖
·310 words·1 min
This article introduces a new feature of the Jenkins Explain Error Plugin that supports for Google Gemini model for error analysis. It provides configuration methods and an example video.
Jenkins Plugin Center Didn't Have an AI Plugin Yet? I Wrote One! 🤖
·751 words·2 mins
Introducing my first Jenkins plugin: Explain Error Plugin. It automatically analyzes build failure log information and generates readable error explanations, helping developers locate and solve problems faster.
How to Fix Shields.io Badges Not Displaying in Jenkins
·218 words·2 mins
How to temporarily fix it via the Script Console, and how to make it permanent by modifying Jenkins startup parameters. This method is suitable for internal Jenkins environments and has been tested on modern Jenkins installations.
Enhancing Code Traceability — Automatically Including PR Descriptions in Git Commits
·520 words·2 mins
Leverage Bitbucket’s Commit Message Templates feature to automatically write PR descriptions into Git commit messages, ensuring crucial information isn’t lost with tool changes.
How to Change abortPrevious Value in Jenkins?
·418 words·2 mins
In Jenkins, the disableConcurrentBuilds option is used to manage concurrent builds. This article explains how to conditionally set the abortPrevious value based on the branch being built, allowing for more flexible build management.
CI/CD—Not a One-Time Project, but a Continuously Evolving System
·566 words·2 mins
In DevOps, CI/CD pipelines require continuous maintenance and refactoring. This article explores why CI/CD is not a one-time construction project, but a system that requires long-term investment and continuous evolution.
asdf-clang-tools — A New Way to Install Clang Tools Using asdf
·619 words·2 mins
asdf-clang-tools is an asdf plugin for installing and managing Clang Tools, such as clang-format, clang-tidy, clang-query, and clang-apply-replacements.
Still Using Wiki/Confluence? You Might Be Producing Garbage
·574 words·2 mins
In enterprises, documentation tools like Wiki and Confluence, if lacking unified management and review mechanisms, can lead to information chaos and knowledge sedimentation failure. This article explores how to avoid this situation and draws on the successful experiences of open-source communities.
Still using pip and venv? You're outdated! Try uv!
·570 words·3 mins
uv is a Python package management tool developed by the Astral team. It replaces the functionality of pip, venv, and pip-tools, offering faster dependency resolution and a more modern project management approach.
Microsoft and NASA Use It? My 4-Year-Old Side Project Hit 100 Stars
·319 words·1 min
cpp-linter-action is a GitHub Action that provides C/C++ code formatting and static analysis capabilities. It uses clang-format and clang-tidy, supporting various configurations and custom rules. Since its creation in 2021, the project has been used by several well-known organizations and open-source projects.
My Patience with Accessing GitHub is Wearing Thin
·299 words·1 min
Many programmers, especially those in China, are frustrated by access issues with GitHub. This article shares my personal experiences and reflections on network problems.
Setting up Sphinx + ReadTheDocs from Scratch - Rapidly Deploying Automated Documentation
·562 words·2 mins
In open-source projects or team collaborations, Sphinx + ReadTheDocs provides an easy-to-maintain, automatically deployable documentation system. This article documents the configuration process and considerations.
Markdown — Not So Great Anymore? Why More and More Python Projects Use RST?
·600 words·2 mins
Markdown and reStructuredText (RST) are two commonly used markup languages. This article compares their advantages and disadvantages and shares usage suggestions in different scenarios.
Why Are More and More Enterprise Users Abandoning VMware?
·1259 words·3 mins
Following Broadcom’s acquisition of VMware, many enterprise users are seeking alternatives. Nutanix, as a hyper-converged infrastructure (HCI) solution, offers lower costs and a simpler management interface, making it a good option.
Why I chose to review for EuroPython 2025
·652 words·2 mins
I haven’t contributed much code lately, focusing instead on reviewing proposals for EuroPython 2025.
🚀 gitstats Upgrade Arrives—JSON Output, Cross-Platform Compatibility, and Code Refactoring!
·338 words·1 min
After two months of continuous improvement, gitstats now supports JSON output, code refactoring, argparse replacing getopt, and full compatibility with Windows and macOS. Welcome to use and Star support!
How to use Jenkins Docker Cloud
·395 words·1 min
This article explains how to use Jenkins Docker Cloud for building and deploying applications, including setting up a Docker host and creating custom Docker images.
Reviving GitStats — Breathing New Life into Git History Analysis
·567 words·2 mins
This post details the revival of the GitStats project, including its migration to Python 3, the creation of a modern CI/CD pipeline, publication to PyPI and Docker, and future improvement plans.
pip vs pipx Differences
·418 words·2 mins
This article introduces the differences between pip and pipx, helping developers choose the right tool to manage Python packages and command-line tools.
PowerShell is not recognized as an internal or external command
·143 words·1 min
Explaining a recent issue with Ansible playbook execution on Windows Server 2022, where PowerShell was not recognized, and how to resolve it.
What Optimizations I Made During the Jenkins Upgrade
·481 words·3 mins
This article discusses the optimizations made during the Jenkins upgrade, including using Docker Compose for deployment, refactoring the Jenkins Shared Library, introducing Windows Docker Containers, and more to enhance the efficiency and security of the CI/CD process.
Conventional Branch Specification Released!
·488 words·1 min
This article introduces the Conventional Branch specification, which provides a structured naming convention for Git branches to enhance readability and collaboration.
Code Signing — GaraSign
·869 words·2 mins
This article introduces the installation, usage, and verification methods of the GaraSign code signing tool, helping developers achieve secure code signing.
Code Signing
·701 words·2 mins
This article introduces the concept and importance of code signing, along with a comparison of two common code signing tools, emphasizing its role in software supply chain security.
Must-Know GitHub Action Feature - Reusable Workflows
·1010 words·5 mins
This article introduces the Reusable Workflows feature of GitHub Actions, helping developers and teams manage and reuse CI/CD processes more efficiently.
cpp-linter-action—Latest Version Now Supports Pull Request Review Functionality 👏
·914 words·2 mins
This article introduces the new feature of cpp-linter-action Pull Request Review, allowing developers to directly submit code modification suggestions on GitHub, improving code quality and collaboration efficiency.
How to Automatically Categorize GitHub Release Notes by New features, Bug Fixes…
·898 words·2 mins
This article shares two methods for automatically categorizing the content of GitHub Release Notes based on titles.
How to make Jenkins pipeline not fail if a specific error occurs
·212 words·1 min
Introducing the catchError step in Jenkins pipeline to handle specific errors without failing the entire build, allowing for more flexible error management.
How to adopt Supply Chain Security for GitHub and Non-GitHub projects
·441 words·3 mins
This article introduces how to implement software supply chain security using SLSA and Witness for both GitHub and non-GitHub projects, enhancing the security of software development and deployment processes.
Witness and SLSA 💃
·954 words·2 mins
This article introduces the concept and working mechanism of Witness, and how to use Witness to generate and verify the provenance of software artifacts, emphasizing its importance in improving software supply chain security.
Problems and solutions when upgrading XLC from 10.1 to IBM Open XL C/C++ for AIX 17.1.0
·298 words·2 mins
This article documents the problems encountered when upgrading from IBM XLC 10.1 to XLC 17.1 (IBM Open XL C/C++ for AIX 17.1.0) and how to fix the errors.
Resolving Jenkins Artifactory Plugin Artifact Upload Failure "unable to find valid certification path to requested target"
·369 words·1 min
This article describes how to resolve SSL certificate validation issues when uploading artifacts from a Jenkins agent to Artifactory, including generating a security certificate file and importing it into Java’s cacerts.
Upload artifacts failed to Artifactory from AIX
·784 words·4 mins
This article explains how to resolve an SSL certificate verification issue on AIX when uploading artifacts to Artifactory via Jenkins, including updating Java’s cacerts file.
Creating a NuGet Organization — Pitfalls Encountered
·307 words·1 min
This article documents the problems and solutions encountered when creating a NuGet Organization, especially regarding the use of corporate email addresses.
Docker Buildx Bake—A Powerful Tool for Accelerating Builds and Managing Multi-platform Images
·987 words·2 mins
This article introduces the concept, advantages, use cases, and how to use Docker Buildx Bake to accelerate the building and management of multi-platform images.
Understanding SBOM - Definition, Relationships, Differences, Best Practices, and Generation Tools
·1254 words·6 mins
This article introduces the definition of SBOM, its relationship and differences with SLSA and Black Duck, best practices, and available generation tools, helping readers better understand and apply SBOM.
Programmer's Self-Cultivation — Git Commit Message and Branch Creation Conventions (Tools)
·1039 words·3 mins
This article introduces how to use the Commit Check tool to verify whether Git commit messages, branch names, committer usernames, and committer email addresses conform to specifications.
The SLSA Framework and Software Supply Chain Security Protection
·1334 words·3 mins
This article introduces the concept, purpose, and levels of the SLSA framework, and how to apply SLSA in the software supply chain to improve security. It helps readers understand the importance of SLSA in software development and deployment.
Why is my Jenkins Controller getting slower—Possible mistakes you might be making...
·1714 words·9 mins
This article introduces some best practices for Jenkins pipelines, aiming to help developers and operations personnel optimize Jenkins’ performance and maintainability.
How to implement [skip ci] for Jenkins multi-branch pipeline
·298 words·1 min
This article explains how to implement [skip ci] functionality in Jenkins multi-branch pipelines, allowing you to skip builds based on commit messages.
How to fix "Temporary Failure in name resolution" in WSL
·176 words·1 min
This article explains how to resolve the “Temporary failure in name resolution” issue in WSL by configuring DNS settings and ensuring persistent changes.
Restrict others from login your important Linux machine
·182 words·1 min
This article explains how to restrict access to a critical Linux machine by modifying the /etc/security/access.conf file, allowing only specific users to log in.
C/C++ Code Formatting and Static Analysis—A One-Stop Workflow with Cpp Linter
·1281 words·7 mins
This article introduces tools and workflows for C/C++ code formatting and static analysis, focusing on the use and integration of clang-tools.
How to create GPG keys and add to GitHub
·370 words·1 min
This article explains how to create GPG keys, export the public key, and add it to GitHub for signing commits.
Developing on Windows Just Got Awesome using WSL + VS Code + Docker Desktop - Worth a Try
·731 words·2 mins
This article introduces how to develop on Windows using WSL, VS Code, and Docker Desktop. It provides detailed installation and configuration steps, as well as the advantages and experience of using these tools.
Docker, containerd, CRI, CRI-O, OCI, runc Explained and How They Work Together
·1235 words·6 mins
This article introduces the key components and standards in the container ecosystem, such as Docker, containerd, CRI, CRI-O, OCI, and runc, explaining their relationships and how they work together.
How to enable, configure and disable Jenkins LDAP
·183 words·1 min
This article explains how to enable and configure LDAP authentication in Jenkins, including how to disable it temporarily if needed.
Reliably Unforking a GitHub Repository Without Deletion and Reconstruction
·359 words·1 min
This article describes how to separate a forked repository from its parent repository using GitHub Support, avoiding data loss from deletion and reconstruction, and helping developers better manage forked repositories.
Resolved - The Pip Inspector tree parse failed to produce output
·455 words·1 min
This article explains how to resolve the “The Pip Inspector tree parse failed to produce output” error in Black Duck Detect, including the root cause and solution.
Vagrant vs. Docker —— Which One Should You Choose?
·355 words·1 min
This article compares Vagrant and Docker, analyzing their respective use cases and advantages to help readers choose the right tool for managing virtual machines or containers.
What is Vagrant? Differences Between Vagrant and VirtualBox
·650 words·4 mins
This article introduces the concept and history of Vagrant, and how to use Vagrant to create and manage virtual machines, emphasizing the advantages of Vagrant over traditional virtual machines.
What is Go? Advantages, Current Status, and Choosing Between Python and Go for Beginners
·883 words·5 mins
This article introduces the basic concepts, advantages, and ranking of the Go programming language. It also guides beginners on choosing between learning Python or Go, providing practical learning suggestions and resources.
You Must Know These 17 Docker Best Practices!
·3928 words·19 mins
This article shares some best practices to follow when writing Dockerfiles and using Docker, including suggestions on multi-stage builds, image optimization, and security.
2021-22 World Quality Report (WQR)
·1692 words·4 mins
This article presents the key findings and trends from the 2021-22 World Quality Report (WQR), highlighting the impact of the COVID-19 pandemic on software quality and testing, and the crucial role of QA in Agile and DevOps.
Polaris - Static Code Analysis
·790 words·4 mins
This article introduces the basic concepts of Polaris, the supported programming languages, how to use the SaaS platform, and how to configure and run Polaris for static code analysis. It also provides example YAML configuration files and how to view the analysis results.
How does SonarQube Community Edition integrate with the project
·196 words·1 min
This article explains how to integrate SonarQube Community Edition with Maven, Gradle, and other projects, including the necessary configurations and Jenkins pipeline setup.
Run lcov failed "Can't locate JSON/PP.pm in @INC ..."
·403 words·2 mins
This article explains how to resolve the “Can’t locate JSON/PP.pm in @INC …” error when running lcov, including installing missing Perl modules.
SonarQube installation and troubleshootings
·959 words·5 mins
This article documents the steps to install SonarQube, configure LDAP, and set up PostgreSQL as the database. It also includes troubleshooting tips for common issues encountered during setup.
How to fix "hidden symbol `__gcov_init' in ../libgcov.a(_gcov.o) is referenced by DSO"
·323 words·2 mins
This article explains how to resolve the “hidden symbol `__gcov_init’ in ../libgcov.a(_gcov.o) is referenced by DSO” error when building a project with Gcov, including how to ensure symbols are not hidden.
Add or update Bitbucket build status with REST API
·182 words·1 min
How to add or update the build status of a specific commit in Bitbucket using its REST API. It includes a shell script example for updating the build status and provides context on when to use this functionality.
About Code Coverage
·839 words·4 mins
This article briefly introduces the concept, importance, common metrics, working principle, and mainstream tools of code coverage, emphasizing that code coverage metrics should not be over-relied upon.
Code coverage testing of C/C++ projects using Gcov and LCOV
·1000 words·5 mins
This article shares how to use Gcov and LCOV to metrics code coverage for C/C++ projects. It explains the steps to compile, run tests, and generate coverage reports, including example commands and expected outputs.
How to make Jenkins job fail after timeout? (Resolved)
·208 words·1 min
This article explains how to handle Jenkins job timeouts effectively by using try and catch blocks to ensure the job fails correctly when a timeout occurs.
Solving Two Git Clone Failure Issues on AIX
·878 words·5 mins
This article documents two issues encountered when using Jenkins for Git clone on AIX and their solutions, including dependent library loading failure and SSH authentication failure.
Resolving Git Large Repository Download Failures on AIX by Removing File Resource Limits
·368 words·2 mins
Resolving Git large repository download failures on AIX due to file size limits by modifying ulimit settings.
Regarding Extremely Slow and Occasional Upload Failures to Artifactory — A Case Study
·353 words·2 mins
Encountered slow upload speeds and occasional failures when uploading artifacts to JFrog Artifactory. This post shares the troubleshooting process and lessons learned.
Resolved problem that ESlint HTML report is not displayed correctly in Jenkins job
·159 words·1 min
This article explains how to resolve the issue of ESlint HTML report not displaying correctly in Jenkins jobs due to Content Security Policy restrictions, including the steps to configure Jenkins to allow the report to load properly.
Branch Naming Convention
·205 words·1 min
This article introduces the conventional branch naming specification, including the purpose of branch names, key points, and basic rules for naming branches in Git. It also provides examples of branch prefixes and their meanings.
How to download the entire folder artifacts when Artifactory "Download Folder functionality is disabled"?
·371 words·1 min
This article explains how to download the entire folder artifacts from JFrog Artifactory when the “Download Folder functionality is disabled”. It provides a workaround using Artifactory REST APIs to retrieve and download artifacts programmatically.
Why Windows Installer pop up? (Resolved)
·188 words·1 min
This article explains a common issue with Windows installers where a pop-up appears unexpectedly, and how to resolve it by correcting the build folder naming convention.
Is Your Python Code Pythonic Enough?
·673 words·4 mins
This article introduces the concept of Pythonic code and demonstrates through examples how to write more concise and elegant Python code, helping developers improve code quality and readability.
Different branches have different default parameters in Jenkins
·158 words·1 min
This article explains how to set different default parameters for different branches in Jenkins multibranch pipelines, allowing for dynamic configuration based on the branch being built.
Thoughts and Practices Based on Google's Code Review Principles
·776 words·4 mins
This article introduces Google’s code review principles and shares practical experience on how to effectively implement code review in a team, including process control and automated checks.
Jenkins upgrade issue "Windows agents won't start" workaround
·331 words·2 mins
This article explains how to resolve the issue of Windows agents not starting after upgrading Jenkins, including the necessary steps to update the Windows Slaves plugin and modify configuration files.
What's the difference between result and currentResult in Jenkins?
·336 words·2 mins
This article explains the difference between result and currentResult in Jenkins pipelines, including examples of how they behave in both declarative and scripted pipelines.
How to open port 22 and make it listening on Windows
·123 words·1 min
This article explains how to open port 22 on Windows and ensure it is listening, which is necessary for SSH connections. It includes steps to install OpenSSH and configure the firewall.
These settings in Bitbucket/GitHub recommends enable
·282 words·2 mins
Provides a list of recommended settings for Bitbucket and GitHub repositories, including enabling force push rejection, branch protection, tag management, merge checks, and commit message standards.
git sparse-checkout enable and disable
·127 words·1 min
This article explains how to enable and disable git sparse-checkout, including examples of how to configure sparse-checkout for specific directories and how to reset it.
Resolving the Unavailable Code Sign Default Timestamp Server http://timestamp.verisign.com/scripts/timstamp.dll
·241 words·2 mins
This article describes how to resolve issues with the unavailable Verisign timestamp server, providing alternative timestamp server addresses to help developers successfully complete code signing.
How to backup Jenkins
·214 words·2 mins
This article explains how to backup Jenkins using the ThinBackup plugin and shell scripts, ensuring that your Jenkins configuration and build data are safely stored.
For Those Who Want to Use JFrog Artifactory to Manage Artifacts
·1507 words·8 mins
This article introduces the concepts, advantages, working principles, and best practices of JFrog Artifactory, helping readers understand how to use Artifactory to manage software artifacts.
Programmer's Self-Cultivation — Git Commit Message and Branch Creation Conventions
·1643 words·4 mins
This article introduces how to formulate and implement Git commit message and branch creation conventions to improve code quality and team collaboration efficiency.
Publishing a Python Project on GitHub — Things to Note
·845 words·4 mins
This article introduces the important aspects to consider when publishing a Python project on GitHub, including project structure, dependency management, and version control.
About Python pip install and versioning
·739 words·4 mins
Explains the behavior of pip install commands with different versioning schemes, including how to handle beta versions and the implications of using --upgrade with specific version numbers.
Update Jira server account avatar with rest API
·185 words·1 min
How to update the avatar of a Jira server account using the REST API, including examples in Python and Postman.
Fixed "Remote session was disconnected because there are no Remote Desktop client access licenses available"
·152 words·1 min
Fix the RDP connection issue on Windows Server 2012 R2, where the error message indicates that there are no Remote Desktop client access licenses available.
Obtaining Bitbucket Repository Events in Real Time via the generic-webhook-trigger Plugin
·409 words·2 mins
This article describes how to use Jenkins’ generic-webhook-trigger plugin to obtain real-time event information from a Bitbucket repository, such as the Pull Request ID.
Jenkins—Executing Shell Scripts—Handling Non-Zero Return Codes
·242 words·1 min
How to handle non-zero return codes from Shell commands in a Jenkins Pipeline to ensure the job shows a successful status even if a command fails.
How to fix ".NET Framework 2.0 or later is required on this computer to run a Jenkins agent as a Windows service"
·211 words·1 min
Resolve the issue of Jenkins Windows agents not connecting due to missing .NET Framework, including steps to install .NET Framework 3.5 and set up the Jenkins agent service.
Jenkins Top 3 best practice
·906 words·5 mins
Discusses three best practices for Jenkins: Configuration as Code, Shared Libraries, and Multi-Branch Pipeline, highlighting their benefits in terms of transparency, traceability, and self-service builds.
Beyond Coding - The Importance of Writing for Programmers
·686 words·4 mins
This article explores the importance of writing skills for programmers, highlighting the role of communication and expression in career advancement, and sharing personal experiences and insights on writing.
How to Ensure No Syntax Errors Before Submitting a Jenkins Pipeline
·569 words·3 mins
This article introduces two methods to ensure there are no syntax errors before submitting a Jenkins Pipeline using the REST API for syntax validation and using the VSCode plugin for syntax checking.
How to use JMeter to do Performance Testing
·491 words·3 mins
A guide on using JMeter for performance testing, including recording scripts, running tests in GUI and non-GUI modes, and integrating with Jenkins for automated testing.
Bitbucket Webhooks Configuration
·398 words·2 mins
How to configure Bitbucket webhooks to trigger Jenkins builds for multi-branch pipelines, ensuring that Jenkins can automatically respond to events like pull requests and branch updates.
Three Ways to Solve the Jenkins Declarative Pipeline "Method code too large" Exception
·558 words·3 mins
This article introduces three methods to solve the “Method code too large” exception in Jenkins declarative pipelines, including moving steps outside the pipeline, migrating from declarative to scripted pipelines, and using Shared Libraries.
How to Slim Down Your Git Repository
·1133 words·6 mins
How to remove unnecessary files and history from a Git repository to reduce its size, providing two methods using BFG Repo Cleaner or git filter-branch.
A Free C/C++ Static Code Analysis Tool—Cppcheck—Integrated with Jenkins
·926 words·2 mins
This article introduces the installation, usage, and integration of Cppcheck with Jenkins to improve C/C++ code quality and static analysis capabilities.