在发布管道的第一阶段更改所有Web。*。config文件

时间:2020-03-04 12:21:16

标签: azure-devops azure-keyvault episerver

我需要在第一步中更改所有Web。*。config文件中appsettings中的项目。那就是我无法在发布管道的每个步骤中进行转换。原因是我使用Episerver DXC / DXP。

我有4个阶段; “上传软件包”,“集成”,“预生产” “生产”

这些值存储在Azure Key Vault中。

有什么聪明的方法可以做到这一点吗?

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

如果File transformation不适合您的项目,那么使用 powershell 脚本更改项目该怎么办?

示例:

这是我的示例web.product.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="service.tasks" type="HRNetTaskService.TaskConfigurationSection, TaskService" />
  </configSections>
  <connectionStrings>
    <add name="Production" connectionString="xxxx" providerName="System.Data.SqlClient" />
  </connectionStrings>
  <appSettings>
    <add key="RestServiceUrl" value="https://sample.net" />   
  </appSettings> 
</configuration>

现在,我要更新connectionString文件中的.config。使用以下脚本将replace.ps1添加到存储库中,然后通过传递相应的动态值在Powershell任务中调用此replace.ps1文件:

Param(
[string]$source,
[string]$connectionstring
)
$webConfig = $source
$doc = (Get-Content $webConfig) -as [Xml]
$root = $doc.get_DocumentElement();
$activeConnection = $root.connectionStrings.SelectNodes("add");
$activeConnection.SetAttribute("connectionString", $connectionstring);
$doc.Save($webConfig)

enter image description here


此处$(ProductValue)是您在Azure密钥保管库中配置的变量。它的调用方式与管道变量相同。您只需要将link Azure密钥保管库转换为天蓝色devops,然后将其与Variable group结合使用。

答案 2 :(得分:0)

我试图做的是在对配置文件进行转换之前,先从Azure Key Vault替换配置文件中的变量,因为在使用Episerver DXC的发布管道中,此操作无法完成(此时)。我所做的是在构建管道中替换它们。

在构建管道期间在Powershell中进行变量替换。将Key Vault机密作为单独的任务导入Powershell任务之前,并列出我将在Powershell任务中用作环境变量的所有密钥。

我命名的环境变量与应在配置文件中替换的环境变量相同(例如 SomeApiKey_Integration )。浏览配置文件,在两个双下划线之间寻找两个,然后将其替换为环境变量((Get-ChildItem $ variable).Value)中的值。

在配置文件和环境变量中,它们的命名如前所述, SomeApiKey_Integration 。密钥库名称和环境变量值为SomeApiKey-Integration。