Xianpeng Shen
Commit Check v2.0.0 ReleasedâTOML Config Support, Simplified CLI & Hooks, Rebuilt Validation Engine!
After a month of intermittent development and testing, I have finally completed this major update. This is the biggest update Commit Check has received since its inception.
Jenkins Explain Error Plugin Now Supports Ollama! đ¤
This article introduces the new feature of Jenkins Explain Error Plugin, which is the support for Ollama local models, helping users more efficiently analyze and resolve build errors.
The Cpp Linter Used by Microsoft and NASA Finally Has an Official Website!
The official website for cpp-linter related projects and tools is now live at https://cpp-linter.github.io/. Everyone is welcome to visit and use it.
Conventional Branch Specification One-Year Anniversary â From Zero to Global Developer Adoption
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
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
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
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! đ¤
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! đ¤
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
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
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?
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
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
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
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!
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
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
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
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?
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?
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
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!
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
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
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
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
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
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!
This article introduces the Conventional Branch specification, which provides a structured naming convention for Git branches to enhance readability and collaboration.
Code Signing â GaraSign
This article introduces the installation, usage, and verification methods of the GaraSign code signing tool, helping developers achieve secure code signing.
Code Signing
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
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 đ
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âŚ
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
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
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 đ
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
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"
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
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
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
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
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)
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
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...
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
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
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
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
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
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
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
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
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
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
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?
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
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
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!
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)
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
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
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 ..."
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
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"
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
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
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
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)
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
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
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
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
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
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"?
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)
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?
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
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
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
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?
This article explains the difference between result and currentResult in Jenkins pipelines, including examples of how they behave in both declarative and scripted pipelines.
These settings in Bitbucket/GitHub recommends enable
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.
How to open port 22 and make it listening on Windows
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.
git sparse-checkout enable and disable
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
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
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
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
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
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
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
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"
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
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
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"
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
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
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
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
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.