云原生 CI/CD 实战:Tekton vs Jenkins X vs GitHub Actions,K8s 原生流水线怎么选?

阿里云上云采购季 2核2G云服务器99元/年 续费同价

Kubernetes 原生 CI/CD 怎么选?Tekton、Jenkins X、GitHub Actions 深度对比,附实战代码。


为什么需要云原生 CI/CD?

传统 CI/CD 工具(Jenkins、GitLab CI)在云原生时代越来越吃力:

  • Jenkins 需要单独维护 Master/Slave 节点,扩展麻烦
  • 容器化构建时,宿主环境依赖难管理
  • Kubernetes 上跑构建任务,资源利用率低

云原生 CI/CD 的核心优势:
– 原生运行在 K8s 上,弹性伸缩
– 构建任务容器化,环境隔离
– 声明式 Pipeline,版本化管理


三大方案快速对比

维度 Tekton Jenkins X GitHub Actions
定位 K8s 原生 CI/CD 框架 Jenkins 的云原生升级版 GitHub 原生 CI/CD
部署方式 安装在 K8s 集群内 需要安装到 K8s SaaS 服务,无需部署
Pipeline 定义 CRD(自定义资源) Jenkinsfile (Jenkins X 格式) YAML 工作流文件
学习曲线 中 高 低
社区活跃度 ⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐⭐
适合场景 私有云、混合云 K8s 环境 企业级 K8s CI/CD GitHub 托管项目

Tekton 实战:K8s 原生流水线

安装 Tekton

# 安装 Tekton Pipelines(核心组件)
kubectl apply --filename https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml

# 安装 Tekton CLI(可选,方便操作)
# macOS: brew install tektoncd-cli
# Linux:
curl -LO https://github.com/tektoncd/cli/releases/download/v0.32.0/tkn_0.32.0_Linux_x86_64.tar.gz
tar xvzf tkn_0.32.0_Linux_x86_64.tar.gz
sudo mv tkn /usr/local/bin/

第一个 Pipeline:构建 Docker 镜像并推送

# task-build.yaml - 定义构建任务
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: build-and-push
spec:
  params:
    - name: image-name
      type: string
      description: 镜像名称
    - name: dockerfile-path
      type: string
      default: ./Dockerfile
  workspaces:
    - name: source   # 源代码工作区
    - name: dockerconfig  # Docker 认证配置
  steps:
    - name: build-and-push
      image: gcr.io/kaniko-project/executor:v1.9.0
      env:
        - name: DOCKER_CONFIG
          value: /workspace/dockerconfig
      command:
        - /kaniko/executor
      args:
        - --dockerfile=$(params.dockerfile-path)
        - --context=dir:///workspace/source
        - --destination=$(params.image-name):latest
        - --insecure   # 如果是 HTTP 私有仓库
# pipeline.yaml - 定义流水线
apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
  name: build-pipeline
spec:
  workspaces:
    - name: shared-workspace
    - name: dockerconfig-workspace
  tasks:
    - name: fetch-source
      taskRef:
        name: git-clone   # 使用官方 catalog 中的 task
      workspaces:
        - name: output
          workspace: shared-workspace
      params:
        - name: url
          value: https://github.com/your-org/your-repo.git
    - name: build-and-push
      taskRef:
        name: build-and-push
      workspaces:
        - name: source
          workspace: shared-workspace
        - name: dockerconfig
          workspace: dockerconfig-workspace
      params:
        - name: image-name
          value: registry.cn-hangzhou.aliyuncs.com/your-namespace/your-app
      runAfter:
        - fetch-source   # 依赖上一个任务

触发 Pipeline

# 创建 PipelineRun(一次运行实例)
cat <<EOF | kubectl apply -f -
apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
  name: build-pipeline-run-001
spec:
  pipelineRef:
    name: build-pipeline
  workspaces:
    - name: shared-workspace
      volumeClaimTemplate:
        spec:
          accessModes:
            - ReadWriteOnce
          resources:
            requests:
              storage: 2Gi
    - name: dockerconfig-workspace
      secret:
        secretName: docker-registry-secret
  params: []
EOF

# 查看运行状态
tkn pipelinerun describe build-pipeline-run-001

