Spring Config: a key tool for DevOps & Continuous Delivery

Spring Cloud Config (scc) is a tool that provides support to externalize application configuration in a REST Service. The big picture is:

  • Add a SCC client your application so when your application starts, it can fetch its configuration from SCC server.
  • Setup a SCC server, which is a Java REST Service (more specifically is a Spring-Boot application).

The following image offers a overview of how Spring Cloud Config fits in you application architecture.

Some benefits of this strategy are:

  • You decouple the evolution of your application from the evolution of the configuration, that is: you application will be the same in every environment while the configuration will be different in each environment. At the same time the change rate of your application is different from the change rate of the configuration.
  • Your application forgets about where the configuration it stored because it delegates that concern to SCC server.
  • SCC server supports several storage options: Git, File System, Vault, Database, ConfigMaps, etc. The default option is Git which is great because it «force» you to have your configuration versioned.
  • SCC provides several common features related to configuration management like: check the current configuration values, configuration reloading, encryption of secrets and support for different configuration formats among other things.

While working with SCC I faced some issues regarding how to specify its configuration so I want to share some details here.

To make SCC Server read configuration from a remote Git repository:

spring.cloud.config.server.git.uri=https://.....

(this would work fine for public repositories, but if you need to use a private repository, which is a common case, you will need to specify some more parameters like strictHostKeyChecking and privateKey that are very well explained in the official documentation). When SCC server starts, it will clone the remote repository into a local directory whose location will be generated randomly at runtime (but it is also possible to specify the clone location).

To make it work with a local git repository (which contains a .git subdirectory), just use:

cloud.config.server.git.uri=file:///your/local/git/repo

To make ir work with a local «plain» directory we need to specify active profile as «native» which makes SCC server to read the config from a plain local directory (not a git directory)

spring.profiles.active=native
spring.cloud.config.server.native.searchLocations=file:/your/directory

It worth mentioning that even when Spring Cloud Config is built on Java, you can use any client technology to consume it because it exposes a REST API. The Spring team provides a Java client, but there are also clients for other technologies.

 

El Perfil de los alumnos de MeMo2 @ Fiuba

La semana pasada comenzaron las clases y de cara a conocer fehacientemente el perfil de los alumnos hice una breve encuesta. Comparto aquí algunos de los resultados.

Respecto de la condición laboral, el 70% trabaja y mayoritariamente lo hace en una actividad afín a la carrera.

Respecto de la cantidad de materias que están cursando este cuatrimestre, la mayoría (55%) contestó 3. Es un número «conservador» pero inferior a la cantidad que prescribe el plan de estudios formal. Esto podría ser una explicación para el hecho de que en general son muy pocos los que completan la carrera en el plazo estipulado por el plan.

Un dato que me llamo mucho la atención es la gran dispersión en la cantidad de materias aprobadas: el alumno con menos materias aprobadas tiene 10, mientras que el alumno con más materias aprobadas tiene 27. Una explicación posible para esto es que quienes tienen más materias, han cursado varias de las electivas, mientras que quienes tienen menos, han cursado solo las obligatorias para llegar a esta materia.

Finalmente, la última pregunta apuntaba al rol en el que les gustaría desempeñarse profesionalmente a largo plazo. Me alegró ver que la gran mayoría eligió roles técnicos.

Nueva edición del Taller de Prácticas DevOps incluyendo OpenShift/Kubernetes

El próximo jueves 3 de mayo voy a dictar una nueva edición de mi taller de prácticas devops, pero esta vez con nuevo agregado: OpenShift, la plataforma de gestión de contenedores desarrollada por Red Hat y basada en Kubernetes.

Hacía tiempo que tenía ganas de incorporar al taller algún ejercicio de Kubernetes pero no lograba buscarle para vuelta para que me dieran los tiempos. Finalmente decidí sacar un ejercicio de Puppet para agregar uno de OpenShift/Kubernetes.

Los interesados en participar pueden completar este formulario y los contactaré en breve:

 

