我有多个文件夹,例如,www包含文件夹A,B,C等。该结构存在于INT,REG,DR,PROD等不同的环境中。每个都包含不同的web.config。
因此,我们需要提供一种自动方法来检入每个web.config的挑战。
以web_A_int.config,web_A_REG.config,Web_A_Prod.config,Web_A_DR.config和Web_B_int.config,Web_B_Reg_config等命名。
环境为TFS(2015)源代码控制,解决方案为基于.net的解决方案。
如果您需要了解任何问题,请告诉我。
如何在构建编译后维护此结构。或如何使用proj或Powershell脚本来实现它?
所需的输出: INT-> www-> A,B,C文件夹,并将每个web.config放置在各自的文件夹中。 REG-> www-> A,B,C->正确设置每个web.config和每个模块级别。
答案 0 :(得分:1)
解决此问题的一种方法是使用Web转换并创建一个web。{environment} .config文件,然后将该转换应用于部署。
Microsoft docs应该使您开始使用网络转换。如果您决定这样做,我可以为您提供一些有关如何执行此操作的Powershell代码。
答案 1 :(得分:0)
我对TFS中的Web服务器部署不熟悉,但是这里有一些常规的Powershell函数可用于构建循环:
$environmentTypes = @('INT', 'REG', 'DR', 'PROD')
Function Get-WebConfig([String]$Path)
{
try {
$configContent = Get-Content \\path\to\config\file
}
catch {
Write-Debug "ERROR: Could not get content of $($Path)"
}
return $configContent
}
Function Create-FolderStructure() {
[cmdletBinding()]
param(
[Parameter(Mandatory)]
[ValidateSet('INT','REG','DR','PROD')]
[String]$EnvironmentType,
[Parameter(Mandatory)]
[String]$Server,
[Parameter(Mandatory)]
[String[]]$FolderNames,
[Parameter(Mandatory=$false)]
[Switch]$CheckServerUp
)
Begin {}
Process {
try {
if($CheckServerUp)
{
try {
Test-Connection -ComputerName $Server
}
catch {
Write-Debug "ERROR: Unable to test connection to $Server"
}
}
foreach($item in $FolderNames)
{
try {
New-Item -Path "\\$Server\c$\www\$item" -ItemType Directory
}
catch {
Write-Debug "ERROR: Unable to create folder $item"
}
try {
switch($EnvironmentType)
{
'INT'
{
$neededConfig = Get-WebConfig -Path \\path\to\your\intconfig
break
}
'REG'
{
$neededConfig = Get-WebConfig -Path \\path\to\your\regconfig
break
}
'DR'
{
$neededConfig = Get-WebConfig -Path \\path\to\your\drconfig
break
}
'PROD'
{
$neededConfig = Get-WebConfig -Path \\path\to\your\prodconfig
break
}
try {
New-Item -Path "\\$Server\c$\www\$item\Web_$EnvironmentType.config"
Set-Content -Path "\\$Server\c$\www\$item\Web_$EnvironmentType.config" -Value $neededConfig
}
catch {
Write-Debug "ERROR: Unable to create file"
}
}
}
catch {
Write-Debug "ERROR: Unable to get web config content"
}
}
}
catch {
Write-Debug "ERROR: Could not get content of $($Path)"
}
}
End{}
}