Interconexión de solicitud de extracción

El proceso de pull requests ejecuta una serie de comprobaciones de estado de cumplimiento en una pull request para el repositorio de la aplicación especificada.

Es posible que los intentos de fusionar una solicitud de extracción en la rama maestra se bloqueen debido a comprobaciones de estado de conformidad anómalas. Al abrir o actualizar una solicitud de extracción en la rama maestra desencadena la ejecución de la interconexión de la solicitud de extracción. Puedes ejecutar tu propia configuración para los flujos de trabajo y las pruebas en Scripts personalizados.

Etapas y tareas

En la siguiente tabla se enumeran las tareas que se ejecutan en un PR Pipeline. Además, la tabla también proporciona una visión general de cada una de estas etapas:

  • Tarea o etapa: hace referencia al nombre de la etapa tal como se define en el archivo de configuración .pipeline-config.yaml.

  • Descripción breve: proporciona una explicación concisa de las acciones realizadas durante la ejecución de la etapa.

  • Personalización permitida: indica si los usuarios tienen la flexibilidad de modificar o sustituir el comportamiento predeterminado de la etapa insertando un script personalizado en el archivo .pipeline-config.yaml.

  • Implementación de referencia por defecto: Indica si los DevSecOps pipelines vienen con una implementación predefinida o por defecto para la etapa. Notablemente, para ciertas etapas como unit-tests o setup, el DevSecOps pipeline no ofrece ninguna implementación out-of-the-box. En su lugar, los usuarios deben proporcionar scripts personalizados o código adaptado a los requisitos de su aplicación.

  • Recopilación de pruebas: indica si la etapa realiza la recopilación de pruebas estándar. Cuando DevSecOps Pipeline proporcionan una implementación de referencia para una etapa, la recopilación de pruebas se realiza out-of-the-box. Sin embargo, si Usuario elige modificar o sustituir estas etapas predefinidas, debe asegurarse de que sus implementaciones personalizadas incluyan la recopilación de pruebas adecuada. La misma responsabilidad recae en los usuarios para las etapas en las que el DevSecOps pipeline no proporciona una implementación out-of-the-box, necesitando que ellos realicen la recopilación de pruebas. La columna indica la entidad (User/Pipeline) responsable de llevar a cabo la recopilación de pruebas.

  • Omitir permisible (aplicable a la versión > = v10): indica si los usuarios pueden optar por no ejecutar esta etapa estableciendo la propiedad de omisión en true en .pipeline-config.yaml. Sin embargo, se recomienda precaución al utilizar esta característica, especialmente para las etapas diseñadas para recopilar pruebas. Omitir estas etapas puede hacer que falten pruebas esenciales para la compilación.

Pedido de tuberías
Tarea o etapa Descripción breve Personalización permitida en .pipeline-config.yaml Implementación de referencia predeterminada Requisito de recopilación de pruebas Omitir permitido
start Configure el entorno de interconexión. No NA No
setup Configure el entorno de compilación y prueba. No NA No
detect-secrets Ejecute el escaneo de secretos de detección en el código de aplicación. NA No
unit-tests Ejecutar pruebas de unidad y pruebas de aplicación en código de aplicación. No NA
compliance-checks Ejecutar exploraciones de Code Risk Analyzer y otras comprobaciones de conformidad en repositorios de aplicaciones. NA
finish Consolidar el estado de la interconexión. NA

Para obtener más información sobre cómo personalizar las etapas utilizando el archivo .pipeline-config.yaml, consulte Scripts personalizados y Parámetros de interconexión.

Detectar exploración de secretos

La herramienta IBM Detect Secrets identifica dónde se ven los secretos en el código de la app. Encontrará más información sobre cómo configurar el repositorio para el escaneo aquí.

Exploraciones y comprobaciones en las comprobaciones de conformidad

Exploración o comprobación Descripción
Exploración de vulnerabilidad de Code Risk Analyzer Busca vulnerabilidades para todas las dependencias del paquete de app, las imágenes base del contenedor y los paquetes del sistema operativo. Se utiliza la herramienta Code Risk Analyzer.
Comprobación CIS de Code Risk Analyzer Ejecuta comprobaciones de configuración en los manifiestos de despliegue de Kubernetes. Se utiliza la herramienta Code Risk Analyzer.
Comprobación de la lista de materiales (BOM) de Code Risk Analyzer La BOM para un repositorio especificado que captura el pedigrí de todas las dependencias. Esta BOM se recopila a diferentes niveles de granularidad. Por ejemplo, la BOM captura la lista de imágenes base que se utilizan en la compilación, la lista de paquetes de las imágenes base y la lista de paquetes de app que se instalan sobre la imagen base. La BOM actúa como datos reales para los resultados analíticos y se puede utilizarse potencialmente para imponer las políticas. Se utiliza la herramienta Code Risk Analyzer.

| Comprobación del cumplimiento del repositorio | Comprueba que la configuración de protección de la rama es correcta. |

Estos scripts se ejecutan en todos los repositorios de aplicaciones de los que la interconexión tiene constancia. Para añadir repositorios a estas exploraciones, utilice la interfaz pipelinectl que se proporciona en la etapa de configuración.

