SlideShare une entreprise Scribd logo
1  sur  38
Télécharger pour lire hors ligne
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
Biko2
www.biko2.com
+34.91.436.48.54
info@biko2.com
Ruben Egiguren (keopx)

Contenu connexe

Similaire à Configura CI con CircleCI para Drupal

Drupal 7 para sitios de alto rendimiento y alta disponibilidad
Drupal 7 para sitios de alto rendimiento y alta disponibilidadDrupal 7 para sitios de alto rendimiento y alta disponibilidad
Drupal 7 para sitios de alto rendimiento y alta disponibilidadIván Campaña Naranjo
 
Dev ops with Data
Dev ops with DataDev ops with Data
Dev ops with Datannakasone
 
Corriendo SQL Server en Docker
Corriendo SQL Server en DockerCorriendo SQL Server en Docker
Corriendo SQL Server en DockerJavier Villegas
 
Curso CDA: Seguridade e rendemento en Drupal
Curso CDA: Seguridade e rendemento en DrupalCurso CDA: Seguridade e rendemento en Drupal
Curso CDA: Seguridade e rendemento en DrupalAlberto Permuy Leal
 
Presentacion #2 github Aplicaciones Seguras
Presentacion #2 github Aplicaciones SegurasPresentacion #2 github Aplicaciones Seguras
Presentacion #2 github Aplicaciones SegurasJosé Moreno
 
Drupal8 : novedades y nuevas funcionalidades
Drupal8 : novedades y nuevas funcionalidadesDrupal8 : novedades y nuevas funcionalidades
Drupal8 : novedades y nuevas funcionalidadesAlberto Permuy Leal
 
Practica 2003 server_acitve_directory_fran_gavilan
Practica 2003 server_acitve_directory_fran_gavilanPractica 2003 server_acitve_directory_fran_gavilan
Practica 2003 server_acitve_directory_fran_gavilanTerrafx9
 
De desarrollo a producción usando docker
De desarrollo a producción usando dockerDe desarrollo a producción usando docker
De desarrollo a producción usando dockerChristian Rodriguez
 
Workshop docker: Iniciando en el Mundo de los Contenedores
Workshop docker: Iniciando en el Mundo de los ContenedoresWorkshop docker: Iniciando en el Mundo de los Contenedores
Workshop docker: Iniciando en el Mundo de los ContenedoresJesús A. Rodríguez B.
 
Plug&amp;play:deploying big data_solutions
Plug&amp;play:deploying big data_solutionsPlug&amp;play:deploying big data_solutions
Plug&amp;play:deploying big data_solutionsDavid Piris
 
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7Luis Ruiz Pavón
 
Drupalcamp 2014 reconstruir un medio digital idealista news
Drupalcamp 2014   reconstruir un medio digital idealista newsDrupalcamp 2014   reconstruir un medio digital idealista news
Drupalcamp 2014 reconstruir un medio digital idealista newsMartín .
 
Reconstruir un medio digital: idealista/news - Drupalcamp Spain 2014
Reconstruir un medio digital: idealista/news - Drupalcamp Spain 2014Reconstruir un medio digital: idealista/news - Drupalcamp Spain 2014
Reconstruir un medio digital: idealista/news - Drupalcamp Spain 2014Rodrigo Alfaro
 
Dynamics saturday madrid 2018 bc-on-docker - jakub
Dynamics saturday madrid 2018   bc-on-docker - jakubDynamics saturday madrid 2018   bc-on-docker - jakub
Dynamics saturday madrid 2018 bc-on-docker - jakubDemian Raschkovan
 
[DrupalCampSpain2018] Contribuir a Drupal
[DrupalCampSpain2018] Contribuir a Drupal[DrupalCampSpain2018] Contribuir a Drupal
[DrupalCampSpain2018] Contribuir a DrupalKeopx
 
BootCamp Online en DevOps (and SecDevOps) de GeeksHubs Academy
BootCamp Online en DevOps (and SecDevOps) de GeeksHubs AcademyBootCamp Online en DevOps (and SecDevOps) de GeeksHubs Academy
BootCamp Online en DevOps (and SecDevOps) de GeeksHubs AcademyTelefónica
 
