Skip to main content
  1. Posts/

CI/CD—Not a One-Time Project, but a Continuously Evolving System

·566 words·2 mins· ·
Xianpeng Shen
Author
Xianpeng Shen
Table of Contents

This article stems from a WeChat Moments post I saw from a former colleague.

同事的朋友圈

I feel like he’s blatantly praising me :) (Sorry, had to brag a little~)

But honestly, for the past few years in the CI/CD field, I’ve been consistently doing two things:

  • Keeping up with the latest industry practices;
  • Selecting and implementing parts suitable for our business, or writing articles to share.

However, I’ve noticed a common misconception:

Many people think that once CI/CD is done, it’s done—a set-and-forget solution.

This is not the case.

Rome Wasn’t Built in a Day, Neither Was CI/CD
#

Whether it’s the CI/CD pipeline, or the underlying programs, tools, libraries, and platforms, they all belong to the infrastructure. A significant characteristic of infrastructure is:

It requires long-term investment and continuous maintenance.

Otherwise, no matter how well you build it now, after a few years, it will become a bloated, uncontrolled “technical debt wasteland” due to lack of maintenance. Eventually, you’ll have to start over.

A few examples will make this clear:

Risks Quickly Emerge Without Maintenance
#

1. Security Risks:
#

If you haven’t paid attention to CVE-2024-23897, you might not know that your Jenkins has an arbitrary file reading vulnerability, risking intrusion by attackers.

2. Missing Functionality and Compatibility Issues:
#

Not checking Jenkins’ update logs might cause you to miss critical fixes or new features; Not updating the CI/CD toolchain might suddenly cause your code to fail compilation or tests.

3. Technical Debt Accumulation and Increased Maintenance Costs:
#

Without introducing new practices and tools, the pipeline will become increasingly complex and difficult to maintain, leading to a worse development experience.

Now Let’s Look at the Python Project Side
#

1. Still Using setup.py?
#

Then you might have missed the unified build ecosystem brought by pyproject.toml introduced by PEP 518.

2. Still Using pip install to Install CLI Tools?
#

Then you might not know how pipx and uvx can manage tool dependencies more conveniently and efficiently.

3. Unfamiliar with PEPs, Package Structure, and Release Specifications?
#

This easily leads to writing non-standard, hard-to-maintain, and non-reusable code.

These issues, seemingly minor on the surface, hide behind them maintenance costs, team collaboration efficiency, and the sustainability of the project’s future development.

Therefore, refactoring is a daily task in software engineering.

Many times, this work is not obvious, and is even easily considered “doing too much,” “fiddling around,” or “wasting time.”

But in reality, precisely these “hidden tasks” are the true foundation of software engineering.

Without refactoring, the system will only become more bloated; Without continuous evolution, CI/CD will eventually become a mess; Without continuous learning and exploration, you will drift further and further from best practices.

So, I hope this article can give you some inspiration:

CI/CD is not a one-time construction project, but a continuously evolving, constantly refactored, and growing DevOps system.

If you are also doing this “invisible work,” don’t be discouraged. You are laying the foundation for the long-term sustainability of the entire system.

Have you encountered any related pitfalls? Welcome to share your story in the comments.


Please indicate the author and source when reprinting this article, and do not use it for any commercial purposes. Welcome to follow the WeChat official account “DevOps攻城狮”

Related

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.
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 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.
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.
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.
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.