Simplificando los pipelines de Azure DevOps con decoradores

Premier Developer

Premier

Simplificando los pipelines de Azure DevOps con decoradores.

Cuando se trata de DevOps, no faltan la cantidad de personalizaciones que las empresas necesitan. Desde entornos especializados hasta comprobaciones de calidad, cada empresa tiene su propia manera para determinar cómo es una implementación exitosa. Muchas de estas personalizaciones deben aplicarse en toda una organización, lo que garantiza que cada proyecto pase la prueba antes de que se implemente. Si usted está tratando con cientos de proyectos, esto no es una hazaña fácil.  Afortunadamente, en Azure DevOps, los decoradores de pipelines pueden ayudarle. Déjame mostrarle cómo.

Entendiendo Pipelines

En Azure DevOps, los pipelines vienen en 2 sabores: compilación y liberación. Los pipelines de compilación son la forma en que se compila, prueba y empaqueta el código. Los pipelines de liberación se tratan de implementar ese código en los entornos. Azure tiene todo tipo de integraciones para ayudar a que los pipelines de compilación y liberación se ejecuten sin problemas, al tiempo que le permite implementar sus propios controles y puertas en el camino. Ya sea que necesite buscar credenciales, probar sus integraciones, cumplir con la política o cualquier otro paso personalizado, puede hacerlo todo con pipelines.

Tal vez tenga una gran colección de proyectos (digamos 100) y necesite una verificación de virus específicos que debe realizarse para cada implementación.  Puede agregar fácilmente los pasos a sus pipelines para asegurarse de que todos sus proyectos están listos. Increíble. Caso cerrado.

Sólo abra los 100 proyectos.

Simplemente edite 100 diferentes pipelines de liberación.

Manualmente.

No suena muy divertido, ¿verdad?

No se preocupe, los decoradores de pipelines están aquí para simplificar su vida.

Decoradores de pipelines

Los decoradores de pipelines le permiten definir un conjunto básico de pasos y ejecutarlos para cada proyecto de su organización. Cada pipeline de Azure DevOps es solo una serie de comandos que se ejecutan cuando se produce una compilación o una liberación. Estos comandos constan de una serie de secciones YAML, que definen qué extensión llamar y cualquier variable/parámetro que se debe establecer. Estos comandos de manera conjunta forman el archivo YAML que define el pipeline.

Los decoradores de pipelines son esencialmente una sección del archivo YAML que se ejecutará para cada pipeline. El paquete del decorador contiene un archivo YAML, que describe qué pasos se van a procesar. Este paquete se registra como una extensión personalizada, con un objetivo específico (tipo de configuración de extensión) que indica a Azure DevOps que es una definición de decorador de pipeline.

Creación de un decorador

Para empezar a utilizar decoradores de pipelines, primero debe crear una extensión. Aquí hay un enlace para guiarlo a través del proceso.

Utilice un decorador para inyectar pasos en un pipeline

Para resumir:

Cree un archivo de extensión. Esto define el tipo de extensión, así como los archivos empaquetados.

Cree un archivo YAML. Este archivo contiene los pasos que desea ejecutar para cada pipeline.

Cree un archivo HTML. Esto se mostrará cuando un usuario vea su extensión en Marketplace.

Empaquete la extensión. Esto crea un archivo . VSIX que utilizará para registrar su extensión.

Registre su extensión. Esto implica cargar el archivo en el Marketplace de Azure DevOps y ponerlo a disposición de la organización de Azure DevOps.

Agregue la extensión a su organización. Esto permite que la extensión se aplique a sus pipelines.

Pasos de Pipelines

Una vez que cree la extensión inicial, estará listo para agregar los pasos personalizados. Dado que estos pasos se definen como YAML, me resultó más fácil editar el pipeline de compilación de Azure DevOps con los pasos a través del portal y, a continuación, copiar ese código en el archivo YAML del decorador.

Aquí está mi pipeline de compilación básica.

A screenshot of a social media post Description automatically generated
Agregaré un paso de pipeline mediante el editor YAML. Podría escribir su YAML desde cero si le gusta ese tipo de cosas. Descubrí que el uso del editor es mucho más rápido y me ayuda a asegurarme de que mi espaciado/formato es correcto.

En mi caso, quiero agregar un CredScan a cada pipeline, para asegurarme de que todos los proyectos son seguros.

A screenshot of a map Description automatically generated
En mi YAML, puede ver el nuevo paso que agregué. Este es el código que quiero copiar en mi archivo YAML del decorador.

- task: CredScan@2
inputs:
toolMajorVersion: 'V1'

