Dagger:云原生 CI/CD 工作流 2026 版
Dagger 是 Write Once, Deploy Anywhere 的 CI/CD 框架。Docker 镜像化工作流。支持 Go、Python、Node。
- ⭐ 11000
- Go
- Python
- Docker
- Apache 2.0
- 更新于 2026-05-18
什么是 Dagger? #
Dagger 是 Write Once, Deploy Anywhere 的 CI/CD 框架。用 Go、Python、Node 编写工作流。Docker 镜像化,跨平台运行。
安装 #
CLI 安装 #
# macOS / Linux
curl -L https://dl.dagger.io/dagger/install.sh | sh
# 验证
dagger --version
SDK 安装 #
# Go
go install github.com/dagger/dagger/cmd/dagger@latest
# Python
pip install dagger
# Node
npm install @dagger/dagger
基本概念 #
Cacher(缓存) #
// Dagger 自动缓存步骤结果
// 相同输入,跳过实际执行
容器化 #
// 每个步骤运行在干净容器
// 无副作用,可重现
Python 示例 #
构建管道 #
# main.py
from dagger import Client, dag
async def main(client: Client):
# 构建步骤
src = client.host directory(".")
# 安装依赖
deps = src.directory("src").dockerfile()
# 运行测试
result = await deps
.container()
.exec(["python", "-m", "pytest"])
.stdout
return result
运行 #
dagger run
Go 示例 #
构建 CI #
// pipeline.go
func Main(ctx context.Context, client *dagger.Client) (*dagger.Container, error) {
// 获取源码
src := client.Host().Directory(".")
// 构建镜像
img, err := src.
Dockerfile("Dockerfile").
Build(ctx)
if err != nil {
return nil, err
}
// 推送
return img.Registry().Push(
ctx,
"docker.io/your/image",
nil,
)
}
Node.js 示例 #
测试流水线 #
// index.js
import { dag } from "@dagger/dagger"
await dag.host()
.directory(".")
.container()
.from("python:3.11")
.script("/install.sh")
.exec(["pytest", "tests/"])
.then(result => console.log(result.stdout))
CI/CD 管道 #
GitHub Actions #
# .github/workflows/ci.yml
name: CI
on: [push]
jobs:
ci:
runs-on: ubuntu-latest
container: daggerprom/dagger:minimal
steps:
- uses: actions/checkout@v3
- run: dagger run
env:
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
GitLab CI #
# .gitlab-ci.yml
dagger:
stage: test
image: daggerprom/dagger:minimal
script:
- dagger run
高级功能 #
并行执行 #
# 多个步骤并行
tasks = [
client.build_app(),
client.build_docs(),
client.run_tests(),
]
results = await asyncio.gather(*tasks)
条件分支 #
result, err := client.Host().
Directory(".").
Container().
From("alpine").
Exec([]string{"test", "-f", "config.yaml"}).
Sync(ctx)
// 根据结果决定下一步
if result.ExitCode == 0 {
// 配置文件存在
}
部署到 Cloud #
Dagger Cloud #
# 登录
dagger login
# 部署到 Dagger Cloud
dagger deploy --environment production
连接凭证 #
# 添加 Docker Hub
dagger cloud registry login -u username -p password
# 添加 GitHub
dagger cloud provider add github --token $GITHUB_TOKEN
性能优化 #
缓存策略 #
# 显式控制缓存
result = await container \
.file("output.txt") \
.id() \
.if_changed() # 基于文件 ID 缓存
矩阵构建 #
# 多平台构建
matrix:
platform: [linux/amd64, linux/arm64]
常见问题 #
Q: Dagger 的 CI 与 GitHub Actions 哪个更好?
答:Dagger 用代码定义,更灵活。GitHub Actions 用 YAML,配置化。两者可组合。
Q: 如何调试 Dagger 管道?
答:dagger deploy --debug,或本地 dagger run --verbose.
Q: 支持 Secret 管理吗?
答:支持。Dagger Cloud 提供 Secret 管理,CI/CD 可注入。
总结 #
Dagger 把「CI/CD 工作流」变成可读、可复用的代码。Write Once, Deploy Anywhere。
参考:dagger.io 文档 更新:2026-05-18
💬 留言讨论