Cómo fallar la compilación de una tarea de PowerShell en TFS 2015
tfs2015 (1)
He creado un script muy simple:
Write-Error ("Some error")
exit 1
Guarde esto como un script de PowerShell. Cree una nueva definición de compilación vacía y solo agregue una tarea de PowerShell que apunte a su secuencia de comandos. Cuando hago esto, obtengo una compilación fallida con el siguiente error:
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 principal diferencia con su script es el uso de Write-Error en combinación con una salida 1.
Estoy tratando de lograr cierto resultado en un script de PowerShell que falla el proceso de compilación, pero no funciona para mí. Estoy usando las nuevas acciones de compilación de TFS 2015 y probé las siguientes opciones:
- Comandos de registro
- salida 1
Obtengo texto rojo en la ventana de registro del paso, así como marcado ''Problemas'' en la descripción general de la compilación, pero el resultado de la compilación sigue siendo Verde: ''Compilación exitosa''
Quiero usar la falla en el script para fallar la compilación y, por lo tanto, enviar un correo electrónico utilizando una alerta sobre compilaciones fallidas.
Editar: incluido el 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
}