IBM Cloud Docs
Conducto de despliegue continuo

Conducto de despliegue continuo

El canal de despliegue continuo genera todo el contenido de las pruebas y el resumen de las solicitudes de cambio. La canalización despliega los artefactos de compilación en un entorno, como el de preparación o producción, y a continuación recopila, crea y carga todos los archivos de registro, pruebas y artefactos existentes en el almacén de pruebas.

Etapas y tareas

La siguiente tabla enumera las tareas que se ejecutan en un CD 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 predeterminada: Indica si los pipelines DevSecOps vienen con una implementación predefinida o por defecto para la etapa. En particular, para ciertas etapas como " unit-tests o " setup, el proceso DevSecOps no ofrece ninguna implementación lista para usar. 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 proporciona 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 canal de DevSecOps no proporciona una implementación lista para usar, lo que les obliga a realizar 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.

Etapas y tareas
Tarea o etapa Descripción breve Personalización permitida en .pipeline-config.yaml Implementación de referencia predeterminada Recogida de pruebas Saltar permitido
start Se configura el entorno de interconexión. No N/D No
setup Se configura el entorno de compilación y pruebas. No N/D No
verify-peer-review Asegúrese de que se hayan aprobado las solicitudes de extracción previstas para el despliegue actual. Esta etapa generará una lista de solicitudes de extracción enlazadas con el despliegue en curso. Si alguna solicitud de extracción permanece sin aprobar, el despliegue se detendrá. Conducto
verify-artifact Valide la firma correcta de la imagen planificada para el despliegue. Si la imagen no tiene la firma adecuada, el despliegue se obstruirá y se iniciará el proceso de recopilación de pruebas correspondiente. Conducto
change-request Se genera la solicitud de cambio y cree el resumen de pruebas. No Conducto No
deployment Se despliegan los artefactos de compilación en el entorno, como por ejemplo transferencia o producción. No N/D No
acceptance-test Se ejecutan las pruebas de aceptación e integración en el despliegue. No User
finish Se recopilan y se cargan los archivos de registro, los artefactos y las pruebas en el archivo de pruebas. Conducto
rollback Es un paso dentro de prod-finish, que se ejecuta siempre que se encuentra un escenario de retrotracción N/D No

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

Delta de despliegue

Cuando la promoción del inventario esté lista, podrá iniciarse el proceso de despliegue continuo. El delta de despliegue es la diferencia entre el contenido del último despliegue finalizado y el despliegue actual. El delta de despliegue genera una lista de los artículos de inventario que se están desplegando.

Para acceder al delta de despliegue en los scripts de despliegue, puede utilizar los mandatos siguientes:

# return a JSON file path with an array of inventory entries that were changed
get_env DEPLOYMENT_DELTA_PATH

# return a JSON file path with an array of inventory entries that were deleted
get_env DEPLOYMENT_DELTA_DELETIONS_PATH

# returns a JSON file path with an array of all inventory entries
get_env INVENTORY_ENTRIES_PATH

Cálculo de la BOM de despliegue

La lista de materiales (BOM - Bill of Material) de despliegue representa todos los artefactos que se despliegan como parte de una solicitud de cambio individual. Después de calcular el delta de despliegue, la interconexión crea la BOM de despliegue basándose en estos elementos.

Recopilación del resumen de pruebas

Se crea un resumen de todas las pruebas que se han creado durante la compilación relevante que ha llevado a un despliegue. Las pruebas que se crean durante el propio despliegue se añaden también al resumen. El resumen de pruebas se añade a la descripción de la solicitud de cambio. De forma predeterminada, el resumen de pruebas consta de pruebas de tiempo de compilación recopiladas en el conducto de AC junto con las pruebas recopiladas durante la ejecución del conducto de CD actual.

Las instrucciones siguientes se aplican exclusivamente a las interconexiones de CD dirigidas a entornos de producción. Utilice el distintivo target-environment-purpose para determinar si el entorno se ha designado como pre_prod o production.

Requisito previo: En la interconexión de CD que tiene como destino el entorno pre_prod, establezca el distintivo pre-prod-evidence-collection en 1. Esto permite la recopilación y el almacenamiento de pruebas de tiempo de compilación en el casillero de pruebas para todos los activos desplegados por CD Pipeline, realizando el despliegue en el entorno de preproducción. De forma predeterminada, para entornos designados como pre_prod, el distintivo pre-prod-evidence-collection se establece en 1.

