> ## Documentation Index
> Fetch the complete documentation index at: https://docs.corgea.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Azure DevOps

> Guía completa para configurar Azure DevOps con Corgea

La integración de Azure DevOps permite escanear proyectos y crear pull requests con correcciones directamente desde Corgea.

<Steps>
  <Step title="Generar un token de acceso personal de Azure DevOps">
    Accede a tu cuenta de Azure DevOps y genera un token de acceso personal (PAT) con permisos tanto de lectura como de escritura.

    <Frame>
      <img src="https://mintcdn.com/corgea/uxLuQR4653lM43Tj/images/azure-devops-1.png?fit=max&auto=format&n=uxLuQR4653lM43Tj&q=85&s=88f9542152a162b66fed06a4ec6a9e64" style={{ borderRadius: '0.5rem' }} alt="Crear Token de Acceso Personal" width="294" height="402" data-path="images/azure-devops-1.png" />
    </Frame>

    <Frame>
      <img src="https://mintcdn.com/corgea/uxLuQR4653lM43Tj/images/azure-devops-2.png?fit=max&auto=format&n=uxLuQR4653lM43Tj&q=85&s=10c4a67d2cce8b477c5dd59592d6a0bf" style={{ borderRadius: '0.5rem' }} alt="Permisos de Token" width="651" height="952" data-path="images/azure-devops-2.png" />
    </Frame>
  </Step>

  <Step title="Integrar el token con Corgea">
    Ve a la página <a href="https://www.corgea.app/integrations/" target="_blank">Integraciones</a> de Corgea. Haz clic en el botón "+" de Azure DevOps y guarda el token de forma segura.

    <Frame>
      <img src="https://mintcdn.com/corgea/uxLuQR4653lM43Tj/images/azure-devops-modal-3.png?fit=max&auto=format&n=uxLuQR4653lM43Tj&q=85&s=6f4a74071fbde89934b6b6ac24fbd5e0" style={{ borderRadius: '0.5rem' }} alt="Añadir token a Corgea" width="2140" height="1252" data-path="images/azure-devops-modal-3.png" />
    </Frame>
  </Step>

  <Step title="Localizar proyectos de Azure DevOps en Corgea">
    Tras completar la configuración, ve a la página <a href="https://www.corgea.app/projects/" target="_blank">Proyectos</a>. Los proyectos de Azure DevOps se muestran con un icono de Windows. Haz clic en el "+" de la columna de acciones para iniciar el primer escaneo. También puedes seleccionar el nombre del proyecto y hacer clic en "Nuevo escaneo".

    <Frame>
      <img src="https://mintcdn.com/corgea/uxLuQR4653lM43Tj/images/azure-devops-projects-4.png?fit=max&auto=format&n=uxLuQR4653lM43Tj&q=85&s=c42a658e1734ac671564acb892acd823" style={{ borderRadius: '0.5rem' }} alt="Proyectos de búsqueda" width="2726" height="910" data-path="images/azure-devops-projects-4.png" />
    </Frame>
  </Step>

  <Step title="Enviar una pull request a Azure DevOps">
    Desde la página de cualquier hallazgo asociado a un proyecto de Azure DevOps, puedes crear una pull request para corregirlo.

    <Frame>
      <img src="https://mintcdn.com/corgea/uxLuQR4653lM43Tj/images/azure-devops-issue-pr-5.png?fit=max&auto=format&n=uxLuQR4653lM43Tj&q=85&s=170ad0fb0f0473d9c1b8a8501296b621" style={{ borderRadius: '0.5rem' }} alt="Solicitud de Emisión" width="4414" height="2238" data-path="images/azure-devops-issue-pr-5.png" />
    </Frame>
  </Step>
</Steps>

## Opcional: configurar webhooks

Para habilitar los escaneos cuando se creen o actualicen las pull requests, configura dos webhooks (uno para cada evento). Asegúrate de tener los permisos necesarios para crear los webhooks para tu proyecto.

