MS Web部署忽略<setparameter>条目+写入错误的文件

时间:2017-07-01 15:07:58

标签: jenkins msdeploy webdeploy

问题

  1. 我们通过第三方服务进行身份验证需要3个参数:用户名,密码,securityToken,它们位于意外的位置(取决于它们可能位于Web.config或CI构建脚本中的环境)。
  2. 我们要求MS Web Deploy从我们的XML文件中写入<setParameter>值,但它忽略了一些......特别是用户名,密码和安全令牌参数
  3. MS Web Deploy想要写入\Views\Web.config。我们想写信给\Web.config
  4. 2个目标

    1. 将我们的所有身份验证凭据组织到与每个环境(dev,qa和production)相对应的DeploySettings.xml文件中。
    2. <setParameter>值写入 \ Web.config 而非 \ Views \ Web.config
    3. 详细

      • 我们赞成Jenkins持续整合。
      • Jenkins正在调用MS Web Deploy 3来处理部署。
      • 我们将为每个环境提供 DeploySettings 文件。
      • 我正在开发我们的开发环境。对于这个问题的范围,我将指的是我们的“开发”环境,它是相应的DeploySettings.Dev.xml文件
      • Jenkins部署脚本告诉Web部署使用-setParamFile使用<setParameter>文件中的DeploySettings.Dev.xml值覆盖\ Web.config值

      部署脚本调用DeploySettings文件

      -setParamFile:"%WORKSPACE%\DeploySettings.Dev.xml" -verbose
      

      DeploySettings.Dev.xml

        

      ⚠️这不是整个文件

      <?xml version="1.0" encoding="utf-8"?>
      <parameters>
        <setParameter 
          name="username" 
          value="lukeSkywalker" />
        <setParameter 
          name="password" 
          value="xxxxxx" />
        <setParameter 
          name="token" 
          value="xxxxxx" />
        <setParameter 
          name="DBConnection" 
          value="Data Source=fully.qulified.domain;Initial Catalog=CatalogName;uid=obiwan;password=xxxxx;MultipleActiveResultSets=True" />
        <setParameter 
          name="SessionDBConnection" 
          value="Data Source=1.2.3.4;uid=userId;password=xxxxxx" />
      ...
      

      详细的Jenkins部署控制台日志记录,显示正在忽略用户名,密码和令牌

        

      请注意usernamepasswordtoken不存在

      Verbose: Parameter entry 'DBConnection/1' is applicable to '\Web.config' because of its scope.
      Verbose: Parameter entry 'SessionDBConnection/1' is applicable to '\Web.config' because of its scope.
      

      详细的Jenkins部署控制台日志记录显示我们写入了错误的文件(\ Views \ Web.config)

      Verbose: Parameter entry 'DBConnection/1' is applicable to '\Views\Web.config' because of its scope.
      Verbose: Parameter entry 'DBConnection/1' could not be applied to '\Views\Web.config'. Deployment will continue with the original data. Details:
      
      Verbose: Parameter entry 'DBConnection/1' is applicable to '\Views\Web.config' because of its scope.
      Verbose: Parameter entry 'DBConnection/1' could not be applied to '\Views\Web.config'. Deployment will continue with the original data. Details:
      

      燃烧问题

      • 如何配置Web Deploy以写入\ Web.config? \ Views \ Web.config错误
      • 如何配置-setParamFile来抓取并覆盖usernamepasswordtoken

      感谢您的时间。

1 个答案:

答案 0 :(得分:1)

解决问题

我将这种类型的config-rewrite工作转移到构建脚本(Jenkins&gt;“Your Project”&gt; Build&gt; Configure)。

这是我如何让它工作的一个例子

SET PATH=%PATH%;c:\Program Files (x86)\IIS\Microsoft Web Deploy V3
msdeploy.exe -verb:sync -source:dirPath="%WORKSPACE%\" ^
  -dest:package="%WORKSPACE%\ArtifactName-%BUILD_NUMBER%.zip" ^
  -replace:objectName=dirPath,targetAttributeName=path,match="^C:\\.*\\pathToSite",replace="c:\sitesRoot\pathToSite" ^
  -declareParam:name=DBConnection,kind=XmlFile,scope=Web.config,match=//configuration/connectionStrings/add/@connectionString,defaultValue="Data Source=1.2.3.4;Initial Catalog=dbName;uid=website;password=xxxx;MultipleActiveResultSets=True" ^
  -declareParam:name=SessionDBConnection,kind=XmlFile,scope=Web.config,match=//configuration/system.web/sessionState/@sqlConnectionString,defaultValue="Data Source=1.2.3.4;uid=xxxx;password=xxxx" ^
  -declareParam:name=Parameter1,kind=XmlFile,scope=Web.config,match=//configuration/appSettings/add[@key="Parameter1"]/@value,defaultValue="paramValue1" ^
  -declareParam:name=Paramtere2,kind=XmlFile,scope=Web.config,match=//configuration/appSettings/add[@key="Parameter2"]/@value,defaultValue="paramvalue2" ^