En el desarrollo de software, los pipelines CI/CD o Integración Continua/Entrega Continua ayudan en la construcción y despliegue de su código en diferentes entornos a través de un proceso automatizado.

Sin embargo, crear y mantener este pipeline en sí mismo puede convertirse en una tarea desafiante. Entre en Pipeline as Code – un enfoque en el que usted crea todo su pipeline CI/CD en formato de código. En lugar de confiar en interfaces web de usuario y herramientas de arrastrar y soltar, usted utiliza archivos de configuración para definir cómo se construirá, probará y desplegará el código de su aplicación.

Pero antes de entrar en los detalles de Pipeline as Code y de cómo puede construir el suyo, entendamos primero qué es exactamente un pipeline.

¿Qué es una canalización en el desarrollo de software?

Common pipeline stages in software development

Una canalización en el desarrollo de software es una serie de pasos automatizados que toman sus últimos cambios de código, ejecutan procesos específicos en él y lo despliegan en el entorno de su elección. Vamos a entenderlo mejor con un ejemplo.

Imagine que tiene tres microservicios y que ha añadido nuevas funciones a uno de ellos. Ahora, quiere ejecutar las pruebas unitarias a nivel de código. Una vez que pasan, también quiere comprobar si hay problemas de formato de código. A continuación, quiere construir su código. Después, querrá desplegarlo en dos entornos diferentes con varias máquinas en cada entorno. Por último, querrá ejecutar pruebas de integración para asegurarse de que sus cambios están sincronizados con los demás servicios.

Podría optar por hacer todos los pasos anteriores manualmente. Pero eso le llevaría mucho tiempo y sería propenso a cometer errores. Entonces, ¿hay alguna forma de automatizarlos? Sí Puede crear una canalización y definir todos los pasos. A partir de entonces, cada vez que realice cambios en su código, podrá activar la canalización y despreocuparse de cualquier paso manual.

Ventajas de la canalización como código

Si utiliza herramientas como arrastrar y soltar, le resultará difícil realizar un seguimiento de los cambios, mantener la estandarización o promover la colaboración. Pipeline as Code es una forma mejor de definir su pipeline de desarrollo de software.

Ayuda a mantener la coherencia. Al promover la automatización, consigue la repetibilidad y utilizar el mismo pipeline para otros sistemas. Y al igual que el código de la aplicación, el código utilizado para definir su pipeline promueve la colaboración.

#1. Coherencia

Estar definido en formato textual garantiza que nada ocurra fuera de orden. Al imponer un flujo de trabajo estándar para todas las construcciones y despliegues de su aplicación, obtendrá coherencia y reducirá el riesgo de problemas inesperados.

Y con la coherencia, también obtiene comprobaciones de conformidad y seguridad. Garantizar una canalización coherente le permite definir sus análisis de seguridad y comprobaciones de vulnerabilidades de forma que no se le escape nada.

#2. Repetibilidad

Cree su canalización y establezca la automatización. Además de la coherencia, su canalización automatizada garantiza que el código de cada aplicación pase por las mismas etapas y comprobaciones.

Su código fluirá a través del mismo proceso de construcción y despliegue cada vez que ejecute su canalización. Usted mantiene la repetibilidad en todas sus ejecuciones.

#3. Colaboración

Al ser el código el medio que utiliza para crear su canalización, fomenta la colaboración. Varias personas de sus equipos pueden contribuir al mismo código, al igual que se hace con el código de la aplicación.

La canalización como código también le permite mantener el control de versiones y permitir revisiones del código. Esto garantiza que se sigan las mejores prácticas y que los posibles problemas se detecten a tiempo.

Ahora, vamos a sumergirnos en cómo puede crear su propio pipeline utilizando Pipeline as Code.

Pipeline as Code en Jenkins

Cuando se trata de sistemas de integración continua y despliegue continuo (CI/CD), Jenkins es el servidor de automatización de código abierto líder. Con Jenkins, puede integrar sin esfuerzo sus cambios de código, automatizar las pruebas y la construcción, y desplegar software. Y puede hacer todo esto de forma fiable y eficiente.

Tanto si es un aficionado que intenta aprender más sobre las canalizaciones de automatización como si está construyendo sistemas empresariales complejos, Jenkins satisface todos los requisitos exclusivos de su proyecto. Su abundancia de plugins y su comunidad en constante crecimiento pueden ayudarle a sacar el máximo partido de su automatización.

En Jenkins, una tubería es un conjunto de varios plugins diferentes definidos en un orden determinado que crea su sistema CI/CD. Ya se trate de casos de uso sencillos o complejos, puede crear su pipeline utilizando código con la sintaxis del lenguaje específico del dominio (DSL) de Pipeline. El DSL está construido sobre Apache Groovy.