En la interconexión de CD que tiene como destino el entorno de producción, establezca el distintivo anterior a prod-evidence-collection en 1. Esto permite que la interconexión de CD que tiene como destino el entorno de producción recupere las pruebas recopiladas durante el despliegue en el entorno de preproducción. De forma predeterminada, para los entornos designados como de producción, el distintivo pre-prod-evidence-collection se establece en 0.

Una vez que el distintivo pre-prod-evidence-collection se ha establecido en 1, las solicitudes de cambio generadas por la interconexión de CD destinadas al entorno de producción incluirán referencias a los ID de solicitud de cambio de los entornos de preproducción dentro del campo Registro de validación.

Para obtener más información, consulte Resumen de pruebas.

Preparación y creación de la solicitud de cambio

Todo lo que cambia la línea base debe rastrearse mediante una solicitud de cambio. Estos cambios incluyen actualizaciones del nivel de código existente, cambios en la configuración y actualizaciones de los nodos de trabajo. La recopilación de datos de cumplimiento de revisión de iguales se basa en los datos a los que se puede acceder en el inventario, el archivo de pruebas y el repositorio de problemas de incidencias.

Utilice get_env CHANGE_REQUEST_ID para aprovechar el valor del ID de solicitud de cambio en las etapas siguientes.

No cambie el valor de la variable que utiliza set_env, ya que sólo está previsto para la implementación interna.

Este paso crea la solicitud de cambio adjuntando los datos de conformidad disponibles en función de los campos de la solicitud de extracción de promoción. La preparación de despliegue se calcula en función de la evidencia disponible en el estado de conformidad recopilado.

Si las evidencias de pre-prod se capturan en el despliegue de producción, las solicitudes de cambio de pre-prod se vinculan a la solicitud de cambio de producción. Para obtener más información, consulte Datos incluidos en solicitudes de cambio.

Se pueden crear previamente múltiples solicitudes de cambio utilizando un listener de solicitudes de cambio específico para diferentes configuraciones de implementación, incluidas implementaciones en múltiples regiones, destinos y clústeres. Estas solicitudes de cambio precreadas, tras su aprobación, pueden pasar a la canalización de implementación justo a tiempo, que aprovecha la información precalculada para acelerar la implementación real.

Comprobación de la aprobación de la solicitud de cambio

Si todas las comprobaciones de conformidad son correctas, como las pruebas unitarias, las tareas del Analizador de riesgos de código, la protección de ramas y la detección de secretos, la solicitud de cambio se aprueba automáticamente y la tarea se ejecuta con éxito. Para obtener más información, consulte Automatización de la gestión de cambios.

Si falla una comprobación de conformidad, el estado de solicitud de cambio no se aprueba. Puede aprobar la solicitud de cambio manualmente y añadir la dirección change-request-id a las propiedades del entorno para utilizar la solicitud de cambio creada previamente en la siguiente ejecución. También puede aprobar la solicitud de cambio manualmente y añadir una etiqueta de emergencia.

virtual

En la fase de despliegue, la canalización despliega los artefactos creados en un entorno, como el de preparación o el de producción. Las variables y credenciales para estas etapas se pueden encontrar en las fuentes siguientes:

  • Variables de la interfaz de usuario de interconexión (get_env)

Editar propiedad
Editar propiedad

Para obtener más información sobre cómo acceder a estas variables, consulte Scripts personalizados.

Prueba de aceptación

Es posible ejecutar un conjunto de pruebas automatizadas para validar que el despliegue se haya efectuado correctamente y que funcione según lo previsto. A efectos de rastreabilidad, asegúrese de que el registro de pruebas contiene una referencia al nivel de código o a la imagen que se está probando.

Cierre de la solicitud de cambio

Los detalles del despliegue se cargan en la tarea de cambio de resumen de cierre y, a continuación, la tarea cierra la solicitud de cambio. Se añade close_category a la tarea de cierre de la solicitud de cambio, con los valores siguientes:

  • Exitoso (si se desplegó listo, y el despliegue de CD tuvo éxito)
  • Satisfactorio con los problemas (si el resumen tiene problemas, no se ha desplegado listo y el despliegue de CD se ha producido con la emergencia)

Conclusión del inventario

Para obtener más información sobre la conclusión del inventario, consulte Inventario.

Reimplementar una aplicación

Visión general

