返回首页

开源CI/CD平台:Drone CI和Woodpecker CI替代CircleCI实战

开源平台:Drone CI和 CI替代实战

CI/CD为什么这么贵?

CircleCI的免费tier看起来很美好——每月6000分钟构建时间,但一旦你的项目规模上来,这个数字很快就不够用了。付费版从$15/月起步,实际使用中,一个中等活跃的10人团队很容易每月消耗50000+分钟,账单轻松突破$100/月。CloudBees(企业版)更是按企业定价,年费动辄上万美元。

更隐蔽的成本是vendor lock-in。你在CircleCI上精心编写的配置、构建缓存、环境变量,一旦要迁移,几乎要从头来过。自托管CI/CD方案不仅能省下真金白银,还能让你完全掌控构建环境和数据。

付费工具定价分析

CircleCI — 免费tier + $15/月起

CircleCI提供三种定价层级:免费版每月6000分钟(仅限小资源类),版$15/月起包含更多分钟和更大资源类,Scale版企业定价。关键限制在于:免费版只能使用small资源类(1核CPU、2GB内存),Docker Layer Caching收费,并发job数有限。

实际使用中,一个包含前后端的中型项目,每天跑3-5次CI,加上PR触发的检查构建,月消耗轻松超过10000分钟。加上需要medium或large资源类的编译任务,免费额度形同虚设。

CloudBees (Jenkins企业版) — 企业定价

CloudBees不公开定价,但行业估算年费在$20,000-$100,000+之间,取决于用户数和功能模块。它提供的价值在于托管式Jenkins体验、企业级安全合规、技术支持。对于有专职团队的大公司可能合理,但对中小团队来说性价比极低。

成本对比

方案 月费(10人团队) 年费 构建分钟数 并发限制
CircleCI免费版 $0 $0 6000分钟 有限
CircleCI Performance $15-50 $180-600 25000分钟 无限制
CloudBees 企业定价 $20K+ 无限制 无限制
Drone CI自托管 $5(服务器) $60 无限制 无限制
Woodpecker自托管 $5(服务器) $60 无限制 无限制
Jenkins自托管 $10-20(服务器) $120-240 无限制 无限制

自托管方案用一台廉价VPS就能获得无限构建时间和并发,成本固定且可控。

免费替代方案详细介绍

1. Drone CI — Docker原生的CI/CD

Drone CI是最早的Docker原生CI/CD平台之一,每个构建步骤都在独立的Docker容器中运行,天然隔离,无需担心环境污染。YAML配置简洁直观,插件生态丰富(超过200个官方插件)。支持、GitLab、Gitea、Bitbucket等主流代码托管平台。

注意:Drone已被Harness收购,主仓库进入维护模式,但仍有社区维护的活跃分支。新项目建议优先考虑Woodpecker CI。

适合场景:已有的Drone CI用户、喜欢Docker原生方案的团队。

2. Woodpecker CI — 社区驱动的未来

Woodpecker CI最初是Drone CI的社区分叉,在Harness收购Drone后成为社区维护的主要项目。它继承了Drone的简洁设计理念,同时积极开发新功能:多管道支持、全局环境变量、可复用的官方插件库。+Docker技术栈,部署轻量,运行稳定。

适合场景:新项目首选、注重社区可持续性的团队。

3. Jenkins — 经典永不过时

Jenkins是CI/CD领域的老兵,拥有最丰富的插件生态(超过1800个插件)。它几乎能对接任何工具链、任何语言、任何部署目标。Pipeline as Code通过Jenkinsfile定义构建流程,Blue Ocean插件提供现代化UI。

缺点是资源消耗较大,Java运行时需要至少1-2GB内存。插件质量参差不齐,版本兼容性问题时有发生。

适合场景:复杂的多语言项目、需要大量第三方集成、有Java运维经验的团队。

4. GitLab CI — 一体化方案

如果你已经在使用GitLab CE作为代码托管平台,GitLab CI是最自然的选择——零额外部署成本。使用.gitlab-ci.yml配置,Runner可以部署在任何机器上(包括本地机器)。功能完整,与GitLab平台深度集成。

