MS Web Deploy Ignoring <setParameter> Entries + Writing to wrong file
问题
我们需要 3 个参数来使用我们的 3rd 方服务进行身份验证:用户名、密码、securityToken,它们存在于意想不到的地方(取决于它们可能在 Web.config 或 CI 构建脚本中的环境)。
我们要求 MS Web Deploy 从我们的 XML 文件中写入 <setParameter> 值,但它忽略了一些……特别是用户名、密码和安全令牌参数
MS Web Deploy 想要写入 \\Views\\Web.config 。我们要写入 \\Web.config 。
将我们所有的身份验证凭据组织到对应于每个或我们的环境(开发、质量保证和生产)的 DeploySettings.xml 文件中。
将 <setParameter> 值写入 \\\\\\\\Web.config 而不是 \\\\\\\\Views\\\\\\\\Web.config
问题解决了
2个进球
细节
- 我们正在使用 Jenkins 进行持续集成。
- Jenkins 正在调用 MS Web Deploy 3 来处理部署。
- 我们将为每个环境创建一个 DeploySettings 文件。
-
我目前正在开发我们的开发环境。对于这个问题的范围,我将指代我们的 "dev" 环境及其各自的
DeploySettings.Dev.xml 文件 -
Jenkins 部署脚本告诉 Web 部署使用
-setParamFile 用DeploySettings.Dev.xml 文件中的<setParameter> 值覆盖 \\\\\\\\Web.config 值
调用 DeploySettings 文件的部署脚本
1 | -setParamFile:"%WORKSPACE%\\DeploySettings.Dev.xml" -verbose |
部署设置.Dev.xml
a???? This is not the entire file
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?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 部署控制台日志记录表明用户名、密码和令牌被忽略
note that
username ,password andtoken are absent
1 2 | 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)
1 2 3 4 5 | 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 部署以写入 \\\\\\\\Web.config? \\\\\\\\Views\\\\\\\\Web.config 错误
-
如何配置
-setParamFile 以获取和覆盖username 、password 和token ?
感谢您的宝贵时间。
问题解决了
我将这种类型的配置重写工作移到了构建脚本中(Jenkins > "Your Project "> Build > Configure)。
这是我如何让它工作的一个例子
1 2 3 4 5 6 7 8 | 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" ^ |