部署状态缓存

aspire deploy 命令通过本地存储在计算机上的缓存配置文件来管理部署状态。 此缓存机制通过保留预配设置和参数来简化重复部署,使后续部署更快、更高效。

默认行为

aspire deploy 命令根据应用程序和目标环境是否存在缓存的配置自动管理部署状态。

首次部署

首次运行aspire deploy或首次在目标--environment中运行时,命令:

  1. 提示预配信息(订阅 ID、资源组名称、位置)。
  2. 提示输入部署参数(例如 API 密钥、连接字符串)。
  3. 启动部署过程。
  4. 将所有提示的值和部署状态保存到 ~/.aspire/deployments/{AppHostSha}/production.json

后续部署

在随后的 aspire deploy 执行过程中,该命令:

  1. 检测 ~/.aspire/deployments/{AppHostSha}/production.json的现有部署状态文件。
  2. 通知你将从缓存文件中读取设置。
  3. 提示要求确认加载已缓存的设置。
  4. 将缓存文件中的配置加载到配置提供程序中。
  5. 使用缓存值继续部署(无重新提示)。

特定于环境的部署

不同的部署环境(例如开发、过渡和生产)通常需要不同的配置、资源名称和连接字符串。 该 aspire deploy 命令支持特定于环境的部署,确保每个环境都保持隔离的部署状态。

指定环境

使用 --environment 标志部署到不同的环境:

aspire deploy --environment staging

首先部署到特定环境:

  • 提示输入所有预配和参数信息。
  • 将部署状态保存到 ~/.aspire/deployments/{AppHostSha}/{environment}.json (例如 ,staging.json)。

后续部署:

  • 读取特定于环境的缓存文件。
  • 从缓存状态加载配置。
  • 使用缓存的值而不提示。

环境变量支持

也可以使用环境变量指定 DOTNET_ENVIRONMENT 部署环境:

export DOTNET_ENVIRONMENT=staging && aspire deploy

这与使用 --environment 标志的行为完全相同,加载相应的缓存配置文件。

缓存管理

aspire deploy 命令提供用于管理缓存部署状态的机制,让你能够控制何时使用缓存的值以及何时开始全新。

清除缓存

使用 --clear-cache 标志重置部署状态:

aspire deploy --clear-cache

行为:

  1. 在删除指定环境的缓存之前,提示确认。
  2. 删除特定于环境的部署状态文件(例如 ~/.aspire/deployments/{AppHostSha}/production.json)。
  3. 提示所有预配和参数信息,就像首次部署一样。
  4. 继续进行部署。
  5. 不保存提示的值 以缓存。

特定于环境的缓存清除

--clear-cache 标志符合环境上下文:

aspire deploy --environment staging --clear-cache

这样只会清除 staging.json 缓存文件,同时将其他环境缓存(如 production.json)保持不变。

文件存储位置

  • 路径模式:~/.aspire/deployments/{AppHostSha}/{environment}.json
  • 默认环境:production
  • AppHostSha: 表示应用程序主机配置的哈希值,确保部署状态特定于每个应用程序配置。

在 CI/CD 管道中使用部署状态

在持续集成和部署(CI/CD)管道中使用 aspire deploy 命令时,可能需要跨管道运行保留部署状态。 此方法可用于维护一致的部署配置,而无需手动干预。

GitHub 动作示例

以下示例演示如何在 Actions 工作流中使用actions/cache缓存部署状态的GitHub操作:

name: Deploy to Azure

on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    
    - name: Cache Aspire deployment state
      uses: actions/cache@v4
      with:
        path: ~/.aspire/deployments
        key: aspire-deploy-${{ hashFiles('**/AppHost.csproj') }}-${{ github.ref }}
        restore-keys: |
          aspire-deploy-${{ hashFiles('**/AppHost.csproj') }}-
          aspire-deploy-
    
    - name: Deploy with Aspire CLI
      run: aspire deploy --environment production
      env:
        AZURE_CREDENTIALS: ${{ secrets.AZURE_CREDENTIALS }}

此工作流使用 AppHost 项目文件哈希和分支引用作为缓存键来缓存 ~/.aspire/deployments 目录。 该 actions/cache 作会在部署步骤之前自动还原缓存,并在作业完成后将任何更新保存到缓存。 后续工作流运行还原缓存的部署状态,从而允许自动部署,而无需重新提示配置值。

注意

在 CI/CD 管道中缓存部署状态时,请确保管道具有适当的访问控制和机密管理做法,因为缓存状态可能包含敏感的配置值。

安全注意事项

部署状态文件存储在 ~/.aspire/deployments 目录中的本地计算机上。 这些文件包含预配设置和参数值,包括可能与参数资源关联的机密。 该 aspire deploy 命令遵循与“用户机密管理器”相同的安全模式 .NET:

  • 文件存储在源代码外部,以缓解版本控制中意外的机密泄漏。
  • 机密以纯文本形式存储在本地文件系统中。
  • 在用户帐户下运行的任何进程都可以访问这些文件。

请考虑以下安全最佳做法:

  • 确保本地计算机已采取适当的安全措施。
  • 在从 ~/.aspire/deployments 目录共享或备份文件时要小心。
  • 需要更改敏感参数值时,请使用--clear-cache标记。

要点

  • 每个环境都维护自己的独立部署状态。
  • 除非明确清除,否则缓存的值会在部署过程中持续存在。
  • --clear-cache 标志执行一次性部署而不保留新值。
  • 可以通过标志或环境变量指定环境选择。
  • 加载缓存的设置时,系统会提示你进行确认。
  • 缓存文件按应用程序(通过 AppHostSha)和每个环境存储。

另请参阅