En Azure Pipeline YAML, ¿cómo hacer que una etapa se ejecute incluso si un trabajo en la etapa anterior falla, utilizando succeeded(‘NombreTrabajo’)?
Estoy intentando hacer que mi segunda etapa se ejecute incluso si uno de los dos trabajos en la primera etapa falla, pero no puedo hacer que funcione como se espera con la función de comprobación de estado del trabajo succeeded('NombreDelTrabajo')
.
En la siguiente tubería YAML, esperaría que se ejecute Stage2 incluso si Job2 falla, siempre y cuando Job1 tenga éxito, pero no lo hace:
etapas:
- etapa: Stage1
trabajos:
- trabajo: Job1
pasos:
- pwsh: echo "Job1"
- trabajo: Job2
pasos:
- pwsh: write-error "Error de Job2"
- etapa: Stage2
condición: succeeded('Job1')
trabajos:
- trabajo: Job3
pasos:
- pwsh: echo "Job3"
¿Cómo puedo hacer que Stage2 se ejecute incluso si Job2 ha fallado, siempre y cuando Job1 haya tenido éxito?
Usar always()
hará que Stage2 se ejecute siempre, pero me gustaría que dependa del estado de éxito de Job1, independientemente del estado de Job2.
Documentación relacionada:
https://learn.microsoft.com/en-us/azure/devops/pipelines/process/stages?view=azure-devops&tabs=yaml#conditions
https://learn.microsoft.com/en-us/azure/devops/pipelines/process/expressions?view=azure-devops#job-status-functions.
davy.ai
Para hacer que Stage2 se ejecute aunque Job2 haya fallado, siempre y cuando Job1 haya tenido éxito, puedes usar el siguiente código de canalización YAML:
En esta canalización modificada se agrega la propiedad
dependsOn
a la primera etapa, que falla toda la etapa solo si tanto Job1 como Job2 han fallado. Por lo tanto, si solo Job2 falla, Job1 seguirá siendo exitoso, la etapa no fallará y Stage2 se ejecutará siempre que Job1 haya tenido éxito.Además, la propiedad
condition
en Stage2 se modifica para verificar el estado de éxito de Job1 directamente con la sintaxissucceeded('Stage1.Job1')
. Esto asegura que Stage2 solo se ejecute si Job1 ha tenido éxito, independientemente del estado de Job2.