Automatización con Jenkins

Temas

  • Pipeline as Code
  • Jenkinsfile
  • Caso Integrado
  • Jenkins Shared Library

Pipeline as Code


¿Qué es un pipeline?
  • Un pipeline es un conjunto de tareas repetitivas y automatizadas que facilitan el trabajo a los equipos de desarrollo y operaciones.
  • En DevOps se hace referencia a los flujos de integracion y entrega continua.

¿Qué es Pipeline as Code?
  • Es una práctica en la que se define la configuración de un pipeline de integración y entrega continua (CI/CD) utilizando código, en lugar de configuraciones manuales o interfaces gráficas de usuario.
Beneficios
  • Versionamiento de código del pipeline
  • Reutilización de etapas repetitivas (Herencia)
  • Flexibilidad
  • Facilidad de colaboración
  • Auditoría

Workflow
Herramientas comunes
  • Jenkins: Utiliza Jenkinsfile para definir pipelines en Groovy.
  • GitLab CI/CD: Utiliza un archivo .gitlab-ci.yml para definir pipelines en YAML.
  • Azure Pipelines: Utiliza archivos YAML para definir pipelines.
  • Travis CI: También usa archivos YAML (.travis.yml).
  • CircleCI: Define pipelines en YAML (.circleci/config.yml).

Estilos de pipelines

En Jenkins, "Pipeline as Code" puede escribirse en dos estilos principales: Scripted Pipeline y Declarative Pipeline. 
  • Declarative Pipeline presents a more simplified and opinionated syntax on top of the Pipeline sub-systems. The basic statements and expressions which are valid in Declarative Pipeline follow the same rules as Groovy’s syntax with the some exceptions.
  • Scripted Pipeline, like Declarative Pipeline, is built on top of the underlying Pipeline sub-system. Unlike Declarative, Scripted Pipeline is effectively a general-purpose DSL built with Groovy. Most functionality provided by the Groovy language is made available to users of Scripted Pipeline, which means it can be a very expressive and flexible tool with which one can author continuous delivery pipelines.


Más info: https://www.jenkins.io/doc/book/pipeline/syntax/

Ejemplo de  código:


El tipo Declarative es moderno, entendible y parecido al lenguaje YAML.


Agent

Especifica donde se ejecutará el pipeline o una etapa específica dependiendo donde se coloque.


Entre los tipos de agentes tenemos:
  • any: Se ejecutará en cualquier agente disponible.
  • none: Se va a ejecutar en el controller (maestro)
  • docker: Se creará un contenedor, ejecutará las tareas indicadas en el pipeline y luego se destruirá.
  • label: Ejecutará el pipeline en un nodo específico que tenga la etiqueta indicada.

Stage

Define una parte del trabajo a realizar. Se ejecutan secuencialmente e incluye pasos, que definen tareas reales.


Step

Ejecuta tareas reales como pruebas unitarias, ejecutar un shell script, entre otras.



Ejercicios

En Jenkinks, instalar los siguientes Plugins:
  • Docker
  • Docker Pipeline
  • docker-build-step
Realizar los siguientes ejercicios, en el cual colocamos los pipelines dentro del Jenkins (esto no es una buena práctica, solo con fines educativos).
  • https://github.com/GalaxyTraining/CURS-000168/blob/master/s03/12-pipeline-as-code.md
  • https://github.com/GalaxyTraining/CURS-000168/blob/master/s03/13-pipeline-as-code-docker.md
  • https://github.com/GalaxyTraining/CURS-000168/blob/master/s03/14-pipeline-as-code-git.md

Jenkinsfile 

Es un archivo de texto que contiene la definición de una canalización de Jenkins y está registrado en el control de código fuente. Considere la siguiente canalización que implementa una canalización básica de entrega continua de tres etapas.

La mejor práctica es tener nuestro pipelines en archivos.



Ejercicios

https://github.com/GalaxyTraining/CURS-000168/blob/master/s03/Jenkinsfiles/Jenkinsfile-scm
https://github.com/GalaxyTraining/CURS-000168/blob/master/s03/Jenkinsfiles/Jenkinsfile-maven
https://github.com/GalaxyTraining/CURS-000168/blob/master/s03/Jenkinsfiles/Jenkinsfile-sonar


Caso Integrado

Crear un pipeline para gradle con los siguientes stages:
  • Checkout
  • Build
  • Unit Test
  • SonarQube
  • Build Image
  • Publish Image
  • Run Container
Notas:
  • Jenkinsfile: https://github.com/aldo2510/galaxy-jenkins-lab-gradle/blob/main/Jenkinsfile
  • Crear configuración entre Jenkins y Docker Hub
  • Instalar plugin "Copy Artifact"

Recursos

Comments

Popular posts from this blog

Week #1: Definición de objetivos, desglose de trabajo

Week #2: Azure App Service

Registro de Excepciones