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


阿里云推广

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

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/ssh-action@v1.0.0
            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前沿动态~

    博客:yunduancloud.icu

    发表评论