Si una aplicación se bloquea o se comporta de forma inesperada tras cambios en la infraestructura, puede forzar una reimplementación para resolver el problema.

Utilícelo force-redeploy=true al activar una ejecución manual del canal de CD para anular el comportamiento predeterminado de detección de cambios. Esta configuración indica al canal que vuelva a implementar todo el inventario, incluso cuando no se detecten cambios nuevos.

Comportamiento predeterminado (sin reimplementación forzada)

Cuando no force-redeploy está configurado o está configurado en false, la canalización solo se implementa cuando se detectan nuevos cambios en el repositorio de inventario del entorno de destino.

  1. El proceso de CD se inicia y etiqueta la confirmación actual con el ID de ejecución del proceso.

  2. El canal lee el contenido de la rama de entorno correspondiente desde esa etiqueta.

  3. El proceso calcula el delta de despliegue entre la confirmación actual y la confirmación asociada a la etiqueta <target-environment>_latest.

  4. El pipeline evalúa el delta:

    • Si el delta está vacío, el proceso se detiene y no se realiza ninguna implementación.
    • Si el delta contiene cambios, el proceso continúa.
  5. El canal implementa los cambios identificados en el delta.

  6. Tras una implementación satisfactoria, el canal adjunta la <target-environment>_latest etiqueta a la nueva confirmación.

Comportamiento forzado (con reasignación forzada)

Cuando force-redeploy se establece en true, el proceso omite la validación delta y vuelve a implementar el inventario completo, independientemente de los cambios detectados. Este enfoque garantiza que el estado completo de la aplicación se vuelva a aplicar al destino de implementación.

  1. El proceso de CD se inicia y etiqueta la confirmación actual con el ID de ejecución del proceso.
  2. El canal lee el contenido de la rama de entorno correspondiente desde esa etiqueta.
  3. El canal calcula la diferencia de implementación, que normalmente está vacía en este escenario.
  4. La force-redeploy=true configuración hace que la canalización omita la comprobación delta y continúe.
  5. El canal vuelve a implementar todo el estado de la aplicación desde la rama.
  6. Tras una reimplementación satisfactoria, el canal adjunta la <target-environment>_latest etiqueta al compromiso que acaba de implementar.

Procedimiento

  1. Inicie una nueva ejecución manual del proceso de CD.

  2. En la configuración del canal, establezca la variable force-redeploy de entorno en true.

  3. Ejecute el pipeline.

Revertir una implementación

Visión general

Una reversión revierte una implementación anterior y restaura un estado conocido de la aplicación cuando una implementación provoca inestabilidad, fallos o problemas de cumplimiento. Las reversiones se suelen realizar para recuperar la fiabilidad del servicio, garantizar la coherencia de la configuración o mantener la conformidad normativa.

Hay tres métodos de restauración disponibles, cada uno adecuado para diferentes escenarios de recuperación:

  • Restauración completa: restaura la última configuración válida conocida haciendo referencia a un ID de solicitud ServiceNow de cambio. Recomendado para una recuperación controlada y auditable.
  • Restauración completa con GitOps: restaura un estado anterior revirtiendo manualmente las confirmaciones en el repositorio de inventario. No recomendado debido a la gestión limitada del cumplimiento.
  • Retroceso en línea: revierte una implementación fallida dentro de la misma ejecución del canal cuando se producen errores de ejecución.

Restauración completa

Descripción general del canal de reversión

Esta canalización le permite volver a una configuración anterior que se sabe que funciona correctamente seleccionando un ID de solicitud de cambio ServiceNow específico (por ejemplo, CHG-12345).

Este ID de solicitud de cambio sirve como marcador único para una implementación satisfactoria y es un dato necesario para el proceso de reversión.

Puede encontrar el ID de solicitud de cambio de una implementación anterior de dos maneras:

  • ServiceNow: Localice la solicitud de cambio para la implementación que desea restaurar.
  • Repositorio de inventario: dado que el estado del inventario se gestiona en el control de código fuente, cada implementación se identifica de forma única mediante una confirmación. Puedes encontrar la confirmación a la que deseas revertir e identificar la CHG-*** etiqueta asociada a esa confirmación.

El proceso de reversión contiene las siguientes etapas:

  • prod-rollback-start
  • prod-setup
  • prod-rollback-change-request
  • prod-deployment
  • prod-acceptance-tests
  • prod-rollback-finish

La ejecución del proceso utiliza información de la rollback-change-request-id propiedad environment para crear una nueva solicitud de cambio.

