首页 > 解决方案 > 在部署期间替换 Service Fabric 应用程序参数

问题描述

我正在设置我的生产环境并希望保护我的环境相关变量。目前,每个环境都有自己的应用程序参数文件,效果很好,但我不希望我团队中的每个开发人员都知道生产连接字符串和其他可能出现在其中的敏感内容。

所以我正在寻找所有可用的可能性。我已经看到,在我目前用于 CI/CD 的 Azure DevOps 中,存在一些可能的变量替换(xml 转换)。它可以在 SF 项目中使用吗?我在另一个项目中通过 Octopus 看到过类似的东西。是否有任何其他工具可以帮助我安全地(轻松地)按环境管理我的变量?我最终可以用我的 KeyVault 做到这一点吗?有什么建议吗?谢谢

编辑:我想如何管理这些价值观的一个例子;这是章鱼的截图: 在此处输入图像描述

所以与此类似的分离和注入值的东西就是我正在寻找的东西。

标签: azuresecuritydeploymentazure-service-fabric

解决方案


您可以在部署之前对 ApplicationParameter 文件进行 XML 转换以更新其中的值。

另一个选项是使用 Powershell 更新应用程序并将参数作为参数传递给脚本。

Start-ServiceFabricApplicationUpgrade命令接受带有参数的哈希表作为参数,从技术上讲,VSTS\DevOps 中的内置任务将应用程序参数转换为哈希表,脚本如下所示:

#Get the existing parameters
$app = Get-ServiceFabricApplication -ApplicationName "fabric:/AzureFilesVolumePlugin"

#Create a temp hashtable and populate with existing values
$parameters = @{ } 
$app.ApplicationParameters | ForEach-Object { $parameters.Add($_.Name, $_.Value) }

#Replace the desired parameters
$parameters["test"] = "123test" #Here you would replace with your variable, like  $env:username 

#Upgrade the application
Start-ServiceFabricApplicationUpgrade -ApplicationName "fabric:/AzureFilesVolumePlugin" -ApplicationParameter $parameters -ApplicationTypeVersion "6.4.617.9590" -UnmonitoredAuto

请记住,现有的 VSTS 任务还有其他操作,例如将包复制到 SF 并在映像存储中注册应用程序版本,您需要复制它。您可以从服务结构项目的文件中复制完整的脚本,Deploy-FabricApplication.ps1并将其替换为您的更改。另一种方法是在此处获取 VSTS 任务的源代码并添加您的更改。

如果您计划使用 KeyVault,我建议应用程序直接访问 KeyVault 上的值,而不是将其传递给 SF,这样,您可以更改 KeyVault 中的值而无需重新部署应用程序。在部署中,您只需传递 KeyVault 凭据\配置。


推荐阅读