2009-02-23 5 views
3

Nous utilisons TFSDeployer pour écouter les modifications de qualité et déployer dans notre environnement de transfert lors de la transition vers "Staging". Je voudrais le faire avancer et mettre à jour toutes les autres versions qui ont une qualité de «Staging» en cours de construction pour être «Rejected».Comment puis-je utiliser PowerShell pour mettre à jour les qualités de construction sur les Builds TFS précédentes?

Cela semble être quelque chose qui doit se produire dans le script PowerShell qui ressemble à:

$droplocation = $TfsDeployerBuildData.DropLocation 
ECHO $droplocation 

$websourcepath = $droplocation + "\Release\_PublishedWebsites\CS.Public.WebApplication\" 
$webdestinationpath = "\\vmwebstg\WebRoot\CreditSolutions\" 

new-item -force -path $webdestinationpath -itemtype "directory" 
get-childitem $webdestinationpath | remove-item -force -recurse 
get-childitem $websourcepath | copy-item -force -recurse -destination $webdestinationpath 

$configFile = $webdestinationpath + "web.development.config" 
remove-item $configFile -force 

$configFile = $webdestinationpath + "web.staging.config" 
$configFileDest = $webdestinationpath + "web.config" 
move-item $configFile $configFileDest -force 

Alors, comment puis-je faire?

+0

avez-vous essayé http://deurell.github.io/articles/use-powershell-to-get-release-notes-from-tfs-builds/? – Kiquenet

Répondre

3

d'abord ajouter la fonction Get-TFS à votre script:

function get-tfs (
    [string] $serverName = $(Throw 'serverName is required') 
) 
{ 
    # load the required dll 
    [void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Client") 

    $propertiesToAdd = (
     ('VCS', 'Microsoft.TeamFoundation.VersionControl.Client', 'Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer'), 
     ('WIT', 'Microsoft.TeamFoundation.WorkItemTracking.Client', 'Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore'), 
     ('BS', 'Microsoft.TeamFoundation.Build.Common', 'Microsoft.TeamFoundation.Build.Proxy.BuildStore'), 
     ('CSS', 'Microsoft.TeamFoundation', 'Microsoft.TeamFoundation.Server.ICommonStructureService'), 
     ('GSS', 'Microsoft.TeamFoundation', 'Microsoft.TeamFoundation.Server.IGroupSecurityService') 
    ) 

    # fetch the TFS instance, but add some useful properties to make life easier 
    # Make sure to "promote" it to a psobject now to make later modification easier 
    [psobject] $tfs = [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory]::GetServer($serverName) 
    foreach ($entry in $propertiesToAdd) { 
     $scriptBlock = ' 
      [System.Reflection.Assembly]::LoadWithPartialName("{0}") > $null 
      $this.GetService([{1}]) 
     ' -f $entry[1],$entry[2] 
     $tfs | add-member scriptproperty $entry[0] $ExecutionContext.InvokeCommand.NewScriptBlock($scriptBlock) 
    } 
    return $tfs 
} 

Ensuite, instancier l'objet TFS

$tfs = get-tfs http://YourTfsServer:8080 

Ensuite, trouver le construit avec une qualité de construction de "Mise en scène"

$builds = $tfs.BS.GetListOfBuilds("Test Project", "TestBuild") | 
where {$_.BuildQuality -eq "Staging"} 

Enfin, mettez à jour la qualité de ces constructions

foreach ($build in $builds) { $tfs.BS.UpdateBuildQuality($build.BuildUri, "Rejected") } 

(j'ai couru pas encore ce script, mais vous devriez être en mesure d'obtenir ça va sans ennuis)

Plus d'info sur mon blog: Using the Team Foundation Object Model with PowerShell

Un dernier conseil, si vous mettez à jour la qualité de construction à partir du script qui est exécuté à partir de TfsDeployer, vous pourriez vous retrouver avec 2 scripts en cours d'exécution en même temps si vous avez un mapping pour la transition Staging -> Rejected!

+0

Devrait-il y avoir un type de qualificateur dans la clause where qui exclut la version actuelle? En d'autres termes, la qualité Staging est-elle définie sur la version en cours avant ou après que TfsDeployer en ait pris possession? – NotMe

+0

Cela a fonctionné. J'ai ajouté une autre clause where qui excluait le numéro de build particulier avec lequel je travaillais. Merci! – NotMe

+0

La qualité de construction est déjà définie (fermement) lorsque TFSDeployer prend en compte la modification. (Vraisemblablement de "Non-oxy" à "Staging" lorsque vous déployez. – thijs

1

Ce n'est pas la réponse complète car je n'ai pas beaucoup de connaissances de TFSDeployer ou bien PowerScript. Cependant, l'API .NET pour Team Build est capable de faire cela. Vous voulez obtenir le IBuildDetail pour la construction. La meilleure façon d'y arriver est si vous avez la BuildUri (ce qui sonne comme vous pourriez), auquel cas un appel à IBuildServer.GetBuild devrait vous aider à la construction vous intéresse.

IBuildServer a aussi les QueryBuilds méthodes que vous feriez être capable d'appeler pour trouver les builds qui vous intéressent, vous devez ensuite définir la propriété Quality sur les IBuildDetails que vous souhaitez modifier, en rappelant d'appeler la méthode Save() sur chacun d'entre eux.

Espérons que cela vous donne un début - désolé, ce n'est pas une réponse plus complète.

Questions connexes