Docker - Sysmana 2014
Docker - Sysmana 2014Docker - Sysmana 2014
Docker - Sysmana 2014quaip
 

Similaire à Configura CI con CircleCI para Drupal (20)

Drupal 7 para sitios de alto rendimiento y alta disponibilidad
Drupal 7 para sitios de alto rendimiento y alta disponibilidadDrupal 7 para sitios de alto rendimiento y alta disponibilidad
Drupal 7 para sitios de alto rendimiento y alta disponibilidad
 
Dev ops with Data
Dev ops with DataDev ops with Data
Dev ops with Data
 
Corriendo SQL Server en Docker
Corriendo SQL Server en DockerCorriendo SQL Server en Docker
Corriendo SQL Server en Docker
 
Curso CDA: Seguridade e rendemento en Drupal
Curso CDA: Seguridade e rendemento en DrupalCurso CDA: Seguridade e rendemento en Drupal
Curso CDA: Seguridade e rendemento en Drupal
 
Presentacion #2 github Aplicaciones Seguras
Presentacion #2 github Aplicaciones SegurasPresentacion #2 github Aplicaciones Seguras
Presentacion #2 github Aplicaciones Seguras
 
Kubernetes para developers
Kubernetes para developersKubernetes para developers
Kubernetes para developers
 
Drupal8 : novedades y nuevas funcionalidades
Drupal8 : novedades y nuevas funcionalidadesDrupal8 : novedades y nuevas funcionalidades
Drupal8 : novedades y nuevas funcionalidades
 
Practica 2003 server_acitve_directory_fran_gavilan
Practica 2003 server_acitve_directory_fran_gavilanPractica 2003 server_acitve_directory_fran_gavilan
Practica 2003 server_acitve_directory_fran_gavilan
 
De desarrollo a producción usando docker
De desarrollo a producción usando dockerDe desarrollo a producción usando docker
De desarrollo a producción usando docker
 
Workshop docker: Iniciando en el Mundo de los Contenedores
Workshop docker: Iniciando en el Mundo de los ContenedoresWorkshop docker: Iniciando en el Mundo de los Contenedores
Workshop docker: Iniciando en el Mundo de los Contenedores
 
Devops episodio 1. devOpsTnf
Devops episodio 1. devOpsTnf Devops episodio 1. devOpsTnf
Devops episodio 1. devOpsTnf
 
Plug&amp;play:deploying big data_solutions
Plug&amp;play:deploying big data_solutionsPlug&amp;play:deploying big data_solutions
Plug&amp;play:deploying big data_solutions
 
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
 
Drupalcamp 2014 reconstruir un medio digital idealista news
Drupalcamp 2014   reconstruir un medio digital idealista newsDrupalcamp 2014   reconstruir un medio digital idealista news
Drupalcamp 2014 reconstruir un medio digital idealista news
 
Reconstruir un medio digital: idealista/news - Drupalcamp Spain 2014
Reconstruir un medio digital: idealista/news - Drupalcamp Spain 2014Reconstruir un medio digital: idealista/news - Drupalcamp Spain 2014
Reconstruir un medio digital: idealista/news - Drupalcamp Spain 2014
 
Dynamics saturday madrid 2018 bc-on-docker - jakub
Dynamics saturday madrid 2018   bc-on-docker - jakubDynamics saturday madrid 2018   bc-on-docker - jakub
Dynamics saturday madrid 2018 bc-on-docker - jakub
 
ATICA DevOps
ATICA DevOpsATICA DevOps
ATICA DevOps
 
[DrupalCampSpain2018] Contribuir a Drupal
[DrupalCampSpain2018] Contribuir a Drupal[DrupalCampSpain2018] Contribuir a Drupal
[DrupalCampSpain2018] Contribuir a Drupal
 
BootCamp Online en DevOps (and SecDevOps) de GeeksHubs Academy
BootCamp Online en DevOps (and SecDevOps) de GeeksHubs AcademyBootCamp Online en DevOps (and SecDevOps) de GeeksHubs Academy
BootCamp Online en DevOps (and SecDevOps) de GeeksHubs Academy
 
