【问题标题】:Azure Pipelines Release XML Variable Substitution skipped跳过 Azure Pipelines 发布 XML 变量替换
【发布时间】:2020-03-12 17:43:54
【问题描述】:

我将这个 web.config 文件放在我的项目的根目录中,该文件由 azure devops 在这里构建:

<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\ManagementStudio.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout">
        <environmentVariables>
          <environmentVariable name="MS_CONNECTIONSTRING" value="" />
          <environmentVariable name="CENTRAL_APPLICATION_SETTINGS" value="" />
          <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="" />
          <environmentVariable name="MS_COOKIEEXPIRYTIMEINMINUTES" value="" />
          <environmentVariable name="MS_STATICFILECACHEINSECONDS" value="" />
          <environmentVariable name="MS_COOKIEDOMAIN" value="" />
        </environmentVariables>
      </aspNetCore>
    </system.webServer>
  </location>
</configuration>

然后我在发布部分设置这些变量:

ASPNETCORE_ENVIRONMENT
Development
CENTRAL_APPLICATION_SETTINGS
csa
CLOUDFRONT_DOMAIN
csd
MS_CONNECTIONSTRING
connstring
MS_COOKIEDOMAIN
dev.website.com

我在发布时将它们设置为可设置。

在我的 IIS Web App Deploy 中,我勾选了 XML 变量替换。

但是,我的任何变量似乎都没有改变。

【问题讨论】:

    标签: azure azure-devops azure-pipelines


    【解决方案1】:

    只有appSettingsconnectionStringsapplicationSettings 部分被替换(see the documentation),并且部分必须包含带有keyname 的配置元素,例如:

    <connectionStrings>
        <add name="MyDB" connectionString="..." />
    </connectionStrings>
    

    你可以在这里定义一个变量MyDB来设置连接字符串

    --更新--

    对于environmentVariables 部分,您可以从文档中测试此建议:

    如果您要替换这些元素之外的值,您 可以使用(parameters.xml)文件,但是您需要使用第三个 方管道任务来处理变量替换。

    【讨论】:

    • 所以我根本无法使用 environmentVariables 吗?
    【解决方案2】:

    关于为什么它没有成功申请的原因,我同意Troopers的观点。

    但是,这并不意味着您不能再使用环境变量了。如果environment variable是你想要的首选,你可以考虑使用replace token任务来实现你想要的。

    关于这个任务的详细使用,可以参考我之前的reply

    【讨论】:

    • 您好,感谢您的回答。我在哪里使用替换令牌?我尝试在 Build 中使用它,但它一直说它跳过更新我的文件?
    • @JianYA,当然要在使用配置之前进行此替换。大多数情况下,我是在构建存储库之前这样做的。对于跳过问题,您是否针对任务定义中的配置?此外,您需要在配置文件(#{parameter name}#)中进行一些配置,以便可以将其替换为您的环境变量。
    • 你好,我现在再试一次。这是否意味着我的 web.config 文件的值应该包含类似 (#{parameter name}#) 的内容?
    • @JianYA。是的,只有这样,替换令牌任务才能找到对应的位置来替换值。如果有任何干扰,这就是这种方法的缺点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多