Para obtener más información sobre la salida esperada de las etapas del script de usuario, consulte Scripts personalizados.

Trabajos de tareas

Exploraciones y comprobaciones de conformidad
Trabajo de tarea Descripción
code-pr-start Se clonan los repositorios de la app y de DevSecOps, y se establece el estado pendiente inicial para las comprobaciones de estado en los repositorios de Git Repos and Issue Tracking.
code-setup El marcador de posición para un script personalizado de configuración definido por el usuario en el que el usuario puede completar la configuración de interconexión.
code-detect-secrets Ejecuta el escaneo de secretos de detección para identificar dónde están visibles los secretos en el código de la app.
code-unit-tests El marcador de posición para un script personalizado de prueba definido por el usuario en el que el usuario puede ejecutar sus propias pruebas.
code-pr-finish Se ejecutan todas las comprobaciones de conformidad necesarias, se comentan los resultados en la solicitud de extracción y se establece su resultado en los repositorios de Git Repos and Issue Tracking.

Utilización de los cambios PR/MR para el repositorio de configuración de canalizaciones

Si el PR pipeline debe considerar los cambios de los archivos de configuración/scripts que vienen del PR/MR entonces, el config repo y la rama deben estar vacíos, lo que puede establecerse como se indica a continuación:

  • Las variables env one-pipeline-repo, one-pipeline-config-repo y pipeline-config-repo están vacías o no se especifican en las variables env
  • Las variables env one-pipeline-config-branch y pipeline-config-branch están vacías o no están especificadas en las variables env.

Se fusionan las solicitudes de extracción con problemas

Puede utilizar los derechos de administrador para fusionar solicitudes de extracción con comprobaciones de estado con error en el repositorio. Sin embargo, estas solicitudes de extracción registran una failure como resultado de sus pruebas para la tarea con error. Este resultado se incluye en el resumen de las pruebas y en la descripción de la solicitud de cambio.

Permitir la recopilación de pruebas en el proceso de relaciones públicas

La canalización de las relaciones públicas apoya la recopilación de pruebas junto con la gestión de problemas. Por defecto, el canal de relaciones públicas no recopila pruebas ni abre incidencias, pero los usuarios pueden optar por esta función. Para habilitar la recopilación de pruebas y la gestión de incidencias, establezca la variable de entorno collect-evidence-in-pr como una de las siguientes enum:

  • none: (por defecto) Establecer collect-evidence-in-pr a none, para evitar la recogida de pruebas en la tubería PR.
  • all: Establezca collect-evidence-in-pr en all para recopilar todas las evidencias independientemente del estado de la canalización del RP. Las incidencias se abrirán, actualizarán o cerrarán según el script collect-evidence.
  • success: Establezca collect-evidence-in-pr en success para recopilar evidencias solo si todo el canal de relaciones públicas se ejecutó correctamente. Si la cadena de relaciones públicas falla, las pruebas no se recopilarán ni se publicarán en el almacén de pruebas, y la gestión de problemas no se llevará a cabo.

Nota: Dado que, las tuberías PR se ejecutan generalmente con bastante frecuencia, la elección del modo correcto de collect-evidence-in-pr ahorrará de la recopilación de pruebas innecesarias. Se sugiere seleccionar el modo success durante la fase de desarrollo o en casos en los que se prevean fallos, para evitar la recogida de pruebas si falla la tubería.

Si la canalización PR desencadena una canalización Async, no se admite el modo collect-evidence-in-pr establecido en success. En caso de que el canal PR active un canal asíncrono, establezca collect-evidence-in-pr en all para recopilar evidencias.

Nota: Si el repositorio de la aplicación es un repositorio GitLab y la solicitud de fusión (MR) que se está contribuyendo proviene de un repositorio bifurcado, el usuario deberá proporcionar un valor para la variable git-token de entorno que tenga acceso tanto al repositorio de origen como al de destino para establecer los estados adecuados en la solicitud de fusión. Esto significa que el token git tendría que pertenecer a un usuario que sea colaborador tanto en el repositorio base como en el repositorio bifurcado y que el token tenga permisos para establecer el estado en una confirmación.

CVE en PR

Cuando se crea un PR y el canal de PR encuentra vulnerabilidades, el canal añade la información de la vulnerabilidad como la gravedad, el identificador cve, el paquete junto con su descripción y la solución si está disponible como comentario. Esto permite a los usuarios comprobar rápidamente las vulnerabilidades que deben corregirse en el PR, en lugar de tener que revisar los registros de las canalizaciones.

Para activar/desactivar esta función en el proceso de RP, existe un indicador opcional opt-in-pr-updates. Esta opción está activada por defecto.

Configuración de un canal de relaciones públicas para gestionar las relaciones públicas de la cola de fusión de Github

Una cola de fusiones es una función de Github que ayuda a aumentar la velocidad mediante la automatización de fusiones de solicitudes de extracción en una rama ocupada y asegurando que la rama nunca se rompa por cambios incompatibles. Más información sobre la configuración y el uso de Github Merge Queue aquí.

