Configuración de los flujos de trabajo de integración continua de Tekton con DevSecOps

Con este tutorial, puede configurar la tubería de integración continua (CI) Tekton y crear su cadena de herramientas con el cumplimiento.

Antes de empezar

(*) Kubernetes cluster: requerido sólo durante la configuración - puede cambiarse después de la creación de la Toolchain. No es obligatorio crear un clúster dedicado, especialmente si se utiliza un destino de despliegue diferente (como CodeEngine ). Puede introducir una clave API IBM Cloud capaz de acceder a cualquier clúster.

La canalización CI utiliza el servicio de firma de código GaraSign para firmar los artefactos de compilación que requieren registro e incorporación. GaraSign utiliza la red interna IBM. El acceso a esta red está disponible dentro de IBM trabajadores compartidos que tienen acceso a la red. IBM se pueden utilizar trabajadores compartidos con acceso a la red interna 9.X.

  • Vea el siguiente vídeo:

Inicie la configuración de la cadena de herramientas de integración continua

El servicio Continuous Delivery proporciona plantillas que le guían a través de la configuración de la cadena de herramientas y crean procesos en un orden lógico. Un indicador de progreso muestra los pasos para completar la configuración. Siga los pasos para acceder a la plantilla de la cadena de herramientas CI.

  1. En la consola ' IBM Cloud ', haz clic en el icono ' Menú ' ' Icono del menú > ' Automatización de plataformas > ' Cadenas de herramientas.
  2. En la página Cadenas de herramientas, pulse Crear cadena de herramientas.
  3. Echa un vistazo a « Infraestructura como código ».
  4. Haz clic en la baldosa CI - Desarrollar infraestructura segura como código con DevSecOps.

Configurar la cadena de herramientas CI

La página Bienvenida resume el propósito de la cadena de herramientas junto con punteros a la documentación y materiales relacionados.

  1. Pulse Iniciar.

  2. Introduzca un Nombre de la cadena de herramientas dentro de su cadena de herramientas para la misma región y grupo de recursos en el IBM Cloud.

  3. Selecciona una región en la lista desplegable.

  4. Selecciona un grupo de recursos de la lista desplegable.

  5. Pulse Continuar.

    Sólo puede avanzar al paso siguiente una vez completada y validada la configuración del paso actual. Siempre puedes hacer clic en «Atrás» para ver los pasos anteriores del instalador guiado. El instalador de la cadena de herramientas conserva todos los valores de configuración de los pasos sucesivos.

    Algunos pasos incluyen un botón Cambiar a configuración avanzada. Estos pasos te muestran, de forma predeterminada, la configuración mínima. No obstante, los usuarios avanzados que necesiten un control más preciso pueden hacer clic en el botón « Cambiar a configuración avanzada » para acceder a las opciones de la integración subyacente.

Configurar integraciones de herramientas de integración continua

Revise la configuración predeterminada y proporcione las configuraciones definidas por el usuario siempre que sea necesario para configurar la integración de la herramienta CI. Configure varios repositorios durante la instalación. Puede clonar los repositorios de ejemplo o puede utilizar los suyos propios, pero la cadena de herramientas sólo admite la vinculación a los repositorios Git Repos and Issue Tracking existentes.

Aplicación

Revise la información predeterminada de los valores de la cadena de herramientas:

  1. Puede aceptar la configuración por defecto que se proporciona en la plantilla.
  2. Haz clic en «Continuar»

Inventario

El repositorio de inventario registra detalles de artefactos creados por las cadenas de herramientas de CI.

  1. Puede aceptar la configuración por defecto que se proporciona en la plantilla.
  2. Pulse Continuar.

Problemas

El repositorio de incidencias registra las incidencias que se encuentran mientras se ejecuta el canal CI.

  1. Puede aceptar la configuración por defecto que se proporciona en la plantilla.
  2. Haz clic en «Continuar»

Secretos

Varias herramientas en esta cadena de herramientas, y posiblemente en sus scripts personalizables, requieren secretos para acceder a recursos privilegiados. Una clave de API de IBM Cloud es un ejemplo de un secreto de este tipo. Almacene estos secretos de forma segura en una herramienta de gestión de secretos, como por ejemplo IBM Key Protect for IBM Cloud, IBM Cloud® Secrets Manager o HashiCorp Vault. La herramienta de gestión de secretos puede integrarse en la cadena de herramientas para que pueda referenciar fácilmente los secretos en su pipeline Tekton.

  1. Este tutorial utiliza IBM Cloud® Secrets Manager como bóveda para los secretos. Los campos Región, Grupo de recursos y Nombre del servicio se rellenan automáticamente en función de las opciones disponibles. Haz clic en los indicadores desplegables para ver las demás opciones.
  2. Escriba su Secrets Manager nombre de instancia.
  3. Seleccione el tipo de autorización en la lista desplegable.
  4. Pulse Continuar.

