2016-03-29 9 views
3

Ich möchte mehrere Build-Schritte in einer TeamCity-Konfiguration deaktivieren. Zum Beispiel:Skript zum Deaktivieren von Build-Schritten in TeamCity oder zum Ausführen in einem bestimmten Schritt

  • Ich habe eine deploy Konfiguration DeploySoftware genannt.
  • Es verfügt über 10 Build-Schritte (Ausführen> DB-Skripte, Run Umgebung Skripte, Bereitstellen von Web Service, Bereitstellen von Windows-Service, Deploy Diese, Deploy Das, etc).
  • Ich führe es einmal und es scheitert an Stellen Sie diese.
  • Ich will es wieder laufen mit Deploy ab diesem, OR deaktivieren Sie alle vorherigen Schritte zu, dass man durch ein Skript verwenden.

Eine Config Ich habe hat 30 Build Schritte, so dass, wenn es in dem Schritt ausfällt 28 (und ich weiß, dass ein anderer Lauf wird höchstwahrscheinliche Arbeit) Ich mag es noch einmal mit Schritt 28. Ansonsten beginnt laufen, es ist 45 Minuten Laufschritte, die bereits erfolgreich abgeschlossen wurden, bevor ich zu dem Schritt komme, der ausgeführt werden muss.

Ich brauche das Skript nicht, um den Build auszuführen (obwohl das nett wäre), oder ändere die Konfiguration zurück, sobald sie ausgeführt wird (ich erwarte, dass das ein einfacher Tweak zum Deaktivierungsskript wäre).

Das Skript könnte PowerShell, C#, VB.NET, VBA, Ruby sein - so ziemlich alles, was ich schnell ändern und ausführen kann.

Antwort

5

Das folgende Skript wird die Build-Schritte von 1 => x

# ----------------------------------------------- 
# Build Step Disabler 
# ----------------------------------------------- 
# 
# Ver Who     When  What 
# 1.0 Evolve Software Ltd 29-03-16 Initial Version 

# Script Input Parameters 
param (
    [ValidateNotNullOrEmpty()] 
    [string] $RestEndPoint = $(throw "-RestEndPoint is mandatory, please provide a value."), 
    [ValidateNotNullOrEmpty()] 
    [string] $ApiUsername = $(throw "-ApiUsername is mandatory, please provide a value."), 
    [ValidateNotNullOrEmpty()] 
    [string] $ApiPassword = $(throw "-ApiPassword is mandatory, please provide a value."), 
    [ValidateNotNullOrEmpty()] 
    [int] $FailedStep = $(throw "-FailedStep is mandatory, please provide a value."), 
    [bool] $Disable = $True 
) 

function Main() 
{ 
    $CurrentScriptVersion = "1.0" 
    $ApiCredentials = New-Object System.Management.Automation.PSCredential($ApiUsername, (ConvertTo-SecureString $ApiPassword -AsPlainText -Force)) 

    $ApiCredentials_ForHeader = $ApiUsername + ":" + $ApiPassword 
    $ApiCredentialsBase64 = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($ApiCredentials_ForHeader)) 

    $ApiCredentialsHeader = @{}; 
    $ApiCredentialsHeader.Add("Authorization", "Basic $ApiCredentialsBase64") 

    Write-Host "================== Build Step Disabler - Version"$CurrentScriptVersion": START ==================" 

    # Log input variables passed in 
    Log-Variables 
    Write-Host 

    # Get the steps into XML 
    [System.Xml.XmlDocument]$stepsResponse = Api-Get "$RestEndPoint/steps" 
    $currentStep = 1; 

    do { 
     try { 
      [System.Xml.XmlElement]$step = $stepsResponse.steps.step[$currentStep-1] 

      if (!$step.id) 
      { 
       Write-Output "Build step id not found - Exiting" 
       Exit 1 
      } 

      $stepId = $step.id 
      Api-Put "$RestEndPoint/steps/$stepId/disabled" ($Disable).ToString().ToLower() 
      $currentStep++ 
     } 
     catch [System.Exception] { 
      Write-Output $_ 
      Write-Output "Unable to configure the build steps correctly" 
      Exit 1 
     } 
    } 
    while ($currentStep -le $FailedStep) 

    Write-Host "================== Build Step Disabler - Version"$CurrentScriptVersion": END ==================" 
} 

function Log-Variables 
{ 
    Write-Host "RestEndPoint: " $RestEndPoint 
    Write-Host "FailedStep: " $FailedStep 
    Write-Host "Disable: " $Disable 
    Write-Host "Computername:" (gc env:computername) 
} 

function Api-Get($Url) 
{ 
    Write-Host $Url 
    return Invoke-RestMethod -Headers $ApiCredentialsHeader -Credential $ApiCredentials -Uri $Url -Method Get -ContentType "application/xml" -TimeoutSec 30; 
} 

function Api-Put($Url, $Data) 
{ 
    Write-Host $Url 
    return Invoke-RestMethod -Headers $ApiCredentialsHeader -Credential $ApiCredentials -Uri $Url -Method Put -ContentType "text/plain" -Body $Data -TimeoutSec 30 -DisableKeepAlive; 
}  

Main 

Nutzungs deaktivieren oder aktivieren:

Dies wird deaktivieren Sie die Erstellungsschritte 1 => 5

script.ps1 "http://teamcity/httpAuth/app/rest/buildTypes/DeploySoftware" username password 5 

Dies aktiviert die Build-Schritte 1 => 5

script.ps1 "http://teamcity/httpAuth/app/rest/buildTypes/DeploySoftware" username password 5 $false 

Hoffe, das hilft

+0

Vielen Dank, das ist großartig. Ich musste die Timeouts erhöhen (sehr langsam/beschäftigt Server), aber das hat perfekt funktioniert. – grrrrinaldi

+0

Das ist ein wunderschön geschriebenes Skript. – ErikE

Verwandte Themen