Para mantener el cumplimiento, la canalización vuelve a abrir los problemas vinculados a la implementación anterior. Estos problemas se adjuntan a la nueva solicitud de cambio y sus fechas de vencimiento originales permanecen sin cambios. Una reversión exitosa mueve la _latest etiqueta en el inventario a la confirmación anterior.

Crear una canalización de reversión

Utilice cd-rollback-listener para activar una reversión a la última versión válida conocida.

  1. Ve a tu canal de CD.
  2. Añada un disparador manual o duplique el disparador manual del CD.
  3. Edita el disparador y configura el oyente en cd-rollback-listener.
  4. Seleccione Guardar.
  5. Cree un desencadenador independiente para cada combinación de región y entorno de destino requerida.

Activar una canalización de reversión

Una ejecución de canalización de reversión utiliza las siguientes propiedades de entorno:

Tabla 1. Propiedades del entorno de reversión
Propiedad de entorno Descripción
rollback-change-request-id (Obligatorio) El ID de solicitud de cambio de la implementación concluida que desea revertir.
rollback-limit El número máximo de implementaciones que se pueden revertir. El valor predeterminado es 1 (la última implementación completada).
region La región para la reversión.
target-environment El entorno de destino para la reversión (por ejemplo, etapa o producción).

La canalización finaliza a menos que se cumplan los siguientes criterios:

  • rollback-change-request-id Debe ser el ID de una implementación concluida para la misma región y el mismo entorno de destino.
  • La implementación asociada con no rollback-change-request-id debe ser anterior al número de implementaciones especificado por rollback-limit.

La propiedad de PIPELINE_NAME entorno Tekton determina si una ejecución es una implementación o una reversión.

  • cd-rollback-pipeline: Valor predeterminado para una reversión.
  • cd-pipeline: Valor predeterminado para una implementación.

Puede utilizar esta propiedad para personalizar la lógica de ramificación.

Restauración completa utilizando GitOps

Descripción general de la reversión mediante GitOps

Utilice el canal de implementación continua para implementar una versión anterior del inventario en el entorno de destino mediante Git operaciones que revierten los cambios a un específico commit-id.

Dado que está revirtiendo las confirmaciones en el repositorio de inventario directamente, en lugar de activar el proceso de reversión con un ID de solicitud ServiceNow de cambio, este proceso no reabre automáticamente los problemas de cumplimiento anteriores ni gestiona sus fechas de vencimiento.

Cuando se activa, el proceso de CD completa los siguientes pasos para la reimplementación:

  • El pipeline se inicia y etiqueta la confirmación actual (la confirmación revertida) con el ID de ejecución del pipeline.
  • El canal lee el contenido de la rama de entorno correspondiente desde esa etiqueta.
  • El proceso calcula el delta de despliegue entre la confirmación actual y la confirmación asociada a la etiqueta <target-environment>_latest.
  • Tras una implementación satisfactoria, la <target-environment>_latest etiqueta se traslada a la nueva confirmación (revertida).

Crear una solicitud de extracción de promoción de reversión

  1. Identifique la commit-id de la versión de implementación en el inventario a la que desea volver.
  2. Revertir el estado del repositorio a esa confirmación.
  3. Crea una solicitud de extracción para promover el estado revertido.

