SlideShare una empresa de Scribd logo
CircleCI
Continuous Integration
and Delivery
Ruben Egiguren (keopx)
26/05/2018
Me podéis encontrar en:
▸ Blog: www.keopx.net
▸ Drupal: www.drupal.org/u/keopx
▸ Twitter: @regiguren
Me llamo
Ruben Egiguren
(keopx)
Podéis encontrarnos en:
▸ Web: www.biko2.com
▸ Drupal: www.drupal.org/Biko2
▸ Twitter: @biko2
Trabajo en
Introducción
Introducción
Objetivo
▸ Qué es CircleCI
▸ Docker
▸ Drush
▸ Robo
▸ Behat
▸ Configuración
Qué es la
integración continua
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.
Que es la integración continua
Otras herramientas más conocidas:
▸ Jenkins
▸ Travis
▸ CircleCI
▸ Hay muchos otros (GitLab, Pipelines Bitbucket ...)
Docker
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/
Drush
Drush
▸ Drush permite ejecutar tareas varias:
▹ Instalación del sitio (limpio).
▹ Update de la base de datos
▹ Importar el CMI
▹ Limpiar cache
▹ ...
Robo
Modern Task Runner for PHP
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.
▹ ...
Behat
A php framework for autotesting your
business expectations.
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.
CircleCI
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.
▸ ...
▸ 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
▸ Vía workflows:
▹ Separa las tareas en sub-tareas
▹ Las subtareas se ejecutan en paralelo.
Pros - Procesamiento paralelo
## 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
Pros - Acceso SSH al entorno
Pros - Ejecutar localmente
Documentación: https://circleci.com/docs/2.0/local-cli/
▸ El servicio gratuito únicamente permite una
concurrentia.
▹ Esto es, dos tareas simultáneamente.
▸ No es tan personalizable como Jenkins.
CONTRAS
▸ 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
▸ 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
CircleCI - Drupal
## 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
#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
# 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
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
Gracias
Recursos
▸ 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
▸ Proyecto
▹ https://github.com/Lullabot/drupal8ci
▸ Ejemplos CircleCI
▹ https://circleci.com/docs/2.0/examples/
Recursos
[DrupalCampSpain2018] CircleCI
[DrupalCampSpain2018] CircleCI
Biko2
www.biko2.com
+34.91.436.48.54
info@biko2.com
Ruben Egiguren (keopx)

Más contenido relacionado

PPTX
Importancia de Google drive en una sesión de clase.
PDF
Fury - Docker Meetup
DOCX
Tecnologia taller 2
PDF
Seminario CLEFormacion-docker
DOCX
Documento google drive
PDF
Docker: la revolución en virtualización
PDF
"Al rico" PHP
PDF
Herramientas de trabajo para entorno LAMP
Importancia de Google drive en una sesión de clase.
Fury - Docker Meetup
Tecnologia taller 2
Seminario CLEFormacion-docker
Documento google drive
Docker: la revolución en virtualización
"Al rico" PHP
Herramientas de trabajo para entorno LAMP

Similar a [DrupalCampSpain2018] CircleCI (20)

PDF
CI integración continua
ODP
Ci4 free
PDF
DevOps+[Chef/Docker]
ODP
Desarrollo tecnologias software_libre_open_source
PPTX
Breve introducción práctica al DevOps - (es) 2021_03_18
PPTX
Symfony, cloud computing y webs scalables - decharlas
PPTX
Symfony, cloud computing y web escalables
PDF
Escalabilidad y alto rendimiento con Symfony2
PDF
Entonamiento y perfilado de Drupal
PDF
03 de Marzo 2015: Andrés Villarreal - Herramientas del Desarrollador Moderno
PDF
Herramientas de integración continua en proyectos software
PDF
Drupal grunt task - Drupal Camp CR 2015
PDF
Symfony en Drupal 8 - DrupalCamp Spain
PDF
¨Servermore or serverless.¨: Introducción a CI/CD desde dos filosofías de inf...
PPTX
Flujo de desarrollo para drupal (PFC)
PDF
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
PPTX
Ut jsilvareyes
PPTX
Framework Laravel
DOCX
EcoSistema DevOps DevSecOps un pequeño brief
PPTX
Barcamp v5 by Jose ToNy Verdin at Culiacan Sinaloa
CI integración continua
Ci4 free
DevOps+[Chef/Docker]
Desarrollo tecnologias software_libre_open_source
Breve introducción práctica al DevOps - (es) 2021_03_18
Symfony, cloud computing y webs scalables - decharlas
Symfony, cloud computing y web escalables
Escalabilidad y alto rendimiento con Symfony2
Entonamiento y perfilado de Drupal
03 de Marzo 2015: Andrés Villarreal - Herramientas del Desarrollador Moderno
Herramientas de integración continua en proyectos software
Drupal grunt task - Drupal Camp CR 2015
Symfony en Drupal 8 - DrupalCamp Spain
¨Servermore or serverless.¨: Introducción a CI/CD desde dos filosofías de inf...
Flujo de desarrollo para drupal (PFC)
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
Ut jsilvareyes
Framework Laravel
EcoSistema DevOps DevSecOps un pequeño brief
Barcamp v5 by Jose ToNy Verdin at Culiacan Sinaloa
Publicidad