适合场景:已使用GitLab的团队、不想额外维护CI/CD服务。

功能对比表

功能 Drone CI Woodpecker CI Jenkins GitLab CI
内存需求 ~100MB ~100MB 1-2GB 随GitLab
安装难度 简单 简单 中等 零(GitLab内置)
配置方式 YAML YAML Groovy/Jenkinsfile YAML
Docker原生 插件支持 Shell/Docker
插件生态 200+ 中等 1800+ 集成
并行构建 支持 支持 支持 支持
矩阵构建 支持 支持 支持 支持
自动扩缩Runner 插件 插件 插件 插件
多平台对接 GitHub/GitLab/Gitea GitHub/GitLab/Gitea/Forgejo 几乎所有 GitLab
Web UI 一般(Blue Ocean改善)

安装部署实战

方案一:Woodpecker CI(推荐首选)

Woodpecker CI的部署极其简单,Docker Compose几行配置搞定。

服务器端安装:

mkdir -p /opt/woodpecker

编写docker-compose.yml配置文件。Woodpecker Server需要配置OAuth应用(以Gitea为例):先在Gitea管理后台创建一个新的OAuth2应用,获取Client ID和Client Secret。然后在docker-compose.yml中配置环境变量,包括Gitea地址、OAuth凭证、管理员账号等。Server端映射8000端口。

端负责实际执行构建任务,可以和Server部署在同一台机器上,也可以部署在不同的机器上实现分布式构建。Agent需要配置Server地址和共享密钥。

cd /opt/woodpecker && docker compose up -d

首次访问Web界面时,会跳转到Gitea进行OAuth授权。授权后即完成配置。

Runner配置:Woodpecker支持Docker Runner和Local Runner两种模式。Docker Runner在Docker容器中执行每个步骤,天然隔离;Local Runner直接在宿主机执行,适合需要特殊环境的场景。

方案二:Drone CI

部署方式与Woodpecker类似。以Gitea集成的Drone CI为例:

mkdir -p /opt/drone

编写docker-compose.yml。Drone Server配置Gitea地址、OAuth凭证、共享密钥。Drone Runner配置Server地址和密钥。同样需要在Gitea中创建OAuth应用。

cd /opt/drone && docker compose up -d

Drone的Web界面设计简洁,构建状态一目了然。

方案三:Jenkins

推荐使用官方Docker镜像,避免Java环境配置的麻烦:

mkdir -p /opt/jenkins_home
docker run -d --name jenkins \
  -p 8080:8080 -p 50000:50000 \
  -v /opt/jenkins_home:/var/jenkins_home \
  jenkins/jenkins:lts

首次启动后访问Web界面,输入初始管理员密码(从日志或文件中获取),安装推荐插件,创建管理员账户。整个过程有Web向导引导。

安装常用插件:Git、Pipeline、Blue Ocean、Docker Pipeline、Credentials Binding。

使用示例

Woodpecker CI Pipeline配置

在项目根目录创建 .woodpecker.yml:

pipeline:
  build:
    : golang:1.22
    commands:
      - go mod download
      - go build ./...
      - go test ./...

  lint:
    image: golangci/golangci-lint:latest
    commands:
      - golangci-lint run

  docker:
    image: plugins/docker
    settings:
      repo: your-registry.com/myapp
      tag: latest
      registry: your-registry.com
    when:
      branch: main
      event: push

配置含义:push或PR触发时,三个步骤并行执行——Go构建测试、代码Lint检查、main分支推送时构建Docker镜像。每个步骤在独立的Docker容器中运行,互不干扰。

Drone CI Pipeline配置

创建 .drone.yml:

kind: pipeline
type: docker
name: build-test-deploy

steps:
  - name: test
    image: golang:1.22
    commands:
      - go test ./...

  - name: build
    image: golang:1.22
    commands:
      - CGO_ENABLED=0 go build -o app .
    when:
      branch: main

  - name: deploy
    image: appleboy/drone-
    settings:
      host:
        from_secret: deploy_host
      username: deploy
      key:
        from_secret: ssh_key
      script:
        - docker pull myapp:latest
        - docker compose up -d
    when:
      branch: main
      event: push

