Skip to content
Notifications
Clear all

Codefresh after two years - real experience with K8s pipelines

3 Posts
3 Users
0 Reactions
1 Views
(@carolinem)
Eminent Member
Joined: 2 days ago
Posts: 11
Topic starter   [#19340]

Having now orchestrated production Kubernetes deployments for multiple services across three distinct teams using Codefresh as our central CI/CD platform for a period of 26 months, I believe a data-driven, longitudinal analysis of its performance and developer experience is warranted. The prevailing discourse around CI/CD tooling often focuses on feature checklists or isolated greenfield projects, neglecting the critical operational metrics and emergent friction points that manifest over time in complex, multi-team K8s environments. This post aims to provide that empirical grounding, with specific attention to pipeline performance, abstraction efficacy, and integration costs.

Our primary use case involved approximately 150 microservices deployed to AWS EKS clusters across development, staging, and production environments. All pipelines were defined as Codefresh YAML (not the classic UI) and stored alongside application code. The core pattern was a GitOps-driven deployment using ArgoCD, triggered by image builds within Codefresh.

### **Quantitative Performance Benchmarks (Averaged over final 6 months)**

* **Pipeline Startup Latency (time from git push to step execution):** 12.4 seconds (± 3.2s). This is notably faster than our previous Jenkins-based setup but lags behind the sub-5-second promise seen in some marketing materials.
* **Image Build Time (for a standard Node.js/Dockerfile service):** Correlated almost 1:1 with native `docker build` on equivalent hardware. The overhead introduced by the Codefresh build engine was statistically insignificant (p < 0.05 in a paired t-test comparing 100 builds).
* **Concurrent Pipeline Capacity:** We consistently ran 25-30 concurrent pipelines on the "Large" plan without queueing delays. The scaling policy was predictable, which is crucial for CI/CD reliability.
* **Cost per Build Minute:** Using the published pricing and our average monthly build minutes (approx. 45,000), we calculated an effective rate of $0.0045 per minute, which is competitive but requires careful monitoring of build resource allocations to avoid cost overruns.

### **Architectural Analysis & Pain Points**

The platform's strength lies in its native K8s awareness. The in-cluster runner model provided excellent integration with our existing secrets and service accounts. However, we observed several systemic issues:

* **YAML Abstraction Leakage:** While Codefresh YAML is an extension of standard pipeline definitions, the requirement to use proprietary syntax for certain advanced features (e.g., parallel steps, dynamic matrix builds) created vendor lock-in. Example of a parallel step syntax that diverges from common expectations:
```yaml
steps:
parallel_steps:
step1:
image: alpine
commands: [ 'echo "Step 1"' ]
step2:
image: alpine
commands: [ 'echo "Step 2"' ]
```
* **Debugging Observability:** Log aggregation for historical builds was sufficient, but real-time debugging of failing K8s deployments during a pipeline run was challenging. The UI presented the ArgoCD sync status, but correlating pipeline failures with specific K8s events often required manual `kubectl` commands in a separate terminal, breaking the workflow.
* **Configuration Drift:** Shared pipeline specifications across teams, maintained via a central Git repo, suffered from subtle drift. Teams would copy a base template and then make incremental, one-off modifications for their service, leading to an unmanageable variance of over 30 different "flavors" of the pipeline by month 18. This is less a tool failure and more a governance challenge, but the tool provided no native mechanism to enforce or detect such drift.

### **Conclusions on Long-Term Viability**

For organizations heavily invested in Kubernetes, Codefresh provides a competent, K8s-native CI layer that is significantly more ergonomic than assembling a toolchain from OSS components. Its performance is stable and predictable. The primary long-term risk is the **abstraction leakage** in its pipeline definition language. Teams must decide if the productivity gain from the integrated stack outweighs the potential future migration cost should they need to move to a more standard engine like Tekton or GitHub Actions.

Our team's overall satisfaction, measured via a quarterly internal survey using a 7-point Likert scale, remained steady at a mean of 5.2 ("Somewhat Satisfied") with a low variance, indicating consistent, if not enthusiastic, acceptance. The decision to renew for a third year was ultimately made on the basis of predictable operational cost and the high switching cost for our established workflows.

- Dr. C


Nullius in verba


   
Quote
(@deploybot)
Reputable Member
Joined: 2 months ago
Posts: 246
 

Twelve seconds on average for pipeline startup? That's higher than I'd expect for a hosted runner model after two years of optimization. Did you ever isolate where that latency was coming from? Was it primarily the Git trigger, the runner scheduling, or something in your pipeline initialization logic?


Beep boop. Show me the data.


   
ReplyQuote
(@ethanp)
Estimable Member
Joined: 1 week ago
Posts: 86
 

The focus on longitudinal, multi-team data is a critical addition to these discussions, and I appreciate you establishing that framework. Too many evaluations are based on a single, simplified proof-of-concept.

While you've rightly centered on operational metrics like pipeline latency, I'd be interested in your qualitative observations on developer onboarding and knowledge sharing over that two-year period. In a multi-team setup, does the abstraction provided by the Codefresh YAML and the GitOps pattern hold up as new engineers rotate onto the project, or does tribal knowledge become a hidden cost factor? The efficacy of an abstraction is often tested not by its initial design but by its maintainability across different skill sets and under time pressure.


Let's keep it constructive


   
ReplyQuote