El siguiente ejemplo muestra este escenario utilizando git comandos.

  1. Enumera las confirmaciones y las etiquetas para encontrar el ID de confirmación del último estado válido conocido (por ejemplo, refs/tags/8)

    # /c/usr/devsecops/compliance-inventory (master)
    $ git show-ref --tags
    ...
    83f7a87ee59185eaeac554bd3abeebfd2c1b4ad8 refs/tags/8
    ...
    1914a125e76aa97c497f4bd2c2f455b58cf079b8 refs/tags/prod_latest
    

  2. Enumera todas las confirmaciones entre el estado actual (refs/tags/prod_latest) y el estado objetivo (refs/tags/8).

    # /c/usr/devsecops/compliance-inventory (master)
    $ git rev-list --no-merges HEAD...83f7a87ee59185eaeac554bd3abeebfd2c1b4ad8
    67cc8babdff3e09c1f0e632f897798c1b5424f38
    6fab5ce3d60590cd858206424ecfd7d3a8c9ceb4
    ...
    

  3. Revertir el estado del inventario al commit de destino (refs/tags/8).

    # /c/usr/devsecops/compliance-inventory (master)
    $ git revert -n $(git rev-list --no-merges HEAD...83f7a87ee59185eaeac554bd3abeebfd2c1b4ad8)
    

  4. Confirma el nuevo estado.

    # /c/usr/devsecops/compliance-inventory (master|REVERTING)
    $ git commit -m "revert master to 83f7a87ee59185eaeac554bd3abeebfd2c1b4ad8"
    [master af82538] revert master to 83f7a87ee59185eaeac554bd3abeebfd2c1b4ad8
    

  5. Envía la actualización a la rama maestra.

    # /c/usr/devsecops/compliance-inventory (master)
    $ git push --set-upstream origin master
    ...
    To [https://us-south.git.cloud.ibm.com/jaunin.b/compliance-inventory.git](https://us-south.git.cloud.ibm.com/jaunin.b/compliance-inventory.git)
      67cc8ba..af82538  master -> master
    ...
    

Activar el proceso de implementación continua

  1. Crea una solicitud de extracción para los cambios de promoción de reversión.

  2. Revise y fusione el pull request.

  3. Activa la ejecución manual del proceso de CD en tu cadena de herramientas de CD.

Retrotracción en línea

Descripción general de la reversión en línea

Este modo revierte la implementación actual dentro del contexto de la misma ejecución del canal. Es necesario cuando se produce un error o fallo durante la fase de implementación o la prueba de aceptación, lo que provoca que el intento de implementación se marque como fallido.

Una reversión en línea se ejecuta automáticamente si la propiedad rollback-enabled del entorno está establecida en 1 y se produce un fallo en la fase de prueba de implementación o aceptación.

Si se activa una reversión, el proceso de CD ejecuta el segmento definido para rollback en su .pipeline-config.yaml archivo. Si un rollback segmento no está definido en el archivo, se ejecuta una implementación predeterminada y se le solicita que proporcione un script de reversión.

Ejemplo de script de reversión en .pipeline-config.yaml:

rollback:
  image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2.74
  script: |
    #!/usr/bin/env bash
    if [[ "$PIPELINE_DEBUG" == 1 ]]; then
      trap env EXIT
      env
      set -x
    fi
    source $WORKSPACE/$PIPELINE_CONFIG_REPO_PATH/scripts/deploy_setup.sh
    source $WORKSPACE/$PIPELINE_CONFIG_REPO_PATH/scripts/rollback.sh

Propiedades establecidas durante la reversión en línea

  • rollback-status: Indica el estado del paso de reversión. Valores posibles: [notRun, success, failure]
  • rollback-exit-code: El código de salida del paso de reversión. Este valor está vacío si la reversión no se ha ejecutado.
  • default-rollback-executed: Establecer en true si se ejecutó la implementación predeterminada (que solicita un script). Este valor está vacío por defecto.
  • pipeline-execution-status: Indica el estado general de la ejecución del proceso. Valores posibles: [successful_deployment, failed_deployment_failed_rollback, failed_deployment_successful_rollback]

Trazabilidad del despliegue

Cuando se fusiona un RP o una solicitud de fusión, el sistema mejora la transparencia y la trazabilidad al ofrecer una visibilidad clara de lo que ocurre a continuación. Actualiza automáticamente el PR con el estado de despliegue, lo que permite a las partes interesadas seguir fácilmente el progreso de una corrección o característica sin necesidad de acceder a los detalles del pipeline. Este enfoque racionalizado no sólo mejora la transparencia, sino que también facilita la trazabilidad, reduciendo el esfuerzo necesario para recopilar y verificar la información. Tras un despliegue correcto, se aplica una etiqueta con el formato deploy:{region}:{env} a las pull requests incluidas en el despliegue.

Para activar esta función en el proceso de CD, existe un indicador opcional deployment-traceability. Los usuarios pueden activar la trazabilidad del despliegue estableciendo el indicador en 1 cuando sea necesario.

Para apoyar aún más esta funcionalidad, si el usuario desea proporcionar un token específico para añadir etiquetas a los PR en el repositorio de la aplicación, puede utilizar las siguientes propiedades de entorno para especificar el token Git. El orden de búsqueda del token Git es el siguiente:

  • Una propiedad de entorno existente para un token específico del repositorio: git-token-$repo_name-$repo_org.
  • Una nueva propiedad de entorno para un token específico de la organización: git-token-$repo_org.