Docker - Sysmana 2014
Docker - Sysmana 2014Docker - Sysmana 2014
Docker - Sysmana 2014
 

Plus de Keopx

[DrupalCampSpain2023] Introducción al desarrollo de módulos en Drupal 10
[DrupalCampSpain2023] Introducción al desarrollo de módulos en Drupal 10[DrupalCampSpain2023] Introducción al desarrollo de módulos en Drupal 10
[DrupalCampSpain2023] Introducción al desarrollo de módulos en Drupal 10Keopx
 
[DrupalCampSpain2022] Introducción al desarrollo de módulos en Drupal 9
[DrupalCampSpain2022] Introducción al desarrollo de módulos en Drupal 9[DrupalCampSpain2022] Introducción al desarrollo de módulos en Drupal 9
[DrupalCampSpain2022] Introducción al desarrollo de módulos en Drupal 9Keopx
 
Fucking copyright
Fucking copyrightFucking copyright
Fucking copyrightKeopx
 
Segurtasuna sarean
Segurtasuna sareanSegurtasuna sarean
Segurtasuna sareanKeopx
 
[DrupalCampSpain2018] Trabajando en remoto
[DrupalCampSpain2018] Trabajando en remoto[DrupalCampSpain2018] Trabajando en remoto
[DrupalCampSpain2018] Trabajando en remotoKeopx
 
DrupalDay Bilbao 2014: Publica tu proyecto en drupal.org
DrupalDay Bilbao 2014: Publica tu proyecto en drupal.orgDrupalDay Bilbao 2014: Publica tu proyecto en drupal.org
DrupalDay Bilbao 2014: Publica tu proyecto en drupal.orgKeopx
 
El poder de webform (antes yaml form)
El poder de webform (antes yaml form)El poder de webform (antes yaml form)
El poder de webform (antes yaml form)Keopx
 
[Drupal campspain2017] Contribuir a Drupal, de 0 a 100
[Drupal campspain2017] Contribuir a Drupal, de 0 a 100[Drupal campspain2017] Contribuir a Drupal, de 0 a 100
[Drupal campspain2017] Contribuir a Drupal, de 0 a 100Keopx
 
Contribuir a Drupal
Contribuir a DrupalContribuir a Drupal
Contribuir a DrupalKeopx
 
Contribuir a Drupal - Entorno
Contribuir a Drupal - EntornoContribuir a Drupal - Entorno
Contribuir a Drupal - EntornoKeopx
 
Uso practico de git
Uso practico de gitUso practico de git
Uso practico de gitKeopx
 
WorkShop: Introducción a GIT
WorkShop: Introducción a GITWorkShop: Introducción a GIT
WorkShop: Introducción a GITKeopx
 
Drupal 8 WorkShop - e-Ghost 2015
Drupal 8 WorkShop - e-Ghost 2015  Drupal 8 WorkShop - e-Ghost 2015
Drupal 8 WorkShop - e-Ghost 2015 Keopx
 
Drupal 8 WorkShop
Drupal 8 WorkShopDrupal 8 WorkShop
Drupal 8 WorkShopKeopx
 
Herramientas de trabajo para entorno LAMP
Herramientas de trabajo para entorno LAMPHerramientas de trabajo para entorno LAMP
Herramientas de trabajo para entorno LAMPKeopx
 
Drupal Day Bilbao 2014 - Sesión de cierre
Drupal Day Bilbao 2014 - Sesión de cierreDrupal Day Bilbao 2014 - Sesión de cierre
Drupal Day Bilbao 2014 - Sesión de cierreKeopx
 
Drupal Day Bilbao 2014 - Sesión de apertura
Drupal Day Bilbao 2014 - Sesión de aperturaDrupal Day Bilbao 2014 - Sesión de apertura
Drupal Day Bilbao 2014 - Sesión de aperturaKeopx
 
Introducción a git
Introducción a gitIntroducción a git
Introducción a gitKeopx
 
