2015-12-28 14 views
7

Sto provando a fare in modo che un certo risultato in uno script di PowerShell fallisca il processo di compilazione, ma non funziona per me. Sto usando le nuove azioni costruire da TFS 2015 e provato le seguenti opzioni:Come fallire la compilazione da un'attività PowerShell in TFS 2015

io capisco testo rosso nella finestra di log del passo, così come contrassegnato 'Problemi' nella panoramica della build, ma il risultato della build è ancora Verde: 'Build riuscito'

Voglio usare l'errore nello script per fallire la compilazione e quindi inviare una e-mail utilizzando un avviso su build falliti.

Edit: compreso lo script PS:

Param(
    [string]$url 
) 

if ($url -eq '') 
{ 
    #use default value 
    $url = 'https://myurl.com' 
} 

$req = [system.Net.WebRequest]::Create($url) 
$req.Timeout = 60000 * 5 # = 5 minutes 
try 
{ 
    Write-Host "Try to get response from url:" $url 
    $res = $req.GetResponse() 
    Write-Host "Closing the connection" 
    $req.Close() # close the connection 
} 
catch [System.Net.WebException] 
{ 
    Write-Host "Got an exception"  
    Write-Host "##vso[task.logissue type=error;]Exception: " $_.Exception 

    if ($_.response) # try to close the connection 
    { 
     $_.response.Close();  
    } 
    $res = $_.Exception.Response 
} 
$printCode=[int]$res.StatusCode 

Write-Host "Result StatusCode:" $res.StatusCode "(" $printCode ")" 
If ([int]$res.StatusCode -eq 200) 
{ 
    Write-Host "##vso[task.complete result=Succeeded;]Done" 
} 
Else 
{ 
    Write-Host "##vso[task.logissue type=error;]Test error: " $res 
    Write-Host "##vso[task.complete result=Failed;]Error testing if demo site is up" 
    exit 1 
} 
+0

Potrebbe condividere lo script PowerShell in modo che possiamo riprodurre? –

+0

Ho modificato la domanda per includere lo script –

risposta

10

ho creato un semplice script:

Write-Error ("Some error") 
exit 1 

Salva questo come uno script PowerShell. Crea una nuova definizione di Build vuota e aggiungi solo un'attività PowerShell che punta al tuo script. Quando faccio questo ho una generazione non riuscita con il seguente errore:

2015-12-30T10:27:29.4872452Z . 'C:\a\1\s\script.ps1' 
2015-12-30T10:27:29.6780242Z Executing the following powershell script. (workingFolder = C:\a\1\s) 
2015-12-30T10:27:29.6790500Z C:\a\1\s\script.ps1 
2015-12-30T10:27:33.8017820Z ##[error]C:\a\1\s\script.ps1 : Some error 
2015-12-30T10:27:33.8027833Z ##[error]At line:1 char:1 
2015-12-30T10:27:33.8037819Z ##[error]+ . 'C:\a\1\s\script.ps1' 
2015-12-30T10:27:33.8037819Z ##[error]+ ~~~~~~~~~~~~~~~~~~~~~~~ 
2015-12-30T10:27:33.8047816Z ##[error] + CategoryInfo   : NotSpecified: (:) [Write-Error], WriteErrorException 
2015-12-30T10:27:33.8047816Z ##[error] + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,script.ps1 
2015-12-30T10:27:33.8057887Z ##[error] 
2015-12-30T10:27:33.8057887Z ##[error]Process completed with exit code 1 and had 1 error(s) written to the error stream. 

La differenza principale con lo script è l'utilizzo di Write-Error in combinazione con un uscita 1.

+0

Grazie a Wouter, questa era la soluzione semplice che mi mancava. Dopo alcuni test ho scoperto che è possibile utilizzare exit 1 ** o ** Write-Error per fallire l'attività. –

+0

Questa * NON * è un'ottima soluzione poiché impone informazioni nel registro (che può essere difficile da comprendere per una persona) Il mancato funzionamento di un'attività deve essere indipendente da qualsiasi requisito relativo al contenuto del registro! –

+0

@ DavidV.Corbin Rob ha chiesto di fallire la compilazione da uno script di PowerShell, l'unico motivo per non farlo è restituire un codice di uscita dallo script e inviarlo al log oppure non si desidera che il proprio errore venga registrato? –

Problemi correlati