Personalización de interconexiones utilizando scripts personalizados
Los scripts personalizados son personalizaciones añadidas en el conducto. Los adoptantes, equipos y usuarios proporcionan scripts para ejecutar tareas personalizadas para garantizar la integración continua y el despliegue continuo de estrategias.
Los scripts personalizados controlan las etapas de la interconexión. Puedes utilizar un archivo de configuración (.pipeline-config.yaml) para configurar el comportamiento de las etapas, el contenido de los scripts y la imagen base
en la que se ejecutan los scripts. Los scripts y la configuración de las etapas de la interconexión se cargan desde un repositorio (repo) Git que puede ser el repositorio de la aplicación (app) (similar a .travis.yml o Jenkinsfile)
o un repositorio personalizado.
Cuando se inicia cualquiera de los scripts personalizados, la dirección URL completa del archivo de script personalizado, incluido el nombre del archivo y el hash de confirmación, se imprime al principio de los registros del pipeline de la siguiente
manera: The custom script can be viewed using the following link: 'https://<source repo url>/<organization name>/<repository name>/blob/<commit hash>/.pipeline-config.yaml'. Este posicionamiento mejora la
trazabilidad.
Para obtener más información, consulte Personalización de canalizaciones DevSecOps para principiantes.
Configuración en .pipeline-config.yaml
Utiliza un archivo de configuración .pipeline-config.yaml para ampliar el comportamiento del pipeline.
Ubicación del archivo
Para las solicitudes de incorporación de cambios y los flujos de integración continua, guarda el archivo de configuración .pipeline-config.yaml en un repositorio de la aplicación del mismo modo que los archivos Jenkinsfile .travis.yml o. En el caso de los flujos de implementación continua, guarda este archivo en un repositorio específico.
Para todas las interconexiones, puede personalizar la ubicación y el origen del archivo .pipeline-config.yaml con los siguientes parámetros de la interfaz de usuario de la interconexión:
pipeline-configpara establecer la vía de acceso del archivo de configuración. El valor predeterminado es.pipeline-config.yaml.pipeline-config-repopara configurar el repositorio del que se obtendrán la configuración y los scripts. El valor predeterminado es el repositorio de aplicaciones de integración continua.pipeline-config-branchpara utilizarlo como rama para la configuración en el repositorio de configuración. El valor por defecto es la rama del repositorio de la aplicación de integración continua y la ramamasteren el despliegue continuo.
Parámetros de configuración
La configuración del archivo .pipeline-config.yaml da soporte a los parámetros siguientes:
Estos valores no son parámetros de la interconexión, deben formar parte del archivo .pipeline-config.yaml.
-
image: puede utilizar cualquier imagen de Docker a la que el trabajador de la interconexión pueda acceder como imagen base para la tarea. -
script: el script que se va a ejecutar en la etapa. Dado que este campo se utiliza como archivo de script, asegúrate de que el contenido funcione como un archivo de script en la imagen base que has proporcionado. Puede incluir otros scripts junto con este archivo de configuración y hacer referencia a ellos desde este punto de entrada. Por ejemplo:
test:
image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2.69
script: |
#!/bin/sh
scripts/lint.sh
scripts/unit-test.sh
-
dind: especifique si se debe habilitardocker-in-dockerpara el contexto del script. El valor predeterminado esfalse. -
abort_on_failure: de forma predeterminada, la interconexión se detiene cuando falla el script. Si se establece enfalse, se marca la etapa en un aviso (estado ámbar) (se pasa con aviso), permite que la interconexión continúe y se hace referencia al trabajo fallido en las pruebas. -
image_pull_policy: Configura elImagePullPolicyparámetro del pod que se proporciona en la imagen para la imagen base. Los valores posibles son los mismos que los valores válidos para Kubernetes:AlwaysoIfNotPresent. El valor predeterminado esIfNotPresent. -
configmap: se extraen los pares clave-valor de un archivo configmap proporcionado al que puede accederPipelineRun. Se admiten los valores siguientes:config-name: la sintaxis del nombre del archivo configmap directa. El ejecutor de las etapas intenta acceder y montar el archivo configmap denominadoconfig-name.$prop-name: la sintaxis del nombre del archivo configmap indirecta. El nombre del archivo configmap se busca en la correlación de propiedades de entorno, que contiene todos los valores del entorno que se establecen en la interfaz de usuario de la interconexión. Por ejemplo, si hay unamy-configentrada prop en las propiedades del entorno, entoncesmy-configse utiliza para$prop.
-
secret: se extraen los pares clave-valor de un archivo configmap proporcionado al que puede accederPipelineRun. Se admiten los valores siguientes:-
secret-name: la sintaxis del nombre de secreto directa. El ejecutor de la etapa intenta acceder y montar el secreto denominadosecret-name. -
$prop-name: la sintaxis del nombre de secreto indirecta. El nombre Secret se encuentra en el mapa de configuración environment-properties, que contiene todos los valores de entorno configurados en la interfaz de usuario del pipeline. Por ejemplo, si el archivo configmap de propiedades de entorno contiene la propiedadmy-secret, se utilizamy-secretpara$prop.
-
-
runAfter: Ejecute la etapa actual después de que se complete la etapa especificada en esta propiedad. Establezca el valor con el nombre de etapa que ha utilizado en.pipeline-config.yaml. Utilice esta propiedad con moderación y confirme que la etapa especificada por esta propiedad existe en el conducto. Si la etapa no existe, el conducto puede entrar en un punto muerto. -
skip: Si se establece entrue, omita la etapa actual, si es posible, en las interconexiones v10. No se pueden omitir todas las etapas. En la tabla siguiente se listan las etapas que se pueden omitir durante la ejecución del conducto.
| Conducto | Etapas |
|---|---|
| Conducto PR | code-unit-tests, code-compliance-tests y code-pr-finish |
| Conducto de AC | code-unit-tests, code-static-scan, code-compliance-checks, build-scan-artifact, code-dynamic-scan, deploy-acceptance-tests, deploy-release y code-ci-finish |
| conducto cd | prod-verify-artifact, prod-acceptance-tests y prod-finish |
| Interconexión CC | cc-static-scan, cc-dynamic-scan, cc-compliance-checks, cc-scan-artifact y cc-finish |
| App-vista previa de conducto de PR | code-unit-tests, code-static-scan, code-compliance-checks, build-scan-artifact, deploy-acceptance-tests y app-preview-pr-finish |
| Interconexión de CI de modalidad de desarrollo | code-unit-tests, code-static-scan, deploy-release y code-ci-finish |
| Interconexión de CD de modalidad de desarrollo | prod-acceptance-tests y prod-finish |
Configuración de ejemplo
version: '1' # fixed, this value is used to track schema changes
# `setup` runs right after the app repo is cloned
setup:
# the pipeline will break in case setup fails (default is true)
abort_on_failure: true
# any docker image can be used which is accessible by the private worker
image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2.69
# you can reference configmaps, each key in the configmap is going to be available as `/config/{key}`
configmap: my-config
# `$prop` is the indirect config map syntax, the concrete configmap is looked
# up from the `environment-properties` configmap
#
# Eg. if there's a `prop: my-config` entry in the environment properties,
# then `my-config` is going to be used for `$prop`
configmap: $prop
# the mechanism described works for secrets as well!
secret: $my-secrets
# the script is executed inside the checked out app repo
script: |
#!/bin/sh
...
# `test` runs after `setup`, but before building the docker image
test:
image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2.69
script: |
#!/bin/sh
...
# `static-scan` runs after `test`, but before building the docker image
static-scan:
image: ibmcom/pipeline-base-image:2.12
script: |
#!/bin/sh
...
# `deploy` runs after building the docker image
deploy:
image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2.69
# the script has access to the built docker image, which is available at `/config/image`
script: |
#!/bin/sh
cat /config/image
# `dynamic-scan` runs after `deploy`, but before the acceptance test run
dynamic-scan:
image: ibmcom/pipeline-base-image:2.12
script: |
#!/bin/sh
...
# `acceptance-test` runs after `deploy`
acceptance-test:
image: icr.io/continuous-delivery/pipeline/pipeline-base-image:2.69
script: |
#!/bin/sh
...