Скрипт для отключения этапов сборки в TeamCity или запуска на определенном этапе

Я хочу отключить несколько шагов сборки в конфигурации TeamCity. Например:

  • У меня есть конфигурация развертывания под названием DeploySoftware.
  • Он состоит из 10 шагов сборки (запуск скриптов БД, запуск сценариев среды, развертывание веб-службы, развертывание службы Windows). , Развернуть это, Развернуть это и т. д.).
  • Я запускаю его один раз, но при Deploy This он не работает.
  • Я хочу запустить его снова, начиная с Развернуть это, ИЛИ отключить все предыдущие шаги до этого с помощью скрипта.

У меня есть одна конфигурация, состоящая из 30 шагов сборки, поэтому, если она не работает на шаге 28 (и я знаю, что другой запуск, скорее всего, сработает), я хочу запустить ее снова, начиная с шага 28. В противном случае это 45 минут выполнения шагов, которые уже были успешно завершены. завершить, прежде чем я перейду к шагу, который нужно выполнить.

Мне не нужен скрипт для запуска сборки (хотя это было бы неплохо) или изменить конфигурацию обратно после ее запуска (я ожидаю, что это будет простая настройка скрипта отключения).

Сценарий может быть PowerShell, C#, VB.NET, VBA, Ruby — почти все, что я могу быстро изменить и запустить.


person grrrrinaldi    schedule 29.03.2016    source источник


Ответы (1)


Следующий скрипт отключит или включит шаги сборки от 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

Использование:

Это отключит шаги сборки 1 => 5

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

Это позволит выполнить шаги сборки 1 => 5.

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

Надеюсь это поможет

person Evolve Software Ltd    schedule 29.03.2016
comment
Спасибо, это здорово. Мне пришлось увеличить время ожидания (очень медленный/занятый сервер), но это сработало отлично. - person grrrrinaldi; 30.03.2016
comment
Это прекрасно написанный сценарий. - person ErikE; 10.04.2017