Almacenamiento de pruebas

El repositorio de evidencias almacena todas las evidencias y artefactos que son generados por el DevSecOps CI pipeline.

  1. Active el control deslizante del cubo IBM Cloud Object Storage para almacenar todas las pruebas en el cubo IBM Cloud Object Storage que se puede configurar en la página siguiente.
  2. Acepta la configuración por defecto.
  3. Pulse Continuar.

Nube Object Storage Cubo

Debe disponer de la instancia IBM Cloud Object Storage y de un cubo para actuar como almacén de pruebas de cumplimiento.

  1. Los campos Cloud Object Storage instance, Bucket name y Cloud Object Storage endpoint se rellenan automáticamente.
  2. Introduzca su clave API de ID de servicio.
    • Es preferible: Se puede importar una clave existente de un almacén de secretos haciendo clic en el icono de la clave.
    • Una clave ya existente se puede copiar y pegar.
  3. Pulse Continuar.

El campo «punto final» es opcional. Se recomienda seleccionar o proporcionar el punto final durante la configuración de la cadena de herramientas o durante la ejecución de la canalización.

Desplegar

Configure el objetivo de inventario y el clúster de Kubernetes en el que está implementada la aplicación:

  1. La dirección predeterminada de Nombre de la aplicación es hello-compliance-app.

  2. Introduce tu clave API de « IBM Cloud ». La clave API se utiliza para interactuar con la herramienta CLI de IBM Cloud en diversas tareas.

    • Es preferible: Se puede importar una clave existente de un almacén de secretos haciendo clic en el icono de la clave.
    • Una clave ya existente se puede copiar y pegar.
    • Desde aquí se puede crear una nueva clave haciendo clic en el botón « Nuevo + ».

    La clave API recién generada puede guardarse inmediatamente en una bóveda de secretos.

  3. Si la clave de API es válida y tiene acceso suficiente, el Container Registry, Container Registry namespace, Dev cluster region, Resource group, Cluster name, Cluster namespace se rellenan automáticamente. Puedes modificar cualquiera de estos campos para adaptarlos a tu configuración.

  4. Pulse Continuar.

Firma de artefacto

Los artefactos son construidos por la cadena de herramientas y registrados en el inventario y deben ser firmados antes de ser desplegados en producción. El pipeline utiliza Skopeo como herramienta por defecto para proporcionar la capacidad de firma de artefactos. Puede utilizar una clave GPG existente o crear un nuevo par de claves GPG.

  1. Introduzca la GnuPG. También puede crear una nueva clave GPG haciendo clic en NUEVA. Para obtener más información, consulte Generación de una clave GPG.
  2. Pulse Continuar.

DevOps Insights

El IBM Cloud DevOps Insights está incluido en la cadena de herramientas. Vea los resultados de las pruebas de cada compilación, de cada implementación y entorno.

  1. Acepta la configuración por defecto.
  2. Pulse Continuar.

Herramientas opcionales

Slack

Configura el Slack para recibir notificaciones sobre tus pull requests, o eventos del CI pipeline. También puede añadir la herramienta Slack después de la creación de la cadena de herramientas.

  1. Introduce tu webhook de Slack. Para obtener más información, consulte Slack webhook.
  2. Introduce tu Canal de Slack para publicar el mensaje.
  3. Introduce el Nombre del equipo de la banda. Por ejemplo, si tu equipo es URL https://team.slack.com, el nombre del equipo es team.
  4. Elegir los eventos para los que desea recibir notificaciones para Notificaciones automatizadas de Slack.
  5. Pulse Continuar.

Cadena de herramientas común DevOps Insights

DevOps Insights Se puede incluir opcionalmente en la cadena de herramientas creada y, tras cada comprobación de conformidad, se publican los resultados. La cadena de herramientas puede utilizar una instancia existente de « DevOps Insights » para publicar los registros de implementación en Insights. Puedes vincular una integración de DevOps Insights desde otra cadena de herramientas indicando el ID de la integración.

  1. Acepta la Cadena de herramientas actual.
  2. Pulse Continuar.

