Skip to content

CI/CD ​

更新: 2026-10-16 15:20:09   字数: 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 deploy

Linux 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-interactive
yaml
- name: Deploy
  run: |
    helm upgrade --install my-app ./aspire-output/chart \
      --namespace my-app --create-namespace \
      -f values.prod.yaml
yaml
- 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

失败排查 ​

发布产物与预期不符
  1. 本地执行 aspire publish 对比产物。
  2. 确认 CI 中的环境变量(尤其是 Parameters__*)是否正确注入。
  3. 确认 CI 使用的 Aspire CLI 版本与本地一致(在流水线里打印 aspire --version)。
测试在 CI 上失败、本地通过

顺序通常是:

  1. 容器运行时不可用或版本不足 → 先跑 aspire doctor。
  2. 资源启动慢导致超时 → 调大等待超时。
  3. 端口或网络策略差异 → 确认未在测试中硬编码端口。

下一步 ​

你觉得这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度