Jenkins X 实战:自动化 GitOps

Jenkins X 是 Jenkins 的云原生升级版,核心特性是 自动化 GitOps。

安装 Jenkins X

# 安装 jx CLI
curl -L https://github.com/jenkins-x/jx/releases/download/v3.10.0/jx-windows-amd64.zip -o jx.zip
# 解压后添加到 PATH

# 在现有 K8s 集群上安装 Jenkins X
jx boot
# 会交互式询问:
# - Git 仓库(用于存储 GitOps 配置)
# - Docker Registry
# - 域名(用于暴露应用)

创建 Spring Boot 应用并自动配置 CI/CD

# 导入现有项目
jx import my-spring-app

# Jenkins X 会自动:
# 1. 创建 Dockerfile(如果没有)
# 2. 创建 Jenkinsfile(声明式 Pipeline)
# 3. 在 GitOps 仓库中创建 Helm Chart
# 4. 配置 Webhook,代码推送后自动触发构建
// Jenkinsfile - Jenkins X 自动生成
pipeline {
  agent {
    kubernetes {
      label 'jenkins-agent'
      yaml """
apiVersion: v1
kind: Pod
spec:
  containers:
  - name: maven
    image: maven:3.8.6-jdk-11
    command: ['cat']
    tty: true
"""
    }
  }
  stages {
    stage('Build') {
      steps {
        container('maven') {
          sh 'mvn clean package'
        }
      }
    }
    stage('Build Image') {
      steps {
        sh 'make image-build'
      }
    }
    stage('Deploy to Staging') {
      steps {
        sh 'jx promote --version \$(cat VERSION) --env staging'
      }
    }
  }
}

GitHub Actions 实战:最简单上手

如果你的代码在 GitHub,Actions 是最简单的选择。

完整 CI/CD 工作流

# .github/workflows/main.yml
name: CI/CD Pipeline

on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main ]

env:
  REGISTRY: registry.cn-hangzhou.aliyuncs.com
  IMAGE_NAME: your-namespace/your-app

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
      - run: npm ci
      - run: npm test

  build-and-push:
    needs: test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      # 设置 QEMU(多架构构建需要)
      - uses: docker/setup-qemu-action@v3
      - uses: docker/setup-buildx-action@v3

      # 登录镜像仓库
      - uses: docker/login-action@v3
        with:
          registry: ${{ env.REGISTRY }}
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}

      # 构建并推送
      - uses: docker/build-push-action@v5
        with:
          context: .
          push: true
          tags: |
            ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
            ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}

  deploy:
    needs: build-and-push
    runs-on: ubuntu-latest
    steps:
      - name: Deploy to Kubernetes
        uses: appleboy/[email protected]
        with:
          host: ${{ secrets.K8S_MASTER_IP }}
          username: root
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          script: |
            kubectl set image deployment/your-app \
              your-app=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} \
              -n production

选型建议

选 Tekton,如果你:

  • 代码不在 GitHub(内网 GitLab / Gitee)
  • 需要深度定制 Pipeline 逻辑
  • 已经有 Kubernetes 集群

选 Jenkins X,如果你:

  • 团队熟悉 Jenkins
  • 需要完整的 GitOps 自动化(环境管理、版本回滚)
  • 企业级需求(权限管理、多租户)

选 GitHub Actions,如果你:

  • 代码在 GitHub
  • 想要最快上手(5 分钟配好)
  • 不需要私有部署

总结

方案 上手难度 功能完整性 私有化部署 推荐指数
Tekton ⭐⭐⭐ ⭐⭐⭐⭐ ✅ ⭐⭐⭐⭐
Jenkins X ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ✅ ⭐⭐⭐
GitHub Actions ⭐ ⭐⭐⭐⭐ ❌ ⭐⭐⭐⭐⭐

我的建议:
– 小团队 / 个人项目 → GitHub Actions
– 中大型企业 / 私有云 → Tekton
– 已经用 Jenkins → Jenkins X


👤 作者简介

一枚在大中原腹地(河南)卖公有云的从业者,主营腾讯云/阿里云/火山云,曾踩坑无数,现专注AI大模型应用落地。关注公众号「公有云cloud」,围观AI前沿动态~

博客:y1cloud.cn

发表评论