Libros sobre estimación y planificación Ágil

Durante mucho tiempo mi libro de referencia sobre esta temática fue el clásico Agile Estimating and Planning de Mike Cohn. Pero hace un par de años lei otro libro que me pareció mucho mejor: Planning Extreme Programming, de Kent Beck y Martin Fowler. Este libro fue publicado en 2001, 5 años antes del libro de Cohn y si bien tiene mucho puntos en común con este, tiene también un conjunto de cuestiones muy prácticas que no están presentes en el libro de Cohn. Entre las cuestiones que me gustan de este libro es que sugiere como proceder cuando las cosas no funcionan «felizmente». Por otro lado creo que es un libro para leer de punta a punta, ya que -al igual que todos los libros de la serie XP- tiene capítulos cortos que hacen muy amena su lectura.

Resulta que ayer estaba preparando una clase para FIUBA y tomé algunas cosas de este excelente libro de Beck y Fowler y me pareció que sería interesante compartir esta opinión pues tengo la sospecha que no es muy popular.

Presenting at XP2018

This year the Extreme Programming Conference will be held the week of May 21 to 25th in Porto (Portugal) and I will be there.

The conference program looks great, with Kent Beck and Laurie Williams as keynote speakers and several social activities.

I will be presenting 2 sessions: a reduced version of my workshop on DevOps Practices and the paper about Technical and Organizational Agile Practices that is the result of the our research work at UNTREF.

In future posts I will share more details of my session.

Preparando la segunda edición de MeMo2 (95.21 / 75.10)

Dados ciertos cambios a nivel administrativo/curricular, a partir de 2018 el curso que dicto como MeMo2 (95.21) también estará disponible para alumnos que deban cursar TdD (75.10). Entiendo que lo mismo vale para el curso del Ing. Pantaleo que venia dictando TdD y que de ahora en más podrá recibir alumnos de MeMo2.

A partir de este cambio es posible que este cuatrimestre tenga más alumnos que el cuatrimestre pasado, hecho que sin duda podría impactar en la dinámica de la materia. Otro punto que también impactará en la dinámica de cursada será la posibilidad de que la universidad designe un docente auxiliar para el curso, yo ya presenté candidato y estoy a la espera de una respuesta.

Conceptualmente la dinámica está descripta en este artículo que presente en SECM el año pasado. Para quienes cursaron MeMo1 con Sergio Villagra, encontrarán muchas similitudes. Debo aclarar en términos de implementación aún hay un delta con la idea conceptual, pues la materia es aún muy nueva y entre otras cuestiones aún no he generado todos los videos que quisiera.

Para quienes esten considerando cursar 95.21/75.10 este primer cuatrimestre de 2018 les comparto algunos puntos del curso que estará a mi cargo y puede ser relevante tener presente en el momento de la inscripción:

  • Adicionalmente a las 6 horas semanales de clase, se espera una dedicación semanal constante de entre 4 y 8 horas (el cuatrimestre pasado los alumnos reportaron una dedicación promedio extra-clase de 5 horas semanales) .
  • Los contenidos de la materia incluyen varias cuestiones de índole técnica, las cuales en ocasiones suelen generar imprevisto (por alguna cosilla que no funciona) y las tareas pueden terminar llevando más de lo esperado)
  • Los contenidos de MeMo2 están relacionados de una forma tal que hace muy difícil poder completar la tarea N+1 si primero no se completo la tarea N. Esto hace que la hora de hacer las tareas, uno se encuentre casi obligado de hacerlas en el orden estipulado sin poder saltearlas.
  • Las tareas de programación se realizarán con lenguaje Ruby, pero no se enseñará como parte de la materia, habrá una clase de introductoria y links para profundizar, nada más (se espera que a esta altura de la carrera los alumnos sean capaces de aprender un lenguaje por sus propios medios)

Para quienes quieran leer algo más de información de la materia, pueden consultar estos artículos del cuatrimestre pasado.