使用 Dagger 部署
可编程 CI/CD 引擎,在容器中运行流水线,提供类型化 SDK。
CI/CD高级
为什么
Dagger 流水线是类型化代码(Go/Python/TS),在容器中运行 — 可移植、可测试、本地可复现。DORA 2024 DevOps 状态报告显示精英团队部署频率比低绩效团队高 973 倍。
带自动化测试的 CI/CD 管道将变更失败率降至 5-15%,而手动部署为 40-60%。
何时使用
希望 CI 流水线作为代码在本地和 CI 中一致运行的团队。贡献者少于 5 人的仓库避免复杂管道编排 — pre-commit 钩子 + GitHub Actions 足够。
除非需要 GPU 或 VPN 访问,否则跳过自托管 runner。
如何做
# Dagger Go SDK 管道
package main
import (
"context"
"dagger.io/dagger"
)
func main() {
ctx := context.Background()
client, _ := dagger.Connect(ctx)
defer client.Close()
src := client.Host().Directory(".")
builder := client.Container().
From("node:20").
WithMountedDirectory("/src", src).
WithWorkdir("/src").
WithExec([]string{"npm", "ci"}).
WithExec([]string{"npm", "run", "build"})
builder.Directory("/src/dist").Export(ctx, "./dist")
}
4. 验证部署 — curl -I https://your-app.example.com
5. 监控日志 — 前 5 分钟检查错误
6. 需要时回滚 — 回退到上一版本
示例
# 运行 Dagger 管道 本地ly
dagger call build --source=. export --path=./dist
# 运行 in GitHub Actions
- uses: dagger/dagger-for-github@v6
with:
call: build
args: --source=.
常见问题
- ⚠构建缓存冷 — 用 dagger cache volume
- ⚠Module 未找到 — 运行 dagger mod init
- ⚠环境间配置漂移 — 使用基础设施即代码(Terraform/Pulumi)保持 dev/staging/prod 一致
最佳实践
- ✓用 cache volume — 跨运行保持 npm/pip 缓存
- ✓Module 小而可组合 — 跨项目复用
- ✓设置健康检查和优雅关闭 — 处理 SIGTERM 以在退出前排空进行中的请求