En el pasado, es posible que haya intentado usar varios programas y herramientas para implementar aplicaciones de manera efectiva. En este artículo, le mostraré una forma rápida y sencilla de configurar la integración continua para su entorno mediante GitLab y Docker. ¡Entonces empecemos!

Lista de lo que vamos a prestar atención a:

  • Control de versiones
  • Seguimiento de problemas
  • Documentación
  • Integración continua
  • emisión continua
  • Repositorios (defectos/imágenes acoplables)

Jenkins hace un trabajo bastante bueno con la integración y el pago continuos. Mantis hace un gran trabajo al rastrear posibles problemas. Sin embargo, para lograr una mayor eficiencia y calidad de nuestro proyecto, necesitamos combinar estas herramientas. Por ejemplo, en el futuro es posible que deseemos que git-commit se conecte directamente a los problemas existentes o ejecute pruebas automáticas después de actualizar las confirmaciones de la rama maestra.

Generalmente, la mayoría de las herramientas brindan integración con otros servicios comunes de forma predeterminada. Sin embargo, todavía son difíciles de configurar. Además, todo el flujo de trabajo se verá interrumpido si se desactiva algún servicio de la cadena. Por lo tanto, sería genial que hubiera una única plataforma para realizar estas tareas, por eso elegí  GitLab.

CI de GitLab

GitLab.com  es un servicio basado en SAAS, una forma de computación en la nube, donde puede hospedar fácilmente sus repositorios de Git, rastrear problemas potenciales y escribir wikis utilizando el lenguaje Markdown. GitLab CI  también le permite configurar la integración continua utilizando cualquiera de las imágenes de Docker disponibles en  Docker Hub . ¡Veámoslo con un ejemplo!

GitLab CI YML

GitLab CI usa el archivo .gitlab-ci.yml YAML para definir las configuraciones del proyecto, que incluyen la definición de todas las etapas que se ejecutarán después de que se inicie la canalización de CI/CD en respuesta a un git push/merge. En este ejemplo, necesitamos realizar una prueba unitaria de un proyecto simple de Node.js para asegurarnos de que no haya errores en el código. Para que quede más claro, intente ejecutar este  repositorio usted mismo .

stages:
  - lint-css
  - lint-js
  - unit-test

image: node:6.11.2


lint css:
  stage: lint-css
  before_script:
    - npm install
  cache:
    untracked: true
  only:
    - master
  script:
    - ./node_modules/gulp/bin/gulp.js lint-css

lint js:
  stage: lint-js
  cache:
    untracked: true
    policy: pull
  only:
    - master
  script:
    - ./node_modules/gulp/bin/gulp.js lint-js

run unit test:
  stage: unit-test
  cache:
    untracked: true
    policy: pull
  only:
    - master
  script:
    - ./node_modules/gulp/bin/gulp.js test

En el archivo de configuración YAML anterior, hemos dividido todo en 3 pasos. Cada una de las etapas es solo una gulp.task definida en gulpfile.js. Como tenemos instalado Node.js, el usuario puede ejecutar cualquiera de los pasos individualmente. Pero GitLab CI requiere que especifique qué imagen de Docker desea. En nuestro caso, este es el nodo: 6.11.2. Además, este atributo de Docker se puede configurar dentro de una etapa en particular, por lo que puede usar diferentes herramientas para cualquiera de las etapas.

Definición de etapa

Echemos un vistazo más profundo a esta etapa.

lint css:
  stage: lint-css     # <- Should map to the value defined in the 'stages'
  before_script:      # <- Pre-script
    - npm install
  cache:              # <- Enable caching on files so they are available in the next stage
    untracked: true   # <- Cache the git untracked files (ex. node_modules)
  only:
    - master          # <- This stage run only on master branch update
  script:             # <- The actually script of this stage
    - ./node_modules/gulp/bin/gulp.js lint-css

Los atributos before_script y script pueden tener varios valores (array en .yml), si el script falla, todo el paso se clasificará como no válido.

Lanzamiento de tubería (proceso de desarrollo)

En la configuración, preste atención a la pestaña Pipeline en el menú CI / CD. Allí se puede ver toda la historia del proceso de desarrollo.

Echemos un vistazo más de cerca a esta etapa.

Al hacer clic en un Pipeline específico, puede leer la salida detallada de la consola de cualquiera de las etapas. Esto es útil cuando se producen fallos de funcionamiento.

Beneficios de usar GitLab CI con Docker

Diferentes proyectos pueden requerir diferentes plataformas como Node.js, Ant, Maven. Anteriormente, con la herramienta Jenkins , tenía que asegurarme de que todas las plataformas estuvieran instaladas en el servidor. Con  Docker , puede hacer referencia a las dependencias disponibles en  Docker Hub  sin pedirle al administrador del servidor que instale esas dependencias en el propio servidor. De hecho, Jenkins tiene un complemento para crear un Pipeline y también puede funcionar con Docker. Pero como dije antes, tendrás que estar constantemente al tanto de sus actualizaciones, lo cual no es tan bueno en términos de esfuerzo y tiempo adicional.

Aunque prefiero usar  GitLab CI , esto no significa que pueda reemplazar completamente a la herramienta Jenkins . De hecho, Jenkins tiene una gran ventaja: es una interfaz de usuario conveniente y fácilmente personalizable que será conveniente no solo para los desarrolladores, sino también para el control de calidad (especialista en control de calidad) para realizar ciertas tareas, como la implementación y las pruebas de integración.

Al elegir la herramienta adecuada, sepa que no tiene que ser perfecta.

La clave del éxito no está en elegir la herramienta perfecta. El elemento principal del éxito son las personas que lo utilizan. Por lo tanto, antes de buscar una nueva herramienta o programa, intente identificar primero el problema que le gustaría resolver.

Ying Kit Yuen: Cómo configurar CI en GitLab usando Docker 

Compartir:
Categorías: Tutoriales

0 comentarios

Deja una respuesta

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.