Aunque el objetivo de «Merge Queue» es aumentar la velocidad, es importante tener en cuenta que, para una solicitud de incorporación de cambios (PR) de « Git » determinada, el proceso de la PR se ejecutará dos veces: primero se ejecutará la PR «estándar». Una vez completado, ejecuta la solicitud de incorporación de cambios (PR) de la cola de fusión.

Cree un nuevo activador Git

Cree un nuevo activador Git o duplique uno existente. Mantenga todos los ajustes por defecto, sólo anule las siguientes propiedades:

  • Name: prefieren tener un nombre de disparador que refleje el contexto de la cola de fusión - ej: PR - Merge Queue
  • EventListener: seleccionar pr-listener-merge-queue
  • Trigger on: seleccionar CEL filter
    • CEL filter: entrar body.action == 'checks_requested'

Los PR de la cola de fusión utilizan ramas efímeras -creadas dinámicamente cuando el PR original se añade a la cola de fusión- a partir de las cuales se crea el PR de la cola de fusión. Como consecuencia, la carga útil del evento correspondiente Git (que activa el canal de solicitud de extracción) no contiene ninguna información sobre PR URL o HTML URL.

Irrelevante en el contexto de la cola de fusión, las siguientes funciones de DevSecOps deben desactivarse añadiendo las propiedades de texto correspondientes:

  • skip-merge-pr-to-base: debe establecerse en true (por defecto false)
  • opt-in-pr-updates: debe fijarse en 0 (por defecto 1)

Salva el gatillo.

Prueba del activador de la cola de fusión

  • Cree una nueva Pull Request contra la rama principal del repositorio del código fuente de la aplicación.
  • Observe: se activa el proceso "estándar" DevSecOps PR pipeline
  • Siguiendo en la página del PR, haga clic en Merge when ready, luego haga clic en Attempt merge when ready- esto hará que enqueue el PR pase a la Cola de Fusión una vez que el PR "estándar" haya finalizado.
  • Espere a que el "estándar" DevSecOps PR se complete con éxito
  • Observe: una vez que se ha completado la canalización de PR, el PR se añade a la cola de fusión y se activa el PR de la cola de fusión:
    • Esperar a que finalice la cola de fusión PR
    • Si tiene éxito, el PR se fusiona con un comentario como Merged via the queue into main with commit abcdefg
    • Si no se realiza correctamente (por ejemplo, si no se supera la comprobación de conformidad), el RP no se fusionará automáticamente y se eliminará de la cola de fusión.

Resumen de la carga útil PR

Carga útil

Una carga útil es un término genérico utilizado para describir un bloque estructurado de datos, normalmente en formato JSON, que se transmite como parte de un evento o solicitud. Las cargas útiles se utilizan habitualmente en webhooks, APIs y sistemas de automatización para transmitir información relevante en un formato legible por máquina.

Las cargas útiles pueden representar una amplia gama de contenidos en función del contexto, por ejemplo, metadatos de creación, actividad de los usuarios, actualizaciones de incidencias o, en este caso, detalles de solicitudes de extracción.

Carga útil PR

#cd-devsecops-pr-carga útil

La carga útil PR es una instancia específica de una carga útil que encapsula metadatos e información contextual sobre una solicitud pull (PR). Se genera cuando se produce un evento pull request y proporciona un acceso estructurado a los atributos clave relacionados con ese PR.

Esta carga útil incluye una amplia gama de datos como:

  • Título y descripción del RP
  • Autor y revisores
  • Ramas de origen (cabeza) y destino (base)
  • Historial de compromisos y referencias SHA
  • Detalles del repositorio
  • Marcas de tiempo, etiquetas, estados, etc

Aunque la carga útil completa contiene mucha información, actualmente sólo se extrae un subconjunto específico de campos y se expone como variables de entorno para su uso en canalizaciones, scripts y archivos de configuración.

Propiedades del entorno extraídas de la carga útil PR

Las siguientes variables de entorno se derivan actualmente de la carga útil PR y se utilizan activamente:

Nombre de variable Descripción
head-branch La rama de origen del PR (rama desde la que se fusiona)
head-sha El SHA de la última confirmación de la rama principal
head-repo El repositorio del que procede el RP
base-branch La rama de destino del PR (rama a la que se fusiona)
base-repo La referencia completa al repositorio base
base-repo-name El nombre del repositorio base
base-repo-owner El propietario (usuario u organización) del repositorio base
commit-timestamp La fecha y hora del commit más reciente en el PR
pr-url La API URL de la solicitud de extracción
pr-html-url La web (HTML) URL del pull request
pr-title El título de la pull request
action situación de la RP
base_ref rama de destino de PR

Estos valores se inyectan como variables de entorno para simplificar el acceso durante la ejecución en flujos de trabajo automatizados.

La carga útil PR incluye muchos campos adicionales además de los enumerados anteriormente. Sin embargo, actualmente sólo se aprovecha con fines operativos el subconjunto extraído. En caso necesario, puede proporcionarse acceso a la carga útil completa para casos de uso avanzado o futuras ampliaciones.