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.

Azure DevOps Pipelines: El desencadenador de la PR solo ejecutará un escenario, después de completarlo, continúe.

Tengo un archivo azure-pipelines.yaml Pipeline A para mi aplicación .NET que tiene 3 etapas.

Etapa 1: Restaurar, compilar, realizar pruebas unitarias, publicar artefacto

Etapa 2: Consumir artefacto, construir imagen Docker, enviarlo a repositorio de artefactos

Etapa 3: Ejecutar script Bash

Esto funciona bien con el disparador de integración continua normal, pero ahora me gustaría agregar un disparador de solicitudes de extracción también.

¿Es posible realizar sólo la Etapa 1 (sólo restaurar, compilar, realizar pruebas unitarias, publicar artefacto) con la solicitud de extracción y luego ponerla “en espera” hasta que la solicitud de extracción se complete? Y después de la finalización, continuar con Etapa 2 y consumir el artefacto publicado y continuar construyendo la imagen de Docker, etc.

¿O es mejor establecer una nueva pipeline completamente?

¡Gracias por cualquier orientación!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible lograr lo que has descrito utilizando Azure Pipelines. Puedes configurar tu Pipeline A existente para admitir tanto los disparadores de Integración Continua como los de Solicitud de Extracción (Pull Request).

    Para configurar esto, necesitas agregar una nueva sección de disparadores en tu archivo azure-pipelines.yaml como se muestra a continuación:

    trigger:
    - main # Para el disparador de Integración Continua (CI)
    - pull_request # Para el disparador de Solicitud de Extracción (PR)
    

    Esto habilitará tanto los disparadores de Integración Continua como los de Solicitud de Extracción. Ahora, para configurar tu pipeline para que solo realice la Etapa 1 cuando se active por una Solicitud de Extracción, puedes agregar una condición a tus jobs que verifique si el disparador fue una Solicitud de Extracción. A continuación se muestra el archivo azure-pipelines.yaml modificado:

    trigger:
    - main # Para el disparador de Integración Continua (CI)
    - pull_request # Para el disparador de Solicitud de Extracción (PR)
    
    pool:
      vmImage: 'ubuntu-18.04'
    
    jobs:
    - job: Build
      steps:
      - script: dotnet restore
      - script: dotnet build
      - script: dotnet test
      - task: PublishBuildArtifacts@1
        inputs:
          buildType: 'zip'
          artifactName: 'drop'
          publishLocation: 'Container'
    
    - job: Docker
      dependsOn: Build
      condition: eq(variables['Build.Reason'], 'PullRequest')
      steps:
      - task: DownloadBuildArtifacts@0
        inputs:
          buildType: 'zip'
          artifactName: 'drop'
          downloadPath: '$(System.ArtifactsDirectory)'
      - task: DockerCompose@0
        inputs:
          containerregistrytype: 'Azure Container Registry'
          azureSubscriptionEndpoint: '<tu-nombre-de-conexión-de-servicio>'
          dockerComposeFile: '<tu-archivo-docker-compose>'
          action: 'Build services'
          imageName: '<tu-nombre-de-imagen>'
          azureContainerRegistry: '<tu-nombre-de-acr>'
      - task: Docker@2
        inputs:
          command: 'push'
          containerRegistry: '<tu-nombre-de-acr>'
          imageName: '<tu-nombre-de-imagen>'
    

    La condición en el trabajo Docker verifica si la variable Build.Reason es igual a 'PullRequest'. Si lo es, el trabajo se encolará pero no comenzará hasta que se complete la Solicitud de Extracción. Una vez que se completa la Solicitud de Extracción, el trabajo se iniciará y la Etapa 2 continuará como de costumbre, consumiendo el artefacto que se publicó en la Etapa 1.

    En resumen, no necesitas configurar un nuevo pipeline, pero necesitas modificar tu pipeline existente para admitir tanto los disparadores de Integración Continua como los de Solicitud de Extracción, y agregar una condición a tus trabajos para realizar solo la Etapa 1 cuando se active por una Solicitud de Extracción.</tu-nombre-de-conexión-de-servicio>

Comments are closed.