La base de Pipeline como código en Jenkins es el Jenkinsfile – un archivo de texto que contiene código que describe todas las diferentes etapas y acciones. Aprendamos a crear su Pipeline as Code utilizando el Jenkinsfile.

¿Cómo crear su Pipeline como Código?

Después de haber instalado y puesto en marcha Jenkins, navegue hasta la interfaz de usuario web en su navegador. Puede que tenga que iniciar sesión. A continuación, terminará en la página principal del Dashboard. Empezará desde aquí y creará su pipeline.

Jenkins Dashboard
  1. En el panel izquierdo, encontrará un botón Nuevo elemento.
  2. Haga clic en él para navegar a la página siguiente.
  3. Una vez que esté en la nueva página, encontrará la indicación para crear un Elemento.
  4. Déle un nombre en el campo Introduzca un nombre de elemento. Esto es obligatorio.
  5. Tenga en cuenta que se creará un directorio con el mismo nombre. Por lo tanto, es mejor evitar los espacios en blanco, ya que pueden provocar efectos secundarios no deseados.
  6. A continuación, seleccione la opción Tubería y pulse el botón Aceptar presente en la parte inferior de la pantalla.
  7. Aparecerá la ventana de Configuración.
  8. Haga clic en la opción Pipeline del panel izquierdo o desplácese hacia abajo hasta la sección Pipeline.
Jenkins Pipeline as Code creation stage

Comencemos con una canalización sencilla que puede configurar directamente desde la interfaz de usuario.

Crear Pipeline como código directamente en Jenkins

Una vez que se encuentre en la sección Pipeline, estará listo para crear su primer Pipeline como Código.

En el menú desplegable Definición, seleccione la opción Pipeline script. Debajo de ella, encontrará un área de Script donde podrá codificar su pipeline. Jenkins mantiene el script creado aquí.

Jenkins le permite elegir entre dos estilos o sintaxis de codificación: Sintaxis declarativa y Sintaxis de script. Mientras que Declarative es fácil de usar e ideal para pipelines simples, la Scripted Syntax es para usuarios avanzados y para diseñar flujos complejos.

Utilizando la Sintaxis Declarativa, cree 3 etapas simples – Construir Código, Probar Código y Desplegar Código utilizando el siguiente fragmento de código:

pipeline {
    agente any

    etapas {
        etapa('Construir Código') {
            pasos {
                echo 'Este es el paso para construir...'
            }
        }
        stage('Probar Código') {
            pasos {
                echo 'Este es el paso para probar...'
            }
        }
        stage('Desplegar Código') {
            pasos {
                echo 'Este paso despliega el código...'
            }
        }
    }
}

También puede utilizar la sintaxis de script como se muestra a continuación:

nodo {
    stage('Construir código') {
        echo 'Este es el paso para construir...'
    }
    stage('Probar Código') {
        echo 'Este es el paso para probar...'
    }
    stage('Desplegar Código') {
        echo 'Este paso despliega el código...'
    }
}

Haga clic en Guardar. Ahora, haga clic en el botón Construir ahora presente en el panel izquierdo. Esto activará el pipeline que acaba de crear.

Una vez que su pipeline finalice, podrá comprobarlo en el Historial de construcciones. Si esta es su primera ejecución, haga clic en el número de compilación #1 presente. A continuación, haga clic en Salida de la consola presente en el panel izquierdo. Encontrará las 3 declaraciones echo que tiene en el código de su pipeline en cada etapa.

Console output of Jenkins Pipeline as Code

Crear el pipeline como código utilizando un archivo externo

Se vuelve un desafío mantener su pipeline directamente en Jenkins cuando comienza a volverse complejo. En este caso, querrá crear un archivo externo y utilizarlo.

Antes de crear su pipeline Jenkins, necesita un repositorio externo y un sistema de control de versiones. Vamos a crear un repositorio Git y alojarlo de forma remota en GitHub. Creará su archivo Jenkins y lo almacenará aquí.

  1. Vaya a su perfil de GitHub. Puede crear una cuenta gratuita si no tiene una.
  2. Cree un nuevo repositorio. Nómbrelo customJenkins.
  3. En su máquina local, asegúrese de que tiene instalado Git.
  4. Cree un directorio en la ubicación de su elección.
  5. Navegue dentro del directorio y abra su terminal.
  6. Inicialice un repositorio Git vacío utilizando el comando git init.
  7. Ahora, cree un nuevo archivo, que será su Jenkinsfile. Llamémoslo customJenkinsfile.
  8. Escriba su Pipeline como código dentro de este archivo. Como ejemplo, utilice el que se menciona a continuación:
pipeline {
    agente cualquiera

    etapas {
        etapa('Construir código') {
            pasos {
                echo 'Este es el paso para construir definido en el archivo personalizado...'
            }
        }
        stage('Código de prueba') {
            pasos {
                echo 'Este es el paso para probar definido en archivo personalizado...'
            }
        }
        stage('Desplegar Código') {
            pasos {
                echo 'Este paso definido en archivo personalizado despliega el código...'
            }
        }
    }
}
  1. Añada el archivo recién creado a Git utilizando el comando git add --all en su terminal.
  2. Confirme el archivo a Git utilizando el comando git commit -m "Created a custom jenkinsfile".
  3. Enlace su repositorio Git local a su repositorio remoto utilizando git remote add origin git@github.com:<su nombre de usuario>/customJenkins.git.
  4. A continuación, suba el archivo al remoto (GitHub) utilizando git push --set-upstream origin master.

Ahora ha creado un repositorio remoto en GitHub que contiene un archivo Jenkins personalizado. Vamos a configurar Jenkins para utilizarlo.

Configurar Jenkins para usar Jenkinsfile desde GitHub

  1. Abra su panel de Jenkins.
  2. Cree un nuevo pipeline, o haga clic en Configurar en el panel izquierdo desde un pipeline existente.
  3. Desplácese hacia abajo hasta la sección Pipeline.
  4. En el desplegable Definición, seleccione la opción Script de canalización desde SCM.
  5. Seleccione Git en la opción SCM.
  6. Proporcione el enlace de su repositorio GitHub en la URL del repositorio bajo Repositorios.
  7. Asegúrese de que el Especificador de Rama se establece como */master en Ramas a construir.
  8. Desplácese hacia abajo hasta Script Path. Aquí, proporcione el nombre del archivo Jenkins como customJenkinsfile. Haga clic en Guardar.

Después de eso, ejecute su pipeline. Jenkins primero obtendrá su código del repositorio remoto. Luego creará un pipeline utilizando el archivo Jenkinsfile personalizado y ejecutará todas las etapas.

Remote based Pipeline as Code showing all the stages

Ahora ha creado con éxito su propio pipeline de desarrollo de software utilizando Pipeline as Code. Además, ha habilitado el control de versiones en su script pipeline. Cualquier cambio que realice en el código de su pipeline ahora puede ser rastreado con cada commit de Git. A continuación, es hora de echar un vistazo a las mejores prácticas.

Mejores prácticas para escribir un pipeline eficaz como código

Echemos un vistazo a las mejores prácticas que debe seguir al escribir su pipeline como código.

  • Mantenga su pipeline limpio y evite escribir demasiadas condiciones complejas.
  • Si realiza demasiados comandos dentro del pipeline, divídalos en diferentes pasos.
  • Utilice archivos externos con control de versiones para sus scripts de Pipeline as Code.
  • Utilice las características del lenguaje de codificación, como Groovy, para integrar diferentes pasos.
  • Evite las llamadas a Jenkins.getInstance o a sus accesores para mitigar los problemas de seguridad y rendimiento.
  • No sobrescriba los comandos integrados en el pipeline como sh y timeout.
  • Cree herramientas o scripts externos para tareas complejas que requieran un uso intensivo de la CPU y conéctelos a su pipeline.
  • Aproveche la gran variedad de plugins existentes disponibles para Jenkins para abordar su caso de uso.
  • Asegúrese de que ha incorporado la gestión de excepciones y errores, ya que las cosas pueden salir mal.
  • No haga que su pipeline como código esté estrechamente acoplado con mucha lógica de negocio en su interior.
  • Utilice argumentos parametrizados siempre que sea posible para que su pipeline sea reutilizable.

Pipeline como Código: Un enfoque sencillo para procesos complejos

En resumen, Pipeline as Code simplifica la automatización de su pipeline CI/CD al representar todo el proceso como código. Mientras que las canalizaciones CI/CD automatizan la creación, las pruebas y el despliegue de sus cambios de código, el aprovechamiento de la canalización como código va un paso más allá. Le permite definir su flujo de trabajo en texto en lugar de depender de interfaces gráficas.

Con Pipeline as Code, se asegura de que cada paso de su flujo de trabajo se produce en el orden correcto. Reducirá el riesgo de encontrarse con problemas no deseados. Además, obtendrá varias ventajas, como la coherencia, la repetibilidad y el fomento de la colaboración.

Con esta guía, ya sabe cómo crear sus propios pipelines utilizando Jenkins, una herramienta de CI/CD muy utilizada. Jenkins ofrece una plataforma potente y flexible para implementar Pipeline as Code a través de su Jenkinsfile. Siga las mejores prácticas y cree flujos de trabajo que aborden todos sus casos de uso de canalizaciones.

Si desea obtener más información sobre Jenkins, puede consultar cómo crear su propia canalización Jenkins.