Cloud Native 15 min read

Argo Workflows vs Jenkins: Building Cloud‑Native CI/CD Pipelines on ACK One Serverless

Argo Workflows, a cloud‑native Kubernetes job orchestrator, offers superior autoscaling, concurrency, cost efficiency, and seamless integration with the Argo ecosystem compared to Jenkins, and the article provides a detailed tutorial on deploying a Go‑based CI pipeline on ACK One Serverless Argo with BuildKit, NAS caching, and parameterized workflow templates.

Alibaba Cloud Infrastructure
Alibaba Cloud Infrastructure
Alibaba Cloud Infrastructure
Argo Workflows vs Jenkins: Building Cloud‑Native CI/CD Pipelines on ACK One Serverless

Argo Workflows is an open‑source, cloud‑native workflow engine for orchestrating jobs on Kubernetes, enabling automation of complex pipelines such as scheduled tasks, machine learning, ETL, model training, data streams, and CI/CD.

Kubernetes Jobs lack step dependencies, templates, visual UI, and workflow‑level error handling, making them unsuitable for batch processing, scientific computing, and continuous integration scenarios.

As a CNCF graduated project, Argo Workflows is widely used, especially for continuous integration (CI).

Jenkins, the most common CI/CD solution, is free and plugin‑rich but suffers from being non‑Kubernetes‑native, performance bottlenecks as pipelines grow, limited auto‑scaling, high idle‑resource costs, and maintenance challenges due to plugin version incompatibilities and security issues.

Compared with Jenkins, Argo Workflows provides many advantages: it is Kubernetes‑native, inherits Kubernetes container management benefits (automatic recovery, elastic scaling, RBAC with SSO), offers autoscaling and high concurrency for large‑scale pipelines, minimizes cost through spot ECI usage, and integrates seamlessly with the Argo ecosystem (Argo CD, Argo Rollout, Argo Event).

Comparison Table

Argo Workflows

Jenkins

Kubernetes‑native, inherits container fault‑recovery, elastic scaling, RBAC + SSO.

Non‑Kubernetes‑native.

Autoscaling, high concurrency for large pipelines.

Performance degrades with many pipelines; poor auto‑scaling.

Cost‑effective: auto‑scale, spot ECI support.

Idle compute waste.

Growing community, tight integration with Argo CD, Rollout, Event.

Mature community, abundant plugins but high maintenance overhead.

The article then introduces ACK One Serverless Argo , a fully managed Argo Workflows service that leverages Alibaba Cloud ECI for automatic scaling, spot instances, and cost reduction.

CI Pipeline Overview

The pipeline uses BuildKit for image building and caching, NAS for Go module caching, and consists of three main steps: Git clone & checkout, optional Go test (accelerated by NAS), and Build & push image with optional commit‑ID tag.

The pre‑installed ClusterWorkflowTemplate named ci-go-v1 is provided. Its YAML definition is shown below:

apiVersion: argoproj.io/v1alpha1</code><code>kind: ClusterWorkflowTemplate</code><code>metadata:</code><code>  name: ci-go-v1</code><code>spec:</code><code>  entrypoint: main</code><code>  volumes:</code><code>  - name: run-test</code><code>    emptyDir: {}</code><code>  - name: workdir</code><code>    persistentVolumeClaim:</code><code>      claimName: pvc-nas</code><code>  - name: docker-config</code><code>    secret:</code><code>      secretName: docker-config</code><code>  arguments:</code><code>    parameters:</code><code>    - name: repo_url</code><code>      value: ""</code><code>    - name: repo_name</code><code>      value: ""</code><code>    - name: target_branch</code><code>      value: "main"</code><code>    - name: container_image</code><code>      value: ""</code><code>    - name: container_tag</code><code>      value: "v1.0.0"</code><code>    - name: dockerfile</code><code>      value: "./Dockerfile"</code><code>    - name: enable_suffix_commitid</code><code>      value: "true"</code><code>    - name: enable_test</code><code>      value: "true"</code><code>  templates:</code><code>  - name: main</code><code>    dag:</code><code>      tasks:</code><code>      - name: git-checkout-pr</code><code>        inline:</code><code>          container:</code><code>            image: alpine:latest</code><code>            command:</code><code>            - sh</code><code>            - -c</code><code>            - |</code><code>              set -eu</code><code>              apk --update add git</code><code>              cd /workdir</code><code>              echo "Start to Clone "{{workflow.parameters.repo_url}}</code><code>              git -C "{{workflow.parameters.repo_name}}" pull || git clone {{workflow.parameters.repo_url}}</code><code>              cd {{workflow.parameters.repo_name}}</code><code>              echo "Start to Checkout target branch" {{workflow.parameters.target_branch}}</code><code>              git checkout {{workflow.parameters.target_branch}}</code><code>              echo "Get commit id"</code><code>              git rev-parse --short origin/{{workflow.parameters.target_branch}} > /workdir/{{workflow.parameters.repo_name}}-commitid.txt</code><code>              commitId=$(cat /workdir/{{workflow.parameters.repo_name}}-commitid.txt)</code><code>              echo "Commit id is got: "$commitId</code><code>              echo "Git Clone and Checkout Complete."</code><code>        volumeMounts:</code><code>        - name: "workdir"</code><code>          mountPath: /workdir</code><code>        resources:</code><code>          requests:</code><code>            memory: 1Gi</code><code>            cpu: 1</code><code>        activeDeadlineSeconds: 1200</code><code>      - name: run-test</code><code>        when: "{{workflow.parameters.enable_test}} == true"</code><code>        inline:</code><code>          container:</code><code>            image: golang:1.22-alpine</code><code>            command:</code><code>            - sh</code><code>            - -c</code><code>            - |</code><code>              set -eu</code><code>              if [ ! -d "/workdir/pkg/mod" ]; then</code><code>                mkdir -p /workdir/pkg/mod</code><code>                echo "GOMODCACHE Directory /pkg/mod is created"</code><code>              fi</code><code>              export GOMODCACHE=/workdir/pkg/mod</code><code>              cp -R /workdir/{{workflow.parameters.repo_name}} /test/{{workflow.parameters.repo_name}}</code><code>              echo "Start Go Test..."</code><code>              cd /test/{{workflow.parameters.repo_name}}</code><code>              go test -v ./...</code><code>              echo "Go Test Complete."</code><code>        volumeMounts:</code><code>        - name: "workdir"</code><code>          mountPath: /workdir</code><code>        - name: run-test</code><code>          mountPath: /test</code><code>        resources:</code><code>          requests:</code><code>            memory: 4Gi</code><code>            cpu: 2</code><code>        activeDeadlineSeconds: 1200</code><code>        depends: git-checkout-pr</code><code>      - name: build-push-image</code><code>        inline:</code><code>          container:</code><code>            image: moby/buildkit:v0.13.0-rootless</code><code>            command:</code><code>            - sh</code><code>            - -c</code><code>            - |</code><code>              set -eu</code><code>              tag={{workflow.parameters.container_tag}}</code><code>              if [ {{workflow.parameters.enable_suffix_commitid}} == "true" ]</code><code>              then</code><code>                commitId=$(cat /workdir/{{workflow.parameters.repo_name}}-commitid.txt)</code><code>                tag={{workflow.parameters.container_tag}}-$commitId</code><code>              fi</code><code>              echo "Image Tag is: "$tag</code><code>              echo "Start to Build And Push Container Image"</code><code>              cd /workdir/{{workflow.parameters.repo_name}}</code><code>              buildctl-daemonless.sh build \</code><code>                --frontend \</code><code>                dockerfile.v0 \</code><code>                --local context=. \</code><code>                --local dockerfile=. \</code><code>                --opt filename={{workflow.parameters.dockerfile}} \</code><code>                build-arg:GOPROXY=http://goproxy.cn,direct \</code><code>                --output type=image,"name={{workflow.parameters.container_image}}:${tag},{{workflow.parameters.container_image}}:latest",push=true,registry.insecure=true \</code><code>                --export-cache mode=max,type=registry,ref={{workflow.parameters.container_image}}:buildcache \</code><code>                --import-cache type=registry,ref={{workflow.parameters.container_image}}:buildcache</code><code>              echo "Build And Push Container Image {{workflow.parameters.container_image}}:${tag} and {{workflow.parameters.container_image}}:latest Complete."</code><code>        env:</code><code>        - name: BUILDKITD_FLAGS</code><code>          value: --oci-worker-no-process-sandbox</code><code>        - name: DOCKER_CONFIG</code><code>          value: /.docker</code><code>        volumeMounts:</code><code>        - name: workdir</code><code>          mountPath: /workdir</code><code>        - name: docker-config</code><code>          mountPath: /.docker</code><code>        securityContext:</code><code>          seccompProfile:</code><code>            type: Unconfined</code><code>          runAsUser: 1000</code><code>          runAsGroup: 1000</code><code>        resources:</code><code>          requests:</code><code>            memory: 4Gi</code><code>            cpu: 2</code><code>        activeDeadlineSeconds: 1200</code><code>        depends: run-test

The article then outlines the steps to run the pipeline via the ACK One console: log in, enable the Argo workflow console, navigate to Cluster Workflow Templates , select ci-go-v1, fill in parameters, and submit.

A parameter table lists the required inputs such as repo_url, repo_name, target_branch, container_image, container_tag, dockerfile, enable_suffix_commitid, and enable_test.

After execution, the workflow status can be inspected in the Argo UI.

Conclusion

ACK One Serverless Argo, as a fully managed service, enables large‑scale, fast, and cost‑effective CI pipelines and can be combined with ACK One GitOps (Argo CD) and Argo Event for a complete automated CI/CD solution.

Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

Cloud Nativeci/cdKubernetesArgo WorkflowsBuildKit
Alibaba Cloud Infrastructure
Written by

Alibaba Cloud Infrastructure

For uninterrupted computing services

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.