Puede copiar el ID de la cadena de herramientas desde el URL de la cadena de herramientas. La página « URL » de una cadena de herramientas sigue este patrón: https://cloud.ibm.com/devops/toolchains/<toolchain-ID-comes-here>?env_id=ibm:yp:us-south. Si la dirección URL es: https://cloud.ibm.com/devops/toolchains/aaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee?env_id=ibm:yp:us-south, entonces el ID de la cadena de herramientas es: aaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee. Incluya sólo el DNI, no la dirección URL completa.

También puedes configurar un entorno de destino para las interacciones de « DevOps Insights ». Este parámetro es opcional, y se utiliza en lugar del entorno de destino del inventario.

DevOps Insights

Puede crear una instancia de DevOps Insights que se utilizará para la cadena de herramientas. Si no se requiere ninguna configuración, el proceso CI utiliza automáticamente la instancia de insights incluida en la cadena de herramientas.

Trabajador privado de Delivery Pipeline

Los artefactos creados por la cadena de herramientas y registrados en el inventario deben firmarse mediante GaraSign,, un servicio de firma de código desarrollado por Garantir, antes de que las imágenes puedan desplegarse en producción. Para habilitar la firma de artefactos de GaraSign, debe tener un trabajador privado de TaaS y un certificado de firma CISO de IBM.

La integración de la herramienta Delivery Pipeline trabajador privado conecta con uno o varios trabajadores privados que pueden ejecutar cargas de trabajo de canalización de entregas de forma aislada.

SonarQube

Configurar SonarQube como la herramienta de análisis de código estático para la cadena de herramientas. SonarQube ofrece una visión general del estado general y de la calidad del código fuente e identifica los problemas del nuevo código. Los analizadores de código estático detectan errores difíciles de detectar, como referencias a punteros nulos, errores lógicos y fugas de recursos, en múltiples lenguajes de programación.

  1. Acepta la configuración predeterminada.
  2. Pulse Continuar.

Creación de la cadena de herramientas de integración continua

  1. En la página Resumen, pulse Crear.
  2. Espera a la creación de la cadena de herramientas. Este proceso puede durar unos minutos.

Explore la cadena de herramientas de integración continua

Ahora que la cadena de herramientas de CD se crea con dos tuberías como se muestra en la captura de pantalla. Haga clic en la ficha ci-pipeline para abrir y ejecutar el proceso de promoción.

caption-side=bottom"
DevSecOps cadena de herramientas de integración continua cadena de herramientas de integración continua DevSecOps

Ejecutar el proceso PR-CI

Para iniciar el proceso « ci-pr pipeline », debes crear una solicitud de fusión en el repositorio de tu aplicación.

  1. En la página de la cadena de herramientas CI, haga clic en la ficha pr pipeline. Por defecto, se crea con el nombre compliance-app-<timestamp>.

  2. Crear una rama a partir de la rama maestra.

  3. Actualiza el código de la aplicación o añade un archivo Léame y guarda los cambios.

  4. Enviar solicitud de fusión.

  5. En la página de la cadena de herramientas de CI, haz clic en el mosaico « pr-pipeline ». Comprueba que el ci-pr pipeline se activa con la creación de la solicitud de fusión.

  6. Espera a que finalice la ejecución de « ci-pr pipeline ». La solicitud de fusión correspondiente que se encuentra en el repositorio de su aplicación está en el estado Pending hasta que todas las etapas de la tubería PR terminan con éxito.

  7. Una vez que se haya ejecutado correctamente la canalización PR, haga clic en la canalización para explorar los numerosos pasos que se han completado y para ver la página. Para editar y volver a enviar la solicitud de fusión, siga los pasos del 3 al 7.

    caption-side=bottom"
    DevSecOps Éxito de las relaciones públicas Éxito de las relaciones públicas DevSecOps

Flujo simplificado de tareas en el pipeline

En el flujo de tareas de DevSecOps PR pipeline, se omiten las tareas de utilidad. Por ejemplo, actualización de comprobación de estado en GitHub, obtención de credenciales, etc. En el mundo DevSecOps, shift left es una práctica que previene y encuentra problemas como defectos, vulnerabilidades de seguridad. Shift left también realiza comprobaciones de conformidad en una fase temprana del proceso de entrega del software, como se muestra en la figura.

