如何通过Azure DevOps管道为Azure服务结构应用程序设置环境变量

w7t8yxp5  于 2022-12-14  发布在  其他
关注(0)|答案(2)|浏览(191)

我们的团队有一个Service Fabric应用程序,它在名为connectionStringServiceManifest.xml文件中定义了一个环境变量

<!-- Code package is your service executable. -->
  <CodePackage Name="Code" Version="1.0.0">
    <EntryPoint>
      <ExeHost>
        <Program>myMMAPI.exe</Program>
        <WorkingFolder>CodePackage</WorkingFolder>
      </ExeHost>
    </EntryPoint>
    <EnvironmentVariables>
      <EnvironmentVariable Name="ASPNETCORE_ENVIRONMENT" Value=""/>
      <EnvironmentVariable Name="connectionString" Value="Server=mydb.123abc.database.windows.net; Authentication=Active Directory Password; Encrypt=True; Database=mydevdb; User Id=myId;Password=****" />
    </EnvironmentVariables>
  </CodePackage>

然后,我们可以在Startup.cs类中引用此环境变量。

Constants.ConnectionString = Environment.GetEnvironmentVariable("connectionString");

但是,我们需要在部署期间使用Azure DevOps管道设置此环境变量,而不是硬编码到此ServiceManifest.xml文件中。
是否有方法在Azure DevOps中传递此环境变量,以便我们可以更改每个环境的连接字符串?

sbtkgmzw

sbtkgmzw1#

您可以在管道中使用此任务引入使用变量切换出的令牌:https://marketplace.visualstudio.com/items?itemName=qetza.replacetokens
这些变量可以在管道中定义,也可以在单独的文件中定义。

rekjcdws

rekjcdws2#

您可以在管道中使用PowerShell脚本来修改ServiceMainifest.xml中的值。
例如:

$myConnectionString = " Server=mydb.123abc.database.windows.net; Authentication=Active Directory Password; Encrypt=True; Database=mydevdb; User Id=myId;Password=****
";

$serviceConfig = "path\ServiceManifest.xml"

Function updateConfig($config) 
{ 
$doc = (Get-Content $config) -as [Xml]
$root = $doc.get_DocumentElement();
$activeConnection = $root.EnvironmentVariables.SelectNodes("EnvironmentVariable");
$activeConnection.SetAttribute("connectionString", $myConnectionString);
$doc.Save($config)
} 

updateConfig($serviceConfig)

相关问题