Más de Keopx (20)

PDF
[DrupalCampSpain2024] Define y usa tu propia configuración para tus módulos c...
PDF
[DrupalCampSpain2023] Introducción al desarrollo de módulos en Drupal 10
PDF
[DrupalCampSpain2022] Introducción al desarrollo de módulos en Drupal 9
PDF
Fucking copyright
PDF
Segurtasuna sarean
PDF
[DrupalCampSpain2018] Trabajando en remoto
PDF
[DrupalCampSpain2018] Contribuir a Drupal
PDF
DrupalDay Bilbao 2014: Publica tu proyecto en drupal.org
PDF
El poder de webform (antes yaml form)
PDF
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
PDF
[Drupal campspain2017] Contribuir a Drupal, de 0 a 100
PDF
Contribuir a Drupal
PDF
Contribuir a Drupal - Entorno
PDF
Uso practico de git
PDF
WorkShop: Introducción a GIT
PDF
Drupal 8 WorkShop - e-Ghost 2015
PDF
Drupal 8 WorkShop
PDF
Drupal Day Bilbao 2014 - Sesión de cierre
PDF
Drupal Day Bilbao 2014 - Sesión de apertura
PDF
Introducción a git
[DrupalCampSpain2024] Define y usa tu propia configuración para tus módulos c...
[DrupalCampSpain2023] Introducción al desarrollo de módulos en Drupal 10
[DrupalCampSpain2022] Introducción al desarrollo de módulos en Drupal 9
Fucking copyright
Segurtasuna sarean
[DrupalCampSpain2018] Trabajando en remoto
[DrupalCampSpain2018] Contribuir a Drupal
DrupalDay Bilbao 2014: Publica tu proyecto en drupal.org
El poder de webform (antes yaml form)
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
[Drupal campspain2017] Contribuir a Drupal, de 0 a 100
Contribuir a Drupal
Contribuir a Drupal - Entorno
Uso practico de git
WorkShop: Introducción a GIT
Drupal 8 WorkShop - e-Ghost 2015
Drupal 8 WorkShop
Drupal Day Bilbao 2014 - Sesión de cierre
Drupal Day Bilbao 2014 - Sesión de apertura
Introducción a git
Publicidad

Último (6)

PPTX
Derechos_de_Autor_y_Creative_Commons.pptx
PPTX
sistemas de informacion.................
PDF
AutoCAD Herramientas para el futuro, Juan Fandiño
PDF
Su punto de partida en la IA: Microsoft 365 Copilot Chat
DOCX
trabajo programacion.docxxdxxxddxdxxdxdxxxdxxdxdxd
PPTX
Conceptos basicos de Base de Datos y sus propiedades
Derechos_de_Autor_y_Creative_Commons.pptx
sistemas de informacion.................
AutoCAD Herramientas para el futuro, Juan Fandiño
Su punto de partida en la IA: Microsoft 365 Copilot Chat
trabajo programacion.docxxdxxxddxdxxdxdxxxdxxdxdxd
Conceptos basicos de Base de Datos y sus propiedades

[DrupalCampSpain2018] CircleCI

  • 2. Me podéis encontrar en: ▸ Blog: www.keopx.net ▸ Drupal: www.drupal.org/u/keopx ▸ Twitter: @regiguren Me llamo Ruben Egiguren (keopx)
  • 3. Podéis encontrarnos en: ▸ Web: www.biko2.com ▸ Drupal: www.drupal.org/Biko2 ▸ Twitter: @biko2 Trabajo en
  • 5. Introducción Objetivo ▸ Qué es CircleCI ▸ Docker ▸ Drush ▸ Robo ▸ Behat ▸ Configuración
  • 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. Que es la integración continua Otras herramientas más conocidas: ▸ Jenkins ▸ Travis ▸ CircleCI ▸ Hay muchos otros (GitLab, Pipelines Bitbucket ...)
  • 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. Drush
  • 12. Drush ▸ Drush permite ejecutar tareas varias: ▹ Instalación del sitio (limpio). ▹ Update de la base de datos ▹ Importar el CMI ▹ Limpiar cache ▹ ...
  • 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. Behat A php framework for autotesting your business expectations.
  • 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.
  • 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. ▸ 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. ▸ Vía workflows: ▹ Separa las tareas en sub-tareas ▹ Las subtareas se ejecutan en paralelo. Pros - Procesamiento paralelo
  • 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. Pros - Acceso SSH al entorno
  • 23. Pros - Ejecutar localmente Documentación: https://circleci.com/docs/2.0/local-cli/
  • 24. ▸ El servicio gratuito únicamente permite una concurrentia. ▹ Esto es, dos tareas simultáneamente. ▸ No es tan personalizable como Jenkins. CONTRAS
  • 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. ▸ 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
  • 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. #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. # 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. 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
  • 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. ▸ Proyecto ▹ https://github.com/Lullabot/drupal8ci ▸ Ejemplos CircleCI ▹ https://circleci.com/docs/2.0/examples/ Recursos