es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , ,

Answer

  1. Avatar for 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:

    etapas:
      - stage: Stage1
        jobs:
          - job: Job1
            steps:
              - pwsh: echo "Job1"
          - job: Job2
            steps:
              - pwsh: write-error "Error en Job2"
        # fallar la etapa solo si tanto Job1 como Job2 han fallado
        # de lo contrario, continuar con la siguiente etapa
        dependsOn:
          - Job1
          - Job2
    
      - stage: Stage2
        condition: succeeded('Stage1.Job1')
        jobs:
          - job: Job3
            steps:
              - pwsh: echo "Job3"
    

    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 sintaxis succeeded('Stage1.Job1'). Esto asegura que Stage2 solo se ejecute si Job1 ha tenido éxito, independientemente del estado de Job2.

Comments are closed.