在 CI 构建管道期间临时更新 appsettings.json 文件
Updating appsettings.json file during CI build pipeline temporarily
我有一个在 Azure DevOps CI 管道中构建的 .NET Core 应用程序。在 CI 期间,我还使用 dotnet ef migrations script
命令从 EF 迁移生成 sql 脚本,然后在 CD 管道期间 运行。当我过去将连接字符串存储在 appsettings.json
文件中时,一切都很好。但情况已不再如此,现在我对本地使用用户机密,对部署版本使用 Azure AppService 应用程序设置。这意味着 CI 管道一旦尝试 运行 dotnet
命令就会失败,因为连接字符串将为空。我做了研究,看看是否可以将连接字符串动态添加到 dotnet command on the run but that is not an option (just yet, but looks like dev team has plans for it). I came up with idea of transforming the appsettings.json file during CI. Basically i store the connection string under variables and inject it to appsettings.json file by using File Transform 任务。但问题是此任务将更新并保存文件,这意味着在发布期间它将拥有更新后的文件。但我想要的是暂时转换文件,这样我就可以毫无问题地执行 运行 dotnet 命令,也不会部署其中包含连接字符串的 json 文件。知道我该如何实现吗?
文件转换任务仅适用于变量。因此我最终使用了 Magic Chunk 任务 2 次。一项任务是转换 appsettings.json 以便在生成 sql 脚本之前它具有连接字符串。第二个任务再次进行反向转换 appsettings.json,以便在生成迁移 sql 脚本后连接字符串将为空字符串。
我有一个在 Azure DevOps CI 管道中构建的 .NET Core 应用程序。在 CI 期间,我还使用 dotnet ef migrations script
命令从 EF 迁移生成 sql 脚本,然后在 CD 管道期间 运行。当我过去将连接字符串存储在 appsettings.json
文件中时,一切都很好。但情况已不再如此,现在我对本地使用用户机密,对部署版本使用 Azure AppService 应用程序设置。这意味着 CI 管道一旦尝试 运行 dotnet
命令就会失败,因为连接字符串将为空。我做了研究,看看是否可以将连接字符串动态添加到 dotnet command on the run but that is not an option (just yet, but looks like dev team has plans for it). I came up with idea of transforming the appsettings.json file during CI. Basically i store the connection string under variables and inject it to appsettings.json file by using File Transform 任务。但问题是此任务将更新并保存文件,这意味着在发布期间它将拥有更新后的文件。但我想要的是暂时转换文件,这样我就可以毫无问题地执行 运行 dotnet 命令,也不会部署其中包含连接字符串的 json 文件。知道我该如何实现吗?
文件转换任务仅适用于变量。因此我最终使用了 Magic Chunk 任务 2 次。一项任务是转换 appsettings.json 以便在生成 sql 脚本之前它具有连接字符串。第二个任务再次进行反向转换 appsettings.json,以便在生成迁移 sql 脚本后连接字符串将为空字符串。