Skip to content
返回部署

使用 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 以在退出前排空进行中的请求

常见问题解答