这个配置展示了完整的CI/CD流程:测试、构建、通过SSH部署到生产服务器。敏感信息通过Drone的Secret管理,不会暴露在配置文件中。

Jenkins Pipeline配置

创建 Jenkinsfile:

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh 'go mod download'
                sh 'go build ./...'
            }
        }
        stage('Test') {
            steps {
                sh 'go test ./... -v'
            }
        }
        stage('Deploy') {
            when {
                branch 'main'
            }
            steps {
                sh 'docker build -t myapp .'
                sh 'docker push registry/myapp'
            }
        }
    }
    post {
        always {
            cleanWs()
        }
    }
}

与Gitea/Forgejo集成

Woodpecker CI和Drone CI都原生支持Gitea和Forgejo作为代码源。配置方法:在代码托管平台中创建OAuth应用,将凭证填入CI/CD平台的环境变量。之后在仓库设置中启用CI功能,CI/CD平台会自动监听webhook事件,当代码推送或PR创建时自动触发构建。

这种自托管Git服务加自托管CI/CD的组合,构成了完全自主可控的开发基础设施,零外部依赖。

迁移实战:从CircleCI迁移

如果你已有CircleCI配置,迁移到Woodpecker或Drone相当直接:

步骤1: 分析现有的 .circleci/config.yml,识别所有jobs、steps和orbs。

步骤2: 将CircleCI的executor映射为Docker image,将steps映射为pipeline steps。CircleCI的orbs通常有对应的Docker镜像替代。

步骤3: CircleCI的环境变量和Contexts需要在新平台中重新配置为Secrets。Woodpecker和Drone都支持通过Web UI或管理Secrets。

步骤4: CircleCI的缓存机制可以用Docker volume或构建工具的本地缓存替代。对于Go项目,使用 go mod download 的缓存层;对于Node项目,挂载node_modules目录。

步骤5: 逐步迁移,先在新平台跑非关键项目的CI,验证稳定后再迁移核心项目。

高级配置

自托管Runner实现分布式构建

Woodpecker和Drone都支持多Agent部署。将Agent部署在不同机器上,可以分散构建负载,提高并发能力。对于需要特定环境(如GPU编译、ARM架构构建)的项目,可以在对应机器上部署专用Agent。

自动扩缩容

结合Terraform或Ansible,可以实现Runner的自动扩缩容:当构建队列积压时自动启动新的构建机器,空闲时自动销毁。这对按需付费的云服务器尤其经济。

构建缓存优化

使用Docker registry作为缓存层,或者挂载NFS/共享存储作为构建缓存目录。Woodpecker支持通过插件实现S3缓存,Drone有专门的缓存插件。

结论

对于大多数中小团队,Woodpecker CI是当前最佳的开源CI/CD选择:轻量、现代、社区活跃、与自托管Git服务完美配合。如果你已经在用Drone CI,迁移到Woodpecker几乎零成本。

Jenkins适合需要大量第三方集成的复杂环境,但维护成本较高。GitLab CI适合已使用GitLab的团队,零额外部署。

关键建议:不要被 CI/CD平台的便利性迷惑。自托管CI/CD的初始配置只需30分钟,之后每年省下的费用足以覆盖服务器成本的数十倍。更重要的是,你拿回了对自己构建流程的完全控制权。

常见问题

CI/CD为什么这么贵?

>CI/CD为什么这么贵?CircleCI的免费tier看起来很美好——每月6000分钟构建时间,但一旦你的项目规模上来,这个数字很快就不够用了。付费版从$15/月起步,实际使用中,一个中等活跃的10人团队很容易每月消耗50000+分钟,账单轻松突破$100/月。CloudBees(Jenkins企业版)更是按企业定价,年费动辄上万美元。 更隐蔽的成本是vendor lock-in。你在CircleCI上精心编写的配置、构建缓存、环境变量,一旦要迁移,几乎要从头来过。自托管CI/CD方案不仅能省下真金白银,还能让你完全掌控构建环境和数据。

评论