Concourse 8.3.1 介绍与选型指南
介绍 Concourse 8.3.1:流水线式 CI/CD 系统的 ATC/TSA/Worker 架构、声明式流水线与资源模型、官方快速开始路径、适用场景与 Jenkins/GitLab CI/Drone/Woodpecker 量化对比与选型建议。
Concourse 8.3.1 介绍与选型指南
本文为 A1 认知篇(软件介绍与选型指南),全部信息来自官方公开资料溯源(官方文档站点 concourse-ci.org、GitHub 官方仓库发行记录、shields.io 徽章接口),不含本地安装与实测数据。文末附官方来源清单。
一、环境信息
| 项目 | 值 | 来源与查询日期 |
|---|---|---|
| 软件名称 | Concourse(Concourse CI) | 官方站点 concourse-ci.org,2026-10-20 查询 |
| 当前最新稳定版 | 8.3.1 | GitHub 官方仓库 releases.atom(v8.3.1 发布于 2026-10-02),2026-10-20 查询 |
| 开发语言 | Go | GitHub 官方仓库 concourse/concourse,2026-10-20 查询 |
| 开源许可证 | Apache License 2.0 | GitHub 官方仓库 License 标识,2026-10-20 查询 |
| GitHub Stars | 7.9k | shields.io 徽章接口 img.shields.io/github/stars/concourse/concourse.json,2026-10-20 查询 |
| 官方站点 | https://concourse-ci.org | 2026-10-20 查询 |
| 源码仓库 | https://github.com/concourse/concourse | 2026-10-20 查询 |
| 官方文档 | https://concourse-ci.org/docs/ | 2026-10-20 查询 |
GitHub Stars 实时徽章(数值随时间变化,以徽章实时渲染为准):
💡 版本说明:Concourse 自 7.x 系列后进入 8.x 系列,8.3.1 为当前 8.x 稳定线最新补丁版本(2026-10-02 发布)。官方 Download 页与 GitHub Releases 均以
v主版本.次版本.补丁形式发布,选用时应避开rc(候选版)与alpha(内测版)后缀。
二、软件概述
Concourse 是一个开源的流水线式持续集成/持续交付(CI/CD)系统,使用 Go 语言编写,采用"流水线即代码"的声明式理念:所有构建逻辑以 YAML 文件描述,纳入版本管理,任何一次交付过程都能被完整追溯与复现。
Concourse 的设计哲学可以概括为三点:
- 重新运行一切(Rerun Everything):流水线中的每个作业都在一次性隔离执行环境中运行,不依赖上次运行留下的任何状态。环境干净、结果可信,问题排查不再受"上次构建残留"干扰。
- 声明式配置:流水线、资源、作业、任务全部由 YAML 声明,没有隐藏的服务端状态。流水线文件即唯一事实来源,
fly set-pipeline之后的差异一目了然。 - 资源驱动(Resource-driven):一切触发与产物都抽象为"资源(Resource)"——Git 仓库、制品仓库、时间表、S3 对象等。资源由系统持续检查新版本,检测到新版本即触发下游作业,形成"检查 → 触发 → 执行 → 产出"的自动化闭环。
Concourse 由 Pivotal(现 VMware Tanzu)团队于 2014 年前后发起,长期服务于大规模软件交付场景,2024 年起由独立的 Concourse 社区维护(concourse/concourse 开源仓库,Apache-2.0 许可证)。
三、核心架构
Concourse 采用典型的"Web 节点 + Worker 节点 + 数据库"三层结构。各组件职责如下:
┌─────────────────────────── Web 节点 ───────────────────────────┐
│ │
│ ┌───────────┐ ┌───────────┐ ┌───────────────────┐ │
│ │ ATC │◄────►│ TSA │ │ PostgreSQL │ │
│ │ API/调度 │ 注册 │ SSH 网关 │ │ 唯一持久化存储 │ │
│ └─────┬─────┘ 通道 └─────┬─────┘ └─────────▲─────────┘ │
│ │ │ │ │
└─────────┼──────────────────┼──────────────────────┼────────────┘
│ HTTP(S) │ SSH(2222) │ SQL
│ │ │
┌──────▼──────┐ ┌──────▼──────────────────────┴───────────┐
│ fly CLI │ │ Worker 节点 │
│ 用户终端 │ │ ┌──────────────┐ ┌─────────────────┐ │
└─────────────┘ │ │ 运行时引擎 │ │ Baggageclaim │ │
│ │ (containerd/ │ │ 卷管理服务 │ │
│ │ guardian) │ │ (输入/输出/缓存)│ │
│ └──────────────┘ └─────────────────┘ │
└─────────────────────────────────────────┘
3.1 Web 节点:ATC + TSA
- ATC(Air Traffic Control):Web 节点的核心进程,承担全部职责——提供 Web UI 与 REST API、解析并保存流水线配置、调度作业构建、驱动资源检查器(Resource Checker)周期性检测新版本、管理团队与权限。默认监听 8080 端口。
- TSA(worker 注册网关):基于 SSH 的 worker 注册与命令转发通道。Worker 通过 TSA 完成身份认证(RSA 密钥对)后保持长连接,ATC 借助 TSA 向 Worker 下发"启动检查/构建"等指令。默认监听 2222 端口。
Web 节点无状态,所有持久化数据(流水线配置、构建历史、资源版本、用户与团队)都保存在 PostgreSQL 中,因此 Web 节点可以水平扩展为多实例(配合共享 PostgreSQL)。
3.2 Worker 节点:运行时引擎 + Baggageclaim
- 运行时引擎:在一次性隔离执行环境中运行任务。8.x 版本支持两种运行时:
containerd(当前默认推荐,基于 containerd + runc + CNI 网络)与guardian(原 Garden,Cloudfoundry 血统)。每个任务的输入、脚本执行、输出都在独立的隔离环境中完成,任务结束即销毁。 - Baggageclaim:Worker 上的卷管理服务,负责管理"资源卷"(版本缓存)、"输入卷"(任务输入)与"输出卷"(任务产物)。支持
overlay等驱动,卷可在 Worker 间迁移(cache streamed volumes 特性),是构建缓存与产物传递的基础。 - beacon:Worker 内通过 TSA 建立的反向连接通道,负责心跳注册与命令转发。
3.3 fly CLI
fly 是 Concourse 唯一官方命令行工具(Go 编写,单二进制),几乎所有管理操作都通过 fly 完成:登录、设置流水线、触发构建、查看与下载产物、进入执行环境排障等。fly 可直接从 Concourse Web 节点下载(/api/v1/cli 端点或 Web UI 的 download-fly 页面),保证 CLI 与服务端版本一致。
3.4 核心概念速览
| 概念 | 说明 |
|---|---|
| Pipeline(流水线) | 作业与资源的编排图,YAML 声明,可设置暂停/公开等状态 |
| Resource(资源) | 版本化的外部实体:Git 仓库、制品仓库、时间表、S3 对象等,由 check 脚本检测版本、get 拉取、put 发布 |
| Job(作业) | 由 build plan 构成的执行单元,可手动触发或被资源新版本/上游作业自动触发 |
| Task(任务) | 计划中的最小执行单元,声明平台、运行环境来源、输入与执行命令 |
| Plan(构建计划) | 作业内部步骤的组合(task、get、put、try、in_parallel、aggregate 等) |
| Team(团队) | 多租户隔离单元,拥有独立流水线与成员权限,main 团队随集群初始化创建 |
四、功能特性
- 声明式流水线即代码:单一 YAML 描述完整交付流程,
fly set-pipeline时以 diff 形式展示变更,配合 Git 审计流水线演进史。 - 资源抽象与自动触发:内置
git、registry-image、s3、time、docker-image、semver等常用资源类型;任何实现 check/get/put 协议的自定义脚本均可注册为新资源类型,生态扩展成本极低。 - 一次性隔离执行环境:任务默认在干净环境中运行,基于 containerd/guardian 运行时与独立网络命名空间,杜绝环境污染类"玄学故障"。
- 多团队与多种认证方式:本地账号(
CONCOURSE_ADD_LOCAL_USER)开箱即用;同时支持 GitHub、GitLab、Gitea、Bitbucket Cloud、LDAP、OIDC、SAML、OAuth、Cloud Foundry UAA 等企业级身份源。 - 凭据管理体系:流水线中的
((var))占位符由凭据管理器在运行时解析,支持 Vault、CredHub、Kubernetes Secrets、AWS SSM/Secrets Manager、Conjur 等后端,避免敏感信息进入 YAML。 - 构建可视化:Web UI 以有向图实时呈现流水线全貌,构建日志流式输出、逐任务着色;任何历史构建可一键重跑,输入版本精确定位。
- Worker 池与弹性伸缩:Worker 以标签(tag)分组,作业可指定运行池;Worker 掉线自动检测,可配合外部编排实现弹性伸缩。
- 单二进制分发:Concourse 全部组件(web/worker/quickstart)与 fly CLI 均为单一 Go 二进制,部署形态简单,官方同时提供 Docker Compose、systemd、BOSH、Helm Chart 等多种安装路径。
五、快速开始(最小可用示例概要)
以下为官方 Quick Start 的最小可用路径(纯官方文档溯源,详见 官方 Quick Start 文档):
第 1 步:一键启动单机集群。 官方提供 quickstart 模式(web + worker 同节点):
curl -O https://concourse-ci.org/docker-compose.yml
docker compose up -d
官方文档说明:服务将在 localhost:8080 就绪,默认本地账号 test/test。
第 2 步:安装 fly CLI。 从 Web 节点直接下载(v7.14.0 起提供 http://localhost:8080/download-fly 页面;也可使用 API 端点):
curl 'http://localhost:8080/api/v1/cli?arch=amd64&platform=linux' -o fly
chmod +x ./fly && mv ./fly /usr/local/bin/
第 3 步:登录并设置第一条流水线。 编写最简 YAML(一个 job 包含一个 task):
jobs:
- name: hello-world
plan:
- task: say-hello
config:
platform: linux
image_resource:
type: registry-image
source: {repository: busybox}
run:
path: echo
args: ["hello world"]
fly -t tutorial login -c http://localhost:8080 -u test -p test
fly -t tutorial set-pipeline -p hello-world -c pipeline.yml
fly -t tutorial unpause-pipeline -p hello-world
fly -t tutorial trigger-job -j hello-world/hello-world --watch
执行后可看到构建初始化、拉取 busybox 运行环境、输出 hello world 并标记 succeeded 的完整过程,浏览器访问 http://localhost:8080 可见流水线拓扑图与实时构建日志。
六、适用场景与限制
6.1 适用场景
- 对交付可重复性要求高的团队:交付链路要求"每次构建完全一致、可完整追溯",Concourse 的一次性执行环境与声明式配置是核心竞争力。
- 中大型平台的发布流水线:资源模型天然覆盖"检测变更 → 构建产物 → 部署验证"闭环,适合支撑 DevOps 平台底座。
- BOSH/Cloud Foundry/Tanzu 生态交付:Concourse 与该生态工具链同源,官方运维脚本与最佳实践沉淀充分。
- 需要强隔离的多租户 CI:团队模型 + Worker 池 + 隔离执行环境,适合一台集群服务多条业务线的场景。
6.2 限制与注意点
- 学习曲线偏陡:plan/step 组合式 YAML 语法与其他 CI 的线性脚本差异较大,团队需一定适应成本。
- 必须自建 Worker 与 PostgreSQL:官方不提供托管服务,数据库与 Worker 节点需自行规划容量与高可用。
- 插件生态以"资源类型"为主:与 Jenkins 上万级插件相比,Concourse 生态聚焦交付领域,通用 IDE/测试管理类扩展较少。
- 复杂工作流的 YAML 表达较冗长:高度动态或条件繁多的流程(如矩阵构建)在 plan 语法下略显笨重。
- 执行环境需要预置基础运行环境:任务运行环境来自制品仓库,首次运行需拉取基础文件系统,内网环境需自建制品仓库代理。
七、同类选型对比
与 Jenkins、GitLab CI、Drone、Woodpecker CI 的横向对比(星数取自 shields.io 徽章接口,查询日期 2026-10-20;其余条目以各项目官方文档为依据):
| 维度 | Concourse 8.3.1 | Jenkins | GitLab CI(CE) | Drone | Woodpecker CI |
|---|---|---|---|---|---|
| GitHub Stars(2026-10-20) | 7.9k | 27k | 25k(gitlabhq/gitlabhq) | 39k(harness/drone) | 8k |
| 开源许可证 | Apache-2.0 | MIT | MIT(CE 核心差异版) | Apache-2.0 | Apache-2.0 |
| 开发语言 | Go | Java | Ruby/Go | Go | Go |
| 配置方式 | 自有声明式 YAML(plan/step) | Jenkinsfile(Groovy DSL/声明式) | .gitlab-ci.yml | 自有 YAML(kind: pipeline) | 兼容 Drone 风格 YAML |
| 架构形态 | Web 节点 + Worker 节点 + PostgreSQL | 控制器 + Agent 插件体系 | 内嵌于 GitLab 单体 | Server + 可插拔 Runner | Server + Agent(可多 server) |
| 执行隔离 | 强(一次性隔离环境,内置 containerd/guardian) | 插件实现(Agent 上隔离策略不一) | Runner 隔离(docker/k8s/shell) | Docker 隔离执行 | Docker 隔离执行(可 local) |
| 代码托管耦合 | 无耦合(resource 抽象,任意 Git) | 无耦合(插件适配) | 与 GitLab 深度绑定 | GitHub/GitLab/Gitea/Bitbucket 等 | Gitea/GitHub/GitLab 等 |
| 触发模型 | 资源版本持续检查驱动 | Webhook/定时/手动 | CI/CD 关键字 + 规则 | Webhook + cron | Webhook + cron |
| 适合场景 | 交付流水线平台、强可重复性要求 | 传统企业异构构建、插件生态依赖 | 已用 GitLab 全家桶 | 轻量云原生 CI | 轻量自托管、Gitea 生态 |
选型建议:
- 已深度使用 GitLab:优先 GitLab CI,零额外组件成本。
- 需要海量现成插件、历史包袱重的异构环境:Jenkins 仍是事实标准。
- 追求轻量、配置贴近 GitHub Actions 风格:Drone 或 Woodpecker CI(后者是 Drone 0.8 社区分叉,发展活跃)。
- 把 CI/CD 当作"交付平台"而非"脚本运行器",强调每次构建干净、可复现、可视化追溯到版本级:Concourse 是最契合的选择。
八、参考链接
官方来源(本文数据溯源清单):
- Concourse 官方站点:https://concourse-ci.org
- Concourse 官方文档(概念/安装/参考):https://concourse-ci.org/docs/
- 官方 Quick Start:https://concourse-ci.org/docs/getting-started/quick-start/
- 官方 Docker Compose 安装指南:https://concourse-ci.org/docs/install/guides/docker-compose/
- 官方密钥生成说明:https://concourse-ci.org/docs/install/generating-keys/
- GitHub 官方仓库发行记录(releases.atom,v8.3.1,2026-10-02 发布):https://github.com/concourse/concourse/releases.atom
- GitHub 官方仓库:https://github.com/concourse/concourse
- shields.io GitHub Stars 徽章接口(2026-10-20 查询):https://img.shields.io/github/stars/concourse/concourse.json
本系列篇目(Concourse 实战系列):
- 《Concourse 8.3.1 介绍与选型指南》(本篇)
- 《Concourse 8.3.1 Docker Compose 部署指南》
- 《Concourse 8.3.1 配置参数详解》
- 《Concourse 8.3.1 常用 CLI 命令详解》