En mi Decorador YAML, agrego el texto copiado. Si está siguiendo, asegúrese de mantener su espaciado correcto! YAML es estricto cuando se trata de espaciado y formato, así que asegúrese de prestar atención a su código.

A screenshot of a cell phone screen with text Description automatically generated

Después de actualizar mi decorador, empaqueté mi extensión y la subí al Marketplace de Azure DevOps.

A screenshot of a cell phone Description automatically generated
A continuación, lo registro en mi organización de Azure DevOps.

A screenshot of a cell phone Description automatically generated

Pruebas

Con mi extensión registrada, estoy listo para probar mis pasos. En mi pipeline de compilación, creo una nueva compilación. Cuando se completa la compilación, desprotegeré los registros para asegurarme de ver mis pasos personalizados. Aquí puede ver dónde se agregó el paso CredScan después de los otros pasos del pipeline.

A screenshot of text Description automatically generated

Nota

CredScan aparece después del paso VSTest. Este es el último paso en la definición del pipeline y elegí una definición de decorador de pipeline posterior. Los decoradores se pueden ejecutar antes o después de los pasos de su pipeline.

¡Hagámoslo más fresco!

Dado que los decoradores se basan en YAML, puede usar prácticamente cualquier código YAML válido que desee. Esto significa que puede agregar varios pasos, condiciones y usar variables dentro de las extensiones del decorador. Los decoradores también tienen acceso a información contextual, como el nombre del repositorio, los detalles de los trabajos y otros. Esto le permite hacer sus decoradores mucho más flexibles, lo que le permite determinar cuándo y cómo funcionan sus decoradores. Esto es especialmente útil si tiene algunos pipelines que no necesitan ejecutar los pasos del decorador.

En mi YAML, agrego código para comprobar una nueva variable que usaré para permitir que el decorador no se ejecute. Si se establece, permitirá omitir los pasos del decorador.

steps:
- ${{ if ne(variables['skipDecoratorExecution'], 'true') }}:
    - task: CredScan@2
      inputs:
        toolMajorVersion: 'V1'

Nota

Asegúrese de revisar los datos disponibles aquí.

Para más diversión, puede agregar varios pasos a su decorador. En mi archivo YAML, agrego otra acción, específicamente para archivar mis archivos como parte del pipeline.

steps:
- ${{ if ne(variables['skipDecoratorExecution'], 'true') }}:
- task: CredScan@2
inputs:
toolMajorVersion: 'V1'
- task: ArchiveFiles@2
inputs:
rootFolderOrFile: '$(Build.BinariesDirectory)'
includeRootFolder: true
archiveType: 'zip'
archiveFile: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
replaceExistingArchive: true

Los decoradores pueden contener cualquier número de pasos que necesite. Esto le permite definir acciones comunes que cada pipeline requiere en una única ubicación y hacer que se inyecten para cada compilación.

Debido a que he modificado mi YAML, necesito actualizar y volver a empaquetar mi decorador. Para ello, ejecuto el comando tfx extension create con el atributo –rev-version. Esto incrementa la versión y crea un archivo para la actualización.

tfx extensión create –rev-version

En el Marketplace de Azure DevOps, cargo el nuevo paquete de extensión.

¡Más pruebas!

Una vez actualizado, estoy listo para probar mi pipeline. Primero, ejecuto la compilación, como antes. Cuando se complete, confirmo que el decorador fue ejecutado. Tenga en cuenta que hay varios pasos definidos porque el decorador ahora contiene varias acciones.

A screenshot of text Description automatically generated

A continuación, ejecuto el pipeline de nuevo, pero esta vez agregando una variable para omitir la ejecución del decorador. En mi canalización YAML, agregue la variable skipDecoratorExecution.

A screenshot of a cell phone Description automatically generated

Ahora, cuando se ejecuta el pipeline, omite las tareas del decorador, porque la variable skipDecoratorExecution está establecida en true.

Próximos pasos

Bastante impresionante, ¿verdad? Los decoradores de pipelines le permiten definir acciones comunes y aplicarlas en todos los proyectos. Esto puede permitir aplicar políticas de seguridad y calidad para cada proyecto, mientras se administra desde una ubicación central. Mediante el uso de condiciones y variables de YAML, puede personalizar cuándo y cómo se inyectan los pasos del decorador. Esto significa que puede asegurarse de que todos sus proyectos están bloqueados y funcionando sin problemas. ¡Buena suerte!

Puede ver mi código de decorador completo en GitHub.

(Link to English version of this article)

0 comments

Leave a comment