Business inteligence
Business inteligenceBusiness inteligence
Business inteligenceKeopx
 
Herramientas de reporte
Herramientas de reporteHerramientas de reporte
Herramientas de reporteKeopx
 

Plus de Keopx (20)

[DrupalCampSpain2023] Introducción al desarrollo de módulos en Drupal 10
[DrupalCampSpain2023] Introducción al desarrollo de módulos en Drupal 10[DrupalCampSpain2023] Introducción al desarrollo de módulos en Drupal 10
[DrupalCampSpain2023] Introducción al desarrollo de módulos en Drupal 10
 
[DrupalCampSpain2022] Introducción al desarrollo de módulos en Drupal 9
[DrupalCampSpain2022] Introducción al desarrollo de módulos en Drupal 9[DrupalCampSpain2022] Introducción al desarrollo de módulos en Drupal 9
[DrupalCampSpain2022] Introducción al desarrollo de módulos en Drupal 9
 
Fucking copyright
Fucking copyrightFucking copyright
Fucking copyright
 
Segurtasuna sarean
Segurtasuna sareanSegurtasuna sarean
Segurtasuna sarean
 
[DrupalCampSpain2018] Trabajando en remoto
[DrupalCampSpain2018] Trabajando en remoto[DrupalCampSpain2018] Trabajando en remoto
[DrupalCampSpain2018] Trabajando en remoto
 
DrupalDay Bilbao 2014: Publica tu proyecto en drupal.org
DrupalDay Bilbao 2014: Publica tu proyecto en drupal.orgDrupalDay Bilbao 2014: Publica tu proyecto en drupal.org
DrupalDay Bilbao 2014: Publica tu proyecto en drupal.org
 
El poder de webform (antes yaml form)
El poder de webform (antes yaml form)El poder de webform (antes yaml form)
El poder de webform (antes yaml form)
 
[Drupal campspain2017] Contribuir a Drupal, de 0 a 100
[Drupal campspain2017] Contribuir a Drupal, de 0 a 100[Drupal campspain2017] Contribuir a Drupal, de 0 a 100
[Drupal campspain2017] Contribuir a Drupal, de 0 a 100
 
Contribuir a Drupal
Contribuir a DrupalContribuir a Drupal
Contribuir a Drupal
 
Contribuir a Drupal - Entorno
Contribuir a Drupal - EntornoContribuir a Drupal - Entorno
Contribuir a Drupal - Entorno
 
Uso practico de git
Uso practico de gitUso practico de git
Uso practico de git
 
WorkShop: Introducción a GIT
WorkShop: Introducción a GITWorkShop: Introducción a GIT
WorkShop: Introducción a GIT
 
Drupal 8 WorkShop - e-Ghost 2015
Drupal 8 WorkShop - e-Ghost 2015  Drupal 8 WorkShop - e-Ghost 2015
Drupal 8 WorkShop - e-Ghost 2015
 
Drupal 8 WorkShop
Drupal 8 WorkShopDrupal 8 WorkShop
Drupal 8 WorkShop
 
Herramientas de trabajo para entorno LAMP
Herramientas de trabajo para entorno LAMPHerramientas de trabajo para entorno LAMP
Herramientas de trabajo para entorno LAMP
 
Drupal Day Bilbao 2014 - Sesión de cierre
Drupal Day Bilbao 2014 - Sesión de cierreDrupal Day Bilbao 2014 - Sesión de cierre
Drupal Day Bilbao 2014 - Sesión de cierre
 
Drupal Day Bilbao 2014 - Sesión de apertura
Drupal Day Bilbao 2014 - Sesión de aperturaDrupal Day Bilbao 2014 - Sesión de apertura
Drupal Day Bilbao 2014 - Sesión de apertura
 
Introducción a git
Introducción a gitIntroducción a git
Introducción a git
 
Business inteligence
Business inteligenceBusiness inteligence
Business inteligence
 
Herramientas de reporte
Herramientas de reporteHerramientas de reporte
Herramientas de reporte
 

Configura CI con CircleCI para Drupal

  • 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
  • 36.
  • 37.