caption-side=bottom"
DevSecOps Tareas de relaciones públicas Tareas de relaciones públicas de DevSecOps

  • Comprobaciones que se pueden ejecutar en el código/repositorio y que no necesitan el built. El artefacto debe ejecutarse lo antes posible para evitar que el código no conforme se fusione con la rama maestra del repositorio. Las pruebas no se recogen de la cadena de relaciones públicas. El objetivo del oleoducto es desplazar los controles de cumplimiento, lo más a la izquierda posible.
  • Todas las comprobaciones se realizan cuando se ejecuta una canalización. Aunque falle una comprobación anterior, el proceso continúa con la siguiente. Para comprobar si se ha producido algún error en la ejecución, debes revisar el paso final de tu pipeline, que cuenta con un evaluador de pipeline.
  • Si está intentando fusionar una solución de emergencia y desea eludir los controles de conformidad. Añada una etiqueta a su solicitud de fusión para indicar la corrección. Se debe proporcionar la misma etiqueta al ejecutar el proceso de CD.

Ejecución de la interconexión de solicitud de extracción

Puedes iniciar el proceso de integración continua de una de las siguientes maneras:

  • Automáticamente: después de una interconexión de solicitud de extracción satisfactoria, aprobando y fusionando la solicitud de extracción en la rama maestra.
  • Manualmente: Para activar el proceso de CI manualmente, selecciona la ficha del proceso de entrega, haz clic en « Ejecutar proceso » y selecciona « Activación manual ».

En este tutorial, el proceso de integración continua se activó después de que fusionaras los cambios en el código con la rama «master» del repositorio de tu aplicación.

  1. En la página de la cadena de herramientas de CI, haz clic en el mosaico « ci-pipeline ».
  2. Haga clic en Ejecutar junto al nombre de su canalización. Observe que se está ejecutando una canalización. Espera a que finalice la ejecución del proceso de automatización.
  3. Después de que la ejecución de la tubería de CI sea exitosa, haga clic en la tubería para explorar los pasos completados para ver la página como se muestra en la captura de pantalla.

Ejecución de la interconexión de integración continua

En este documento, el proceso de integración continua se activó después de que fusionaras los cambios de código en la rama «master» del repositorio de tu aplicación.

  1. En la página de la cadena de herramientas de CI, haz clic en el mosaico « ci-pipeline ».
  2. Fíjese que se está llevando a cabo una ejecución de interconexión. Espere a que se complete la ejecución de la interconexión.

Una vez que el proceso del pipeline de CI se haya completado con éxito, puedes hacer clic en las tareas del pipeline para ver los pasos que se han completado.

DevSecOps Canalización CI correcta
Canalización CI DevSecOps correcta

Flujo simplificado de tareas en el pipeline

En el flujo de tareas de DevSecOps CI pipeline, se omiten las tareas de utilidad. Por ejemplo, actualización de comprobación de estado en GitHub, obtención de credenciales, etc. Las tareas de color verde están generando una salida de evidencias.

DevSecOps Tareas CI 5.
Figura DevSecOps CI Tasks

Los datos de todas las comprobaciones de conformidad realizadas en el proceso de CI se recopilan en el repositorio de datos de comprobación que se proporcionó durante la configuración de la cadena de herramientas. Las pruebas de CI se encuentran disponibles en raw/ci/<pipeline-run-id>/*.json.

Los datos de prueba se publican en la instancia de DevOps Insights dentro de la cadena de herramientas. Puede navegar haciendo clic en la tarjeta de herramientas DevOps Insights de la cadena de herramientas. Puede revisar las pruebas recopiladas en la página Panel de control de calidad.

caption-side=bottom"
DevSecOps Pruebas de IC Pruebas de IC DevSecOps

Para comprobar si se ha producido algún error en la ejecución de tu pipeline, debes revisar el paso final de la misma, donde se encuentra el evaluador de la pipeline.

Visualización de la aplicación en ejecución

Una vez completada con éxito la ejecución del proceso de integración continua, la aplicación de ejemplo se implementa en tu clúster de Kubernetes y se ejecuta en el espacio de nombres «dev».

La aplicación URL se encuentra al final del registro, en el paso « run stage » de la tarea « deploy-dev » de la ejecución del canal de integración continua. Utiliza ese comando « URL » para comprobar que la aplicación se está ejecutando.

caption-side=bottom"
DevSecOps CI sample app DevSecOps CI sample app

Configurar conducto

Para añadir una propiedad de texto commit-id.

  1. Pulse Añadir propiedad.
  2. Seleccione Propiedades de texto.

Si activas el pipeline manualmente sin commit-id, el pipeline toma el último commit ID de la rama master de tu app.

Ejemplo

ID de confirmación

Para añadir los parámetros de activación.

  1. Pulse Ejecutar conducto.
  2. Selecciona « Disparo manual ».
  3. Pulse Ejecutar.