Personalización de canalizaciones DevSecOps para principiantes
Aprenda los conceptos básicos para adoptar DevSecOps y poner en marcha su primera aplicación o microservicio.
Acerca de las cadenas de herramientas de DevSecops
Has descubierto y probado IBM Cloud DevSecOps Continuous Integration (CI), Continuous Deployment (CD), y Continuous Compliance (CC) toolchains que implementan las mejores prácticas DevSecOps y herramientas de seguridad.
Ahora ya está listo para incorporar su propia aplicación o microservicio y adoptar DevSecOps.
Antes de empezar
Necesita los siguientes recursos para integrar una aplicación en una cadena de herramientas DevSecOps:
- Un repositorio de código fuente de aplicación Git que contiene el código de la aplicación, a menudo denominado "app repo".
- Un archivo
.pipeline-config.yaml. Este archivo es el archivo de configuración principal que utilizan las interconexiones CI, CD y CC para personalizar cualquiera de las etapas del proceso de ejecución de interconexión. Empiece con un archivo.pipeline-config.yamlde ejemplo, que puede descargar y personalizar para que se ajuste a sus necesidades. Todas las etapas excepto la etapa de inicio se pueden personalizar utilizando el archivo.pipeline-config.yaml. El archivo desencadena y ejecuta los scripts personalizados para crear, probar y desplegar la aplicación. Puede cambiar el nombre del archivo.pipeline-config.yamlo utilizar archivos diferentes para distintas interconexiones o desencadenantes. Asegúrese de que los valores de parámetro en la interconexión o desencadenante coinciden con el archivo de configuración. Para obtener más información, consulte Parámetros de interconexión.
IBM Cloud tiene las siguientes plantillas DevSecOps para que empieces:
- Aplicación de ejemploNode
- Aplicación de ejemplo de conformidadCodeEngine
- Aplicación de ejemplo de conformidad Go
- Aplicación de ejemplo de conformidadPython
- Aplicación de ejemplo de conformidad conNode / Cloudant
Cómo utilizan los repositorios las canalizaciones DevSecOps
Para crear, probar y desplegar su aplicación, las canalizaciones DevSecOps utilizan dos repositorios:
app-repo: el repositorio de aplicaciones, que contiene el código fuente de la aplicación.config-repo: el repositorio de configuración, que contiene los archivos y scripts YAML de configuración de interconexión.
En la aplicación de ejemploDevSecOps, estos dos repositorios son los mismos. La mayoría de los que adoptan DevSecOps empiezan con este patrón. Pero, a medida que incorpore más microservicios, es posible que sea necesario un repositorio de configuración de interconexión dedicado y separado. Puesto que el repositorio de aplicaciones y el repositorio de configuración son los mismos en la app de ejemplo, el repositorio se clona dos veces cuando se ejecutan las interconexiones, lo que puede provocar errores. Por lo tanto, es una buena práctica tener un repositorio de configuración independiente para alojar archivos de configuración y secuencias de comandos que se puedan compartir y reutilizar entre diferentes cadenas de herramientas y canalizaciones DevSecOps. Para obtener más información sobre cómo personalizar el repositorio de configuración, consulte los pasos de personalización avanzados.
DevSecOps consideran que los scripts app-repo y config-repo son dos repositorios distintos. Los scripts clonan los repositorios dos veces durante la etapa de inicio de la interconexión. Estos clones se conocen como
app-repo y one-pipeline-config-repo. Cada etapa se ejecuta en el contexto de config repo.
Incorporación de una aplicación
Para simplificar, cree y pruebe una cadena de herramientas CI DevSecOps con la aplicación de ejemplo Node antes de continuar.
Hay tres formas principales de integrar su primera aplicación en una cadena de herramientas de DevSecOps CI existente:
- Opción 1: añada el repositorio de aplicaciones a la cadena de herramientas y utilice el repositorio de aplicaciones de ejemplo como repositorio de configuración.
- Opción 2: Sustituya el repositorio de la aplicación de ejemplo por el repositorio de la aplicación.
- Opción 3: Añada el repositorio de aplicaciones a la cadena de herramientas y utilice un repositorio de configuración dedicado. Para obtener más información sobre esta opción, consulte los pasos de personalización avanzada.
Las cadenas de herramientas DevSecOps utilizan repositorios Gitlab gestionados por IBM, también conocido como GRIT. En su lugar, se pueden utilizar otros proveedores de Git. El repositorio de la app puede estar alojado en GitHub o Gitlab, por ejemplo.
Opción 1: Añadir el repositorio de aplicaciones y utilizar el repositorio de aplicaciones de ejemplo como repositorio de configuración
Para añadir el repositorio de aplicaciones a la cadena de herramientas y utilizar el repositorio de aplicaciones de ejemplo como repositorio de configuración, realice los pasos siguientes:
- En la consola ' IBM Cloud ', haz clic en el icono ' Menú ' '
> ' Automatización de plataformas > ' Cadenas de herramientas, y selecciona la cadena de herramientas que quieras editar.
- Pulse Añadir.
- Seleccione dónde se aloja el repositorio de la app, ya sea
GitlaboGitHub. - Utilice el servidor predeterminado o añada uno nuevo.
- Introduzca la dirección de correo electrónico ( URL ) del servidor personalizado y el token de acceso personal.
- Pulse Crear integración.
- Introduzca el repositorio de código fuente de su aplicación URL.
- Pulse Crear integración.
A continuación, especifique el repositorio de aplicación de ejemplo como repositorio de configuración completando los pasos siguientes:
- En la consola ' IBM Cloud ', haz clic en el icono ' Menú ' '
> ' Automatización de plataformas > ' Cadenas de herramientas, y selecciona la cadena de herramientas que quieras editar.
- Pulse pr-pipeline.
- Pulse Valores y vaya a la pestaña Propiedades de entorno.
- Edite el valor de la propiedad
pipeline-config-repopara que apunte al repositorio de aplicaciones de muestra URL. - Vuelva a la cadena de herramientas de AC.
- Pulse ci-pipeline.
- Pulse Valores y vaya a la pestaña Propiedades de entorno.
- Edite el valor de la propiedad
pipeline-config-repopara que apunte al repositorio de aplicaciones de muestra URL.
Las interconexiones de AC ahora utilizan el repositorio de apps de ejemplo pipeline-config como repositorio de configuración.
Opción 2: Sustituir el repositorio de aplicaciones de ejemplo por su propio repositorio de aplicaciones
Para sustituir el repositorio de apps de ejemplo por su propio repositorio de apps, realice los pasos siguientes:
- En la consola ' IBM Cloud ', haga clic en el icono ' Menú ' '
> ' Automatización de plataformas > ' Cadenas de herramientas, y seleccione la cadena de herramientas CI que desea editar.
- Busque el repositorio de código fuente de aplicación de ejemplo y seleccione Configurar.
- Sustituya el repositorio URL por el repositorio de código fuente de su aplicación URL.
- Pulse Guardar integración.
Después de sustituir el repositorio de la app de ejemplo, asegúrese de que el nuevo repositorio de la app contiene un archivo .pipeline-config.yaml y los scripts correspondientes. Copie el archivo .pipeline-config.yaml y los scripts del repositorio de aplicaciones de ejemplo en el repositorio de aplicaciones o utilice este archivo de configuración de ejemplo.
Configuración de las interconexiones de AC
Después de añadir el repositorio de aplicaciones, debe configurar las interconexiones de AC para que funcionen con el nuevo repositorio.
Configuración de los desencadenantes de interconexión
Los desencadenantes predeterminados utilizan el repositorio de aplicaciones de ejemplo, por lo que debe actualizarlos para utilizar el repositorio de apps. Verifique los valores del desencadenante y modifíquelos si es necesario para asegurarse de que todos los desencadenantes apuntan al repositorio de la app. Complete los pasossiguientes:
- En la consola ' IBM Cloud ', haga clic en el icono ' Menú ' '
> ' Automatización de plataformas > ' Cadenas de herramientas, y seleccione la cadena de herramientas CI que desea editar.
- Pulse pr-pipeline.
- Edite el desencadenante de relaciones públicas ( Git, PR ) y proporcione el repositorio de aplicaciones ( URL ) y la sucursal.
- Pulse Guardar.
- Vuelva a la cadena de herramientas de AC y pulse ci-pipeline.
- Edite el desencadenador CI ( Git ) y proporcione el repositorio de aplicaciones URL y la sucursal. Asegúrese de que el nombre de la aplicación sea correcto en la sección Propiedades.
- Pulse Guardar.
- Edite el Desencadenante manual. En la sección Propiedades, asegúrese de que el nombre de la aplicación sea correcto.
- Asegúrese de que las propiedades del repositorio y de la rama sean correctas y apunten al repositorio de la app.
Configuración del archivo .pipeline-config.yaml
Copie el archivo .pipeline-config.yaml del repositorio de aplicaciones de ejemplo en el repositorio de aplicaciones o utilice este archivo de configuración de ejemplo.
Tanto para pr-pipeline como para ci-pipeline, asegúrese de que los parámetros pipeline-config, pipeline-config-branch y pipeline-config-repo se han establecido correctamente
y coinciden con la configuración. Si estos parámetros no se establecen correctamente, es posible que confirme los cambios en la rama incorrecta, lo que genera un error en la interconexión.
Si la variable pipeline-config-repo no está establecida, los pipelines de DevSecOps asumen que es el mismo repositorio que el repositorio del código fuente de su aplicación.
Uso de scripts personalizados con DevSecOps
El archivo ' pipeline-config.yaml ' es el componente clave que orquesta y personaliza el comportamiento del pipeline DevSecOps. El archivo utiliza scripts para crear, probar y desplegar la aplicación. El archivo define cómo se
configuran las etapas y qué scripts se ejecutan. Para obtener más información, consulte scripts personalizados.
Hay dos categorías principales de scripts que se utilizan en los pipelines DevSecOps:
- Scripts relacionados con la aplicación que se utilizan para crear, probar y desplegar la aplicación. Estos scripts son su propia responsabilidad y están fuera del alcance del soporte DevSecOps. Puesto que estos scripts no tienen una implementación predeterminada, debe añadirlos a la aplicación o al repositorio de configuración. Es posible que tenga que extraer los scripts de Jenkins u otro origen.
- Scripts de seguridad y conformidad que ejecutan exploraciones de seguridad y conformidad. La mayoría se proporcionan con scripts predeterminados que puede alterar temporalmente para utilizar su propia implementación personalizada.
Excepto para la etapa de inicio, cada etapa de una interconexión de AC, CD o CC se puede personalizar con sus propios scripts para alterar temporalmente la implementación predeterminada de la etapa. La etapa de inicio no se puede personalizar con sus propios scripts.
Aunque los scripts Bash se proporcionan como ejemplos, puede crear, probar y desplegar la aplicación utilizando otros lenguajes como Python o Go. Asegúrese de que está utilizando el image correcto para cada etapa. Consulte las
imágenesDocker en la sección Pipelines DevSecOps.
Consulte la tabla Etapas y tareas que resumen diversas etapas del conducto de AC. La tabla también proporciona una información consolidada sobre si la etapa tiene una implementación de referencia predeterminada, si se puede personalizar o omitir, o si hay una recopilación de pruebas explícita necesaria para la ejecución de la etapa.
Migración de Jenkins o Travis a DevSecOps
La mayoría de los que adoptan DevSecOps no empiezan de la nada. La mayoría de los adoptantes ya cuentan con procesos continuos de integración y entrega continua, junto con una biblioteca de scripts correspondiente. Estos procesos normalmente se implementan utilizando Jenkins, Travis o alguna otra plataforma.
Puntos clave para migrar a DevSecOps:
- El archivo de configuración
pipeline-config.yamldebe reflejar cómo están orquestadas actualmente las interconexiones CI y CD. Las etapas y los pasos deben asignarse a " etapas del proceso DevSecOps. - Debe utilizar los mismos scripts, imágenes base y variables que ya están en su lugar.
- Las propiedades de secreto deben migrarse a un almacén de secretos.
- Es necesario añadir propiedades no secretas como propiedades de conducto o desencadenante.
Trabajo en modalidad de desarrollo
Puede utilizar la modalidad de desarrollo para interconexiones CI y CD para probar la implementación del archivo .pipeline-config.yaml y los scripts. La interconexión en modalidad de desarrollo no ejecuta ninguna tarea relacionada
con la seguridad o la conformidad, lo que reduce el tiempo de ejecución para la interconexión. Para obtener más información, consulte ejecución de pipelines en modalidad de desarrollo.
Utilice la modalidad de desarrollo sólo para fines de desarrollo. El modo de desarrollo no sustituye a las canalizaciones oficiales de CI y CD de DevSecOps, que siguen siendo las implementaciones de referencia.
Configuración de la interconexión de CD
En el flujo de trabajo de integración continua y despliegue continuoDevSecOps, el proceso de integración continua envía actualizaciones al repositorio de inventario
durante la fase " deploy-release " del proceso de integración continua. Para obtener más información, consulte el script release.sh de ejemplo.
En este flujo de trabajo, varios activadores de CI y diferentes cadenas de herramientas de CI DevSecOps pueden contribuir al mismo repositorio de inventario.
Al contrario que la interconexión de AC, el script de despliegue que utiliza la interconexión de CD debe adaptarse de los scripts actuales en Jenkins, Travis o alguna otra plataforma para utilizar las entradas del repositorio de inventario.
Este código de ejemplo muestra cómo recuperar información del inventario y utilizarla para ejecutar un despliegue de Kubernetes.
Localización de scripts DevSecOps
Los pipelines DevSecOps vienen con herramientas de seguridad y escaneo predeterminadas y scripts asociados.
Por ejemplo, el inicio de un registro de etapa hace referencia al script predeterminado:
scan-artifact:
image: icr.io/continuous-delivery/pipeline/pipeline-base-ubi:3.24
dind: true
dind_image: icr.io/continuous-delivery/toolchains/devsecops/docker:20.10.21-dind
abort_on_failure: false
image_pull_policy: IfNotPresent
script: |
#!/bin/sh
"/opt/commons/scan-artifact/scan.sh"
/opt/commons/scan-artifact/scan.sh es el script predeterminado.
El pipeline DevSecOps proporciona la ruta a la carpeta raíz de la librería commons en una variable de entorno llamada ' COMMONS_PATH, que está
disponible en todas las tareas y pasos. Para acceder a un script que está incorporado en la imagen base de conformidad, utilice la variable COMMONS_PATH con la carpeta de script que necesita:
source "${COMMONS_PATH}/<script folder in commons>/<script file name>
Consulte la tabla Etapas y tareas que resume varias etapas de la interconexión de CD. La tabla también proporciona una información consolidada sobre si la etapa tiene una implementación de referencia predeterminada, si se puede personalizar o omitir, o si hay una recopilación de pruebas explícita necesaria para la ejecución de la etapa.
Propiedades de entorno
Los pipelines DevSecOps vienen con propiedades de entorno predefinidas, pero puedes añadir tantas propiedades personalizadas como necesites. Puede acceder a estos valores
de propiedades en los scripts utilizando Mandato get_env.
Después de añadir la propiedad y su valor predeterminado opcional al conducto o desencadenante, utilice el mandato get_env en el script para recuperar el valor de la propiedad. El ejemplo siguiente recupera el valor de la propiedad
my-variable:
MY_VARIABLE=$(get_env my-variable "")
También puede alterar dinámicamente el valor de una propiedad en un script utilizando Mandato set_env. El ejemplo siguiente altera temporalmente el valor
de la propiedad my-variable:
set_env my-variable new-value
Omitir etapas
Algunas etapas pueden ser irrelevantes. Por ejemplo, es posible que no esté creando ninguna imagen de Docker o que todavía no haya implementado pruebas de aceptación. Si desea omitir una etapa, puede editar el archivo .pipeline-config.yaml para incluir exit 0 o establecer la variable skip en true.
El ejemplo siguiente añade exit 0 para omitir una etapa:
scan-artifact:
image: icr.io/continuous-delivery/pipeline/pipeline-base-ubi:3.24
dind: true
dind_image: icr.io/continuous-delivery/toolchains/devsecops/docker:20.10.21-dind
abort_on_failure: false
image_pull_policy: IfNotPresent
skip: false
runAfter: null
script: |
#!/bin/sh
exit 0
"/opt/commons/scan-artifact/scan.sh"
Imágenes Docker en los procesos DevSecOps
De forma predeterminada, las canalizaciones DevSecOps utilizan IBM Continuous Delivery. Estas imágenes contienen algunas de las herramientas más comunes como, por ejemplo, Node y Java para ejecutar los scripts. También puede utilizar imágenes de otros proveedores o sus propias imágenes personalizadas que contengan las herramientas que prefiera.
Las imágenes Docker utilizadas por las canalizaciones DevSecOps se especifican en el archivo " .pipeline-config.yaml ". Cada etapa
puede utilizar una imagen diferente.
Cambio de la versión de la imagen
En función de sus requisitos, es posible que tenga que utilizar una versión diferente de una imagen. Para cambiar la versión de la imagen, edite el archivo .pipeline-config.yaml. Por ejemplo, si ha hecho referencia a la siguiente
imagen en el archivo YAML icr.io/continuous-delivery/pipeline/pipeline-base-ubi:3.24, si la cambia a icr.io/continuous-delivery/pipeline/pipeline-base-ubi:3.27 se utiliza la versión 3.27
de la imagen.
De la misma forma, cambie dind_image para la etapa:
scan-artifact:
image: icr.io/continuous-delivery/pipeline/pipeline-base-ubi:3.24
dind: true
dind_image: icr.io/continuous-delivery/toolchains/devsecops/docker:20.10.21-dind
(...)
Obtención de soporte
IBM Cloud watsonx, que funciona con la tecnología de IBM, está diseñado para ayudarle a aprender a trabajar en IBM Cloud y a crear soluciones con el catálogo de ofertas disponible. Consulte Cómo obtener ayuda del asistente de IA.
Si todavía no puede resolver el problema, puede abrir un tíquet de soporte de IBM. Para obtener más información, consulte Creación de casos de soporte. Y, si desea enviar comentarios, consulte Envío de comentarios.