Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

[DrupalCampSpain2018] CircleCI

224 views

Published on

[DrupalCampSpain2018] CircleCI

Published in: Software
  • Be the first to comment

  • Be the first to like this

[DrupalCampSpain2018] CircleCI

  1. 1. CircleCI Continuous Integration and Delivery Ruben Egiguren (keopx) 26/05/2018
  2. 2. Me podéis encontrar en: ▸ Blog: www.keopx.net ▸ Drupal: www.drupal.org/u/keopx ▸ Twitter: @regiguren Me llamo Ruben Egiguren (keopx)
  3. 3. Podéis encontrarnos en: ▸ Web: www.biko2.com ▸ Drupal: www.drupal.org/Biko2 ▸ Twitter: @biko2 Trabajo en
  4. 4. Introducción
  5. 5. Introducción Objetivo ▸ Qué es CircleCI ▸ Docker ▸ Drush ▸ Robo ▸ Behat ▸ Configuración
  6. 6. Qué es la integración continua
  7. 7. Qué es la integración continua ▸ La integración continua permite que su equipo entregue más software, con mayor calidad, durante un período de tiempo más largo. ▸ Una implementación exitosa de CI requiere una gestión adecuada del sprint, el producto y el riesgo financiero.
  8. 8. Que es la integración continua Otras herramientas más conocidas: ▸ Jenkins ▸ Travis ▸ CircleCI ▸ Hay muchos otros (GitLab, Pipelines Bitbucket ...)
  9. 9. Docker
  10. 10. Docker ▸ Usar imagenes Docker. ▸ Permite usar un Dockerfile. ▸ Se recomienda usar una imagen existente. ▸ Apache + PHP: ▹ https://hub.docker.com/r/keopx/drupal8ci/ ▹ Dispone de diferentes versiones de PHP ▸ MySQL ▹ https://hub.docker.com/r/keopx/mysql/ ▹ Dispone de diferentes versiones de MySQL ▸ Selenium para Behat ▹ https://hub.docker.com/r/selenium/standal one-chrome-debug/
  11. 11. Drush
  12. 12. Drush ▸ Drush permite ejecutar tareas varias: ▹ Instalación del sitio (limpio). ▹ Update de la base de datos ▹ Importar el CMI ▹ Limpiar cache ▹ ...
  13. 13. Robo Modern Task Runner for PHP
  14. 14. Robo ▸ Robo es un lanzador de tareas tareas totalmente personalizables al estilo PHP (OOP). ▸ Robo tiene una lista completa de tareas comunes integradas para desarrollo, prueba e implementación. ▸ Usar Robo para: ▹ Automatizar tareas comunes. ▹ Inicializar workers. ▹ Ejecutar tareas en paralelo ▹ Ejecutar comandos ▹ Ejecutar tests ▹ Ver cambios en el sistema de ficheros. ▹ ...
  15. 15. Behat A php framework for autotesting your business expectations.
  16. 16. Behat ▸ Behat es un framework open source Behavior-Driven Development para PHP. ▸ Es una herramienta para mantener la entrega de software importante a través de la comunicación continua, el descubrimiento deliberado y la automatización de pruebas. ▸ Escribes historias en lenguaje (casi) natural que describen el comportamiento de tu aplicación.
  17. 17. CircleCI
  18. 18. CircleCI ▸ Con CircleCI crea entornos personalizados. ▸ Aplica flujos de trabajo para controlar su pipeline de compilación. ▸ Flexibilidad en la asignación de recursos flexible. ▸ Notificaciones. ▸ Recompilar y acceso por ssh para realizar pasos manuales. ▸ ...
  19. 19. ▸ El documento de circleci se configura en una carpeta oculta y el formato yaml. ▹ .circleci/config.yml ▸ Autenticate con tu cuenta de GitHub/Bitbucket en https://circleci.com ▸ Permite a CircleCI ver los cambios de tu repositorio ▸ Este documento contiene la información de la configuración, tareas y demás. ▹ https://circleci.com/docs/2.0/examples/ Configuración
  20. 20. ▸ Vía workflows: ▹ Separa las tareas en sub-tareas ▹ Las subtareas se ejecutan en paralelo. Pros - Procesamiento paralelo
  21. 21. ## Defines images and working directory. defaults: &defaults docker: - image: keopx/drupal8ci:7.1 - image: selenium/standalone-chrome-debug:3.7.1-beryllium - image: keopx/mysql:5.7 environment: MYSQL_ALLOW_EMPTY_PASSWORD: 1 working_directory: /var/www/html Pros - Docker compose style
  22. 22. Pros - Acceso SSH al entorno
  23. 23. Pros - Ejecutar localmente Documentación: https://circleci.com/docs/2.0/local-cli/
  24. 24. ▸ El servicio gratuito únicamente permite una concurrentia. ▹ Esto es, dos tareas simultáneamente. ▸ No es tan personalizable como Jenkins. CONTRAS
  25. 25. ▸ Conocimiento: ▹ ~50 horas desde "nunca lo hemos usado Circle" hasta hecho. ▸ Mantenimiento muy mínimo: ▹ unas pocas horas dos veces al año para las actualizaciones básicas de Drupal. ▸ Gratis a xxx€/mes: ▹ Escalable según las necesidades de su organización. PROS - Costes
  26. 26. ▸ El documento de circleci se configura en una carpeta oculta y el formato yaml. ▹ .circleci/config.yml ▸ Este documento contiene la información de la configuración, tareas y demás. CircleCI - Configuración
  27. 27. CircleCI - Drupal
  28. 28. ## Defines images and working directory. defaults: &defaults docker: - image: keopx/drupal8ci:7.1 - image: selenium/standalone-chrome-debug:3.7.1-beryllium - image: keopx/mysql:5.7 environment: MYSQL_ALLOW_EMPTY_PASSWORD: 1 working_directory: /var/www/html Circle CI - Configuración
  29. 29. #Jobs ## Job to run Unit and Kernel tests. unit_kernel_tests: &unit_kernel_tests <<: *defaults steps: - checkout - *copy_robo - restore_cache: *restore_cache - run: name: Run PHPUnit tests command: robo job:run-unit-tests - store_test_results: path: /var/www/html/artifacts/phpunit - store_artifacts: path: /var/www/html/artifacts - save_cache: *save_cache Circle CI - Configuración
  30. 30. # Declare a workflow that runs all of our jobs in parallel. workflows: version: 2 test_and_lint: jobs: - run-unit-kernel-tests - run-behat-tests - run-code-sniffer - run-code-coverage Circle CI - Configuración
  31. 31. public function jobRunUnitTests() { $collection = $this->collectionBuilder(); $collection->addTask($this->installDependencies()); $collection->addTask($this->waitForDatabase()); $collection->addTask($this->installDrupal()); $collection->addTaskList($this->runUnitTests()); return $collection->run(); } protected function runUnitTests() { $force = true; $tasks = []; $tasks[] = $this->taskFilesystemStack() ->copy('.circleci/config/phpunit-drupal-8.5.xml', 'web/core/phpunit.xml', $force) ->mkdir('artifacts/phpunit', 777); $tasks[] = $this->taskExecStack() ->dir('web') ->exec('../vendor/bin/phpunit -c core --debug --verbose --log-junit ../artifacts/phpunit/phpunit.xml modules/custom'); return $tasks; } Circle CI - Configuración
  32. 32. Gracias
  33. 33. Recursos
  34. 34. ▸ Basada en la presentación de @juampynr y @deviantintegral en la DrupalCon 2018 de Nashville. ▹ Continuous Integration has never been so easy ▹ Video ▸ Artículos ▹ https://www.lullabot.com/articles/continuo us-integration-drupal-8-circleci ▹ Repositorio ▹ Video Recursos
  35. 35. ▸ Proyecto ▹ https://github.com/Lullabot/drupal8ci ▸ Ejemplos CircleCI ▹ https://circleci.com/docs/2.0/examples/ Recursos
  36. 36. Biko2 www.biko2.com +34.91.436.48.54 info@biko2.com Ruben Egiguren (keopx)

×