CI/CD
更新: 2026-10-16 16:05:01 字数: 0 字 时长: 0 分钟
Aspire 的设计让 CI/CD 变得简单:流水线只需要跑 aspire publish(或 aspire deploy),产物由 AppHost 的应用模型生成,无需在流水线里重复维护部署脚本。
流水线的基本形态
text
检出代码 → 还原依赖 → 构建 → 测试 → aspire publish → 部署产物| 阶段 | 命令 |
|---|---|
| 构建 | dotnet build / dotnet restore |
| 测试 | dotnet test |
| 生成产物 | aspire publish |
| 部署 | aspire deploy 或交给既有部署流程 |
| 拆环境 | aspire destroy |
先 publish,再决定怎么部署
aspire publish 只生成产物,不触碰环境。把这一步放进 CI 的构建阶段,可以让「这次上线会生成什么」成为可审查的产物。
非交互模式
CI 中必须避免任何交互式提示:
bash
aspire publish --non-interactive --log-level Information参数没给全会让流水线卡住
如果某个 AddParameter(name, secret: true) 没有值,Aspire 会尝试提示输入。CI 中请提前通过环境变量或机密存储注入:
bash
Parameters__api-key=${{ secrets.API_KEY }}容器运行时
Aspire 测试与发布常常需要容器运行时:
- 测试阶段:
dotnet test会启动容器化资源。 - 发布阶段:构建镜像需要使用容器运行时。
在 CI Runner 上请确保运行时可用,必要时显式指定:
bash
ASPIRE_CONTAINER_RUNTIME=podman aspire deployLinux Runner 上的 Podman
Aspire 要求 Podman 5.0.0 或更高版本。部分发行版(例如 Ubuntu 24.04)自带的是 4.9.x,会被 aspire doctor 标记为不可用。请在流水线中安装 Podman 5+,或改用 Docker。
GitHub Actions 示例
yaml
name: build-and-deploy
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-dotnet@v4
with:
dotnet-version: '9.0.x'
- name: Install Aspire CLI
run: dotnet tool install -g Aspire.Cli
- name: Doctor
run: aspire doctor
- name: Publish artifacts
run: aspire publish --non-interactive
env:
Parameters__api-key: ${{ secrets.API_KEY }}
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: aspire-output
path: aspire-output部署阶段可以按目标平台选择:
yaml
- name: Deploy
run: aspire deploy --non-interactiveyaml
- name: Deploy
run: |
helm upgrade --install my-app ./aspire-output/chart \
--namespace my-app --create-namespace \
-f values.prod.yamlyaml
- name: Azure login
uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Deploy
run: aspire deploy --non-interactive机密管理
| 做法 | 评价 |
|---|---|
写进 appsettings.json | 会进入版本库。 |
| 流水线机密 + 环境变量注入 | 推荐。 |
| 部署平台的机密存储(Key Vault 等) | 推荐,尤其是托管标识场景。 |
AppHost 侧统一使用外部参数的写法:
csharp
var apiKey = builder.AddParameter("api-key", secret: true);
builder.AddProject<Projects.Api>("api")
.WithEnvironment("API_KEY", apiKey);详见外部参数与机密。
加速重复发布
Aspire 会缓存上次发布 / 部署的状态,跳过未变化的步骤。因此:
- 只改了某个服务的代码时,其余服务的镜像不会重复构建。
- 在 CI 中请缓存工作目录(例如
~/.aspire)以复用状态。
缓存与可复现性
状态缓存提升速度,但排查「为什么这次产物不一样」时可能造成干扰。必要时可以清空缓存重新发布:
bash
aspire cache clear失败排查
发布产物与预期不符
- 本地执行
aspire publish对比产物。 - 确认 CI 中的环境变量(尤其是
Parameters__*)是否正确注入。 - 确认 CI 使用的 Aspire CLI 版本与本地一致(在流水线里打印
aspire --version)。
测试在 CI 上失败、本地通过
顺序通常是:
- 容器运行时不可用或版本不足 → 先跑
aspire doctor。 - 资源启动慢导致超时 → 调大等待超时。
- 端口或网络策略差异 → 确认未在测试中硬编码端口。





