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)

[DrupalCampSpain2018] CircleCI

  • 1.
  • 2.
    Me podéis encontraren: ▸ 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
  • 4.
  • 5.
    Introducción Objetivo ▸ Qué esCircleCI ▸ Docker ▸ Drush ▸ Robo ▸ Behat ▸ Configuración
  • 6.
  • 7.
    Qué es laintegració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 laintegración continua Otras herramientas más conocidas: ▸ Jenkins ▸ Travis ▸ CircleCI ▸ Hay muchos otros (GitLab, Pipelines Bitbucket ...)
  • 9.
  • 10.
    Docker ▸ Usar imagenesDocker. ▸ 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.
  • 12.
    Drush ▸ Drush permiteejecutar tareas varias: ▹ Instalación del sitio (limpio). ▹ Update de la base de datos ▹ Importar el CMI ▹ Limpiar cache ▹ ...
  • 13.
  • 14.
    Robo ▸ Robo esun 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 frameworkfor autotesting your business expectations.
  • 16.
    Behat ▸ Behat esun 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.
  • 18.
    CircleCI ▸ Con CircleCIcrea 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 documentode 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 imagesand 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 - AccesoSSH al entorno
  • 23.
    Pros - Ejecutarlocalmente Documentación: https://circleci.com/docs/2.0/local-cli/
  • 24.
    ▸ El serviciogratuito únicamente permite una concurrentia. ▹ Esto es, dos tareas simultáneamente. ▸ No es tan personalizable como Jenkins. CONTRAS
  • 25.
    ▸ Conocimiento: ▹ ~50horas 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 documentode 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.
  • 28.
    ## Defines imagesand 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 torun 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 aworkflow 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
  • 32.
  • 33.
  • 34.
    ▸ Basada enla 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
  • 38.