<Steps>
  <Step>
    Selecciona "Configuración del proyecto" situada en la parte inferior izquierda de la interfaz de Azure DevOps.

    <Frame>
      <img src="https://mintcdn.com/corgea/uxLuQR4653lM43Tj/images/azure-webhook-1.png?fit=max&auto=format&n=uxLuQR4653lM43Tj&q=85&s=7691ffcbb26b37bd8b6396a5c01509e3" style={{ borderRadius: '0.5rem' }} alt="Configuración del proyecto" width="1320" height="1616" data-path="images/azure-webhook-1.png" />
    </Frame>
  </Step>

  <Step>
    Haz clic en "Service Hooks". Si no se carga de inmediato, puede que tengas que intentarlo varias veces.

    <Frame>
      <img src="https://mintcdn.com/corgea/uxLuQR4653lM43Tj/images/azure-webhook-2.png?fit=max&auto=format&n=uxLuQR4653lM43Tj&q=85&s=c7e432329a7eea7459474d5155a74bcb" style={{ borderRadius: '0.5rem', width: '50%' }} alt="Service Hooks" width="628" height="928" data-path="images/azure-webhook-2.png" />
    </Frame>
  </Step>

  <Step>
    Haz clic en el botón "+" y elige "Web Hooks".

    <Frame>
      <img src="https://mintcdn.com/corgea/uxLuQR4653lM43Tj/images/azure-webhook-3.png?fit=max&auto=format&n=uxLuQR4653lM43Tj&q=85&s=677f4fbb1473dbff151d0b5949678d0f" style={{ borderRadius: '0.5rem' }} alt="Web Hooks" width="2368" height="1590" data-path="images/azure-webhook-3.png" />
    </Frame>
  </Step>

  <Step>
    Selecciona "Pull request creada" como evento de activación, ajusta las opciones que necesites y haz clic en "Siguiente".

    <Frame>
      <img src="https://mintcdn.com/corgea/uxLuQR4653lM43Tj/images/azure-webhook-4.png?fit=max&auto=format&n=uxLuQR4653lM43Tj&q=85&s=87c1d1fd737c2d60538563108152d836" style={{ borderRadius: '0.5rem' }} alt="Evento desencadenante" width="1596" height="1324" data-path="images/azure-webhook-4.png" />
    </Frame>
  </Step>

  <Step>
    En la sección de Configuración, introduce la URL como [https://www.corgea.app/azure\_webhook/](https://www.corgea.app/azure_webhook/) o `https://your_instance.corgea.app/azure_webhook/` para despliegues privados.

    <Frame>
      <img src="https://mintcdn.com/corgea/uxLuQR4653lM43Tj/images/azure-webhook-fill-in-url.png?fit=max&auto=format&n=uxLuQR4653lM43Tj&q=85&s=680bd4ede219087aaf6051e030cb446d" style={{ borderRadius: '0.5rem' }} alt="Webhook URL" width="1600" height="1014" data-path="images/azure-webhook-fill-in-url.png" />
    </Frame>
  </Step>

  <Step>
    Abre una nueva pestaña del navegador, accede a la página de integraciones de Corgea y localiza tu integración con Azure. Copia el valor X-CORGEA-UUID.

    <Frame>
      <img src="https://mintcdn.com/corgea/uxLuQR4653lM43Tj/images/azure-webhook-5.png?fit=max&auto=format&n=uxLuQR4653lM43Tj&q=85&s=a2a610c03862facbf2d78de5b396afab" style={{ borderRadius: '0.5rem' }} alt="X-CORGEA-UUID" width="2580" height="1268" data-path="images/azure-webhook-5.png" />
    </Frame>
  </Step>

  <Step>
    Vuelve a la página de configuración de Azure DevOps Webhook y rellena la sección de cabeceras con:

    * X-CORGEA-UUID: (valor UUID que copiaste)
    * X-WEB-TOKEN: (legado/opcional; incluir solo si tu infraestructura externa lo requiere)

    <Frame>
      <img src="https://mintcdn.com/corgea/uxLuQR4653lM43Tj/images/azure-webhook-6.png?fit=max&auto=format&n=uxLuQR4653lM43Tj&q=85&s=154c967cbd2113229cba93090a29cf9d" style={{ borderRadius: '0.5rem' }} alt="Configuración de cabeceras" width="1664" height="1548" data-path="images/azure-webhook-6.png" />
    </Frame>
  </Step>

  <Step>
    Haz clic en "Finalizar" para guardar la configuración. Ignora el botón "Probar" porque podría intentar activar escaneos para archivos a los que no tienes acceso.
  </Step>

  <Step>
    Repite los mismos pasos para añadir un segundo webhook con "Pull request updated" como evento de activación. Usa la misma URL y cabeceras que el primer webhook.

    <Frame>
      <img src="https://mintcdn.com/corgea/7q8wUqu2NotZ53M6/images/azure-webhook-4-updated.png?fit=max&auto=format&n=7q8wUqu2NotZ53M6&q=85&s=1e54da6dfca8f7fb24868abf4e2da1ee" style={{ borderRadius: '0.5rem' }} alt="Evento de disparador actualizado de la pull request" width="1702" height="1736" data-path="images/azure-webhook-4-updated.png" />
    </Frame>
  </Step>

  <Step>
    Valida la configuración mediante la creación o actualización de una pull request. Si todo funciona, el historial del webhook mostrará un evento correcto y se iniciará un escaneo en la página de Escaneos de Corgea: [https://www.corgea.app/scans/](https://www.corgea.app/scans/).

    <Frame>
      <img src="https://mintcdn.com/corgea/uxLuQR4653lM43Tj/images/azure-webhook-7.png?fit=max&auto=format&n=uxLuQR4653lM43Tj&q=85&s=af6a9e70cbf68dc4a8b77a27e18718f9" style={{ borderRadius: '0.5rem' }} alt="Historia de Webhook" width="2770" height="1792" data-path="images/azure-webhook-7.png" />
    </Frame>

    <Frame>
      <img src="https://mintcdn.com/corgea/uxLuQR4653lM43Tj/images/azure-webhook-8.png?fit=max&auto=format&n=uxLuQR4653lM43Tj&q=85&s=4322d341d32fae066a49b6b221a5b22d" style={{ borderRadius: '0.5rem' }} alt="Escaneos de Corgea" width="3842" height="634" data-path="images/azure-webhook-8.png" />
    </Frame>
  </Step>
</Steps>

## Habilitar respuestas a comentarios de pull requests de Azure DevOps

Corgea puede recibir y responder a comentarios sobre pull requests de Azure DevOps.

### Requisitos previos

* Corgea Agent está habilitado para tu organización.
* Azure DevOps está conectado a Corgea.
* El PAT de la integración tiene el permiso `Code: Read & write`.
* Puedes crear suscripciones de Service Hooks en el proyecto de Azure DevOps.

### Configurar Service Hooks

1. En Azure DevOps, abre tu proyecto.
2. Ve a `Project settings` -> `Service hooks`.
3. Selecciona `Create subscription` o `+`.
4. Elige `Web Hooks`, luego selecciona `Next`.
5. Selecciona `Pull request commented on` como desencadenador.
6. Si lo deseas, limita el Service Hook a un repositorio o una rama de destino.
7. Introduce la URL del webhook:
   * Nube de Corgea: `https://www.corgea.app/azure_webhook/`
   * Despliegue privado: `https://<your-corgea-domain>/azure_webhook/`
8. Añade esta cabecera HTTP:

   `X-CORGEA-UUID: <your Azure DevOps integration UUID>`

   El UUID está disponible en la página de Integraciones de Corgea.
9. Establece `Resource details to send` en `All`.
10. Prueba la suscripción y luego selecciona `Finish`.

Los Service Hooks son específicos de cada proyecto. Repite estos pasos en cada proyecto de Azure DevOps que deba admitir respuestas a comentarios.

### Verifica la integración

1. Abre una pull request que contenga un hallazgo de Corgea.
2. Responde directamente a un comentario de Corgea, o dirígete a Corgea en el comentario.
3. Confirma que:
   * La entrega tiene éxito bajo `Project settings` -> `Service hooks`.
   * Corgea publica su respuesta en el mismo hilo de comentarios.

### Resolución de problemas

* Confirma que el Service Hook está habilitado y utiliza `Pull request commented on`.
* Confirma que `X-CORGEA-UUID` coincida con la integración de Corgea correspondiente.
* Asegúrate de que `Resource details to send` esté establecido en `All`.
* Comprueba que el PAT de Azure DevOps no haya caducado y tenga acceso `Code: Read & write`.
* Confirma que el Corgea Agent está habilitado para la organización.

`X-WEB-TOKEN` no es consumido por la aplicación Corgea para este flujo. Solo conserva ese encabezado si tu infraestructura externa lo requiere.
