Configuring Jenkins Authentication with Auth0

The procedure described here is based on Jenkins 2.7.4 but I think it should also work with other (not so distant) versions.

First of all, log into your Auth0 account.

Then create a new client application (“Clients” item in left-hand menu).

auth0_1

In  the “Create Client” dialog set the name of your client application (for example “MyJenkins“) and choose the application type “Regular Web Applications“, finally click “Create“.

auth0_2

Once the application is created, go to “Settings” and set the value of the “Allowed Callback URLs” to “http://YOUR_JENKINS_URL/securityRealm/finishLogin“. Click “Save Changes“.

auth0_4

Scroll down to the “Advanced Settings” section, click on “Endpoints“. Take the SAML Metadata URL and save the content in that URL into a file (remember this file because we will use it later when configuring Jenkins).

auth0_9

Go to the “Addons” tab and enable “SAML2” option.

auth0_5

In the Addon configuration dialog edit the settings to set the “audience” and “recipient” values to “http://%5BYOUR_JENKINS_URL%5D/securityRealm/finishLogin“.

auth0_6

Click “Save” and close de dialog. Now you should see the SAML2 option is enabled.

auth0_7

 

That’s all on Auth0 size, now let’s work on Jenkins.

To perform the following steps, you need to be logged in with a user with administrator profile. I assume the reader is already familiar with Jenkins so the instructions won’t be so detailed.

First of all we need to install the “SAML Plugin“.

auth0_8

Once the installation is ready go to “Manage Jenkins > Configure Global Security“. In the “Security Realm” pick “SAML 2.0” and in the “IdP Metadata” box paste the content of metadata file you saved on before.

Scroll down to the “Authorization” section and ensure the option “Logged-in users can do anything” is selected (authorization  is something we will work on later). Scroll down to the bottom of the page and click “Save“.

That’s all.  Close the browser [*] and the next time you try to log in you will be redirected to Auth0. Now every user enabled in your Auth0 account will be able to log into Jenkins.

In the next article I will explain how to configure authorization.

[*] at the moment of this writing there is bug in the SAML plugin that affect a logout feature https://issues.jenkins-ci.org/browse/JENKINS-37311.

projifm: fin de primera iteración

El lunes pasado completamos la primera iteración con un muy buen desempeño. A pesar de haber sufrido retraso por parte de un proveedor externo de una API logramos entregar toda la funcionalidad comprometida, solo nos quedó pendiente una tarea relacionada a una aplicación legacy con la que debemos integrarnos.

Me sentí muy cómodo con la estructura del equipo: 3 devs (yo entre ellos) + 1 tester + 1 facilitador + PO (+ 1 persona en tareas de infraestructura con dedicación parcial).  La forma en que trabajamos es bastante aproximada a lo propuesto por XP. Entre las prácticas que utilizamos están: daily stand ups, reunión de planificación, reunión de review, retrospectivas, #noEstimates, product backlog, spikes, pruebas automatizadas, deploy automatizado, mob-programming, collective ownership, control de configuración, TDD (poco pero en ascenso), versionamiento de base de datos, etc.

Entre los temas a mejorar surgidos en la retrospectiva estuvieron:

  • Mejorar el flujo de release: nos pasó que varios de los items del backlog se estiraron durante varios días y luego los cerramos “todos juntos” hacía el final de la iteración. Esto generó que el burn-down chart tenga una meseta importante.
  • Mejorar la interacción con nuestro “DevOp” pues tuvimos algunas fricciones consecuencia de la falta de claridad en algunos acuerdo de trabajo (lo pongo entre comillas pues considero que DevOps es más un mindset que un rol)

Reclutando programadores: juniority

Reclutando programadores: juniority

¿Cuantas veces te cruzaste con alguien supuestamente de cierto nivel de “seniority” que estuvo por encima de las expectativas para ese nivel? Yo creo que muy pocas veces. En general creo que la situación más común es la inversa: quien en los papeles es nivel X , en la práctica termina siendo nivel Z (siendo Z < X). Es por esto que cuando tengo que hablar de seniority prefiero utilizar el término juniority, ¡ja!.

Más allá del chiste, creo que los niveles de seniority/juniority son clasificaciones bastante inútiles en la mayoría de los casos. Las clasificaciones tienen utilidad cuando cada clase tiene un significado universal que permite establecer un lenguaje común. El nivel de seniority suele asociarse a la experiencia. El problema es que no hay un acuerdo universal respecto de cuanta experiencia se requiere para cada nivel de seniority. Para CESSI por ejemplo, senior implica más de 4 años de experiencia, pero conozco de organizaciones en las que se requiere más de 6 años para ese mismo nivel.

Pero aún pudiendo lograr un acuerdo universal sobre la cantidad de años de experiencia de cada nivel de seniority, hay algunas otras cuestiones a considerar:

  • el tiempo que se realiza una actividad de índole intelectual no resulta necesariamente proporcional al nivel de maestría de la persona en esa actividad.
  • en muchos casos resulta más relevante la cantidad de experiencias que la duración de la experiencia. No es lo mismo una persona que durante 6 años trabajó tan solo en 2 proyectos que una persona que en 3 años trabajó en más de 10 proyectos. Yo creo que en la mayoría de los casos preferiría a esta segunda persona.
  • finalmente hay otro conjunto de factores que suelen influir en la determinación del seniority, cuestiones tales como aptitudes, habilidades y conocimiento, temas que trataré en el siguiente artículo.

continuará…

Reclutando programadores: perfiles

Para algunos el término “programador” no resulta apropiado para describir a aquellos que desarrollan software de forma profesional, por el simple hecho que la actividad de programar es solo una parte de lo que hay que hacer. Un término mucho más aceptado es “desarrollador”. Pero  incluso hay empresas que prefieren hablar en formal general de “Ingenieros”, independientemente de que una persona tenga formalmente ese título académico.  A propósito de esta diversidad de terminología, hace un par de años la Cámara de Empresas de Software y Servicios Informáticos de Argentina (CESSI) llevó adelante una iniciativa para “estandarizar” los perfiles informáticos. Esta iniciativa derivó en La guía de perfiles ocupacionales de TI. Si bien desconozco cuán utilizada es esta guía en la actualidad por las empresas del sector, creo que resulta un buen punto de partida para hablar sobre perfiles informáticos.

Esta guía no menciona explícitamente un perfil de programador. Los roles más “cercanos” que menciona son: Desarrollador de Software y Arquitecto de Software. Personalmente me gusta la descripción de los perfiles, creo que es bastante completa aunque algunos detalles que me llamaron la atención:

  • En el caso del arquitecto se menciona explícitamente entre sus habilidades “Pasión por la tecnología”. Esto me parece fantástico pero me llama la atención que tal característica no figure entre las del desarrollador. No digo que este bien ni mal, simplemente me llama la atención y me hace pensar, en este momento no tengo opinión formada al respecto.
  • Creo que nunca me convenció la idea de “EL arquitecto” (a pesar de haber tenido ese “título” en uno de mis trabajos). Pero creo que de aceptar la existencia de dicho perfil imagino que es naturalmente un perfil senior. Sin embargo la guía de CESSI propone dos niveles de arquitecto: semi-senior y senior.

Este último punto abre la puerta para hablar sobre “seniority”, pero eso será parte de otro post ya que es un tema para hablar largo y tendido.

Continuará…

team.split() & Project.new()

Hace tres meses me sume a un proyecto que recién estaba empezando. En aquel momento el equipo estaba aún en formación y éramos unas 9 personas. Hace dos semanas llegamos a ser 15 personas en el equipo. Obviamente ya no era factible alimentarnos con dos pizzas.

Por ello fue que la semana pasada partimos el equipo y ahora estoy trabajando en un equipo de 5 personas: 3 devs, 1 tester y 1 facilitador. Estamos trabajando en rehacer desde cero un componente existente en la plataforma. Esperamos poder liberarlo en aproximadamente 5 o 6 semanas.

Ayer empezamos la primer iteración. La planning estaba agendada para las 11 de la mañana, pero como todos estabámos en la oficina desde las 9, decidimos comenzar a trabajar en algunas tareas de setup todos juntos: creación del repositorio Git y de la estructura de la solución base y configuración del Jenkins para que haga integración continua (#ci). Luego hicimos la planning donde acordamos con nuestro PO los items a trabajar durante la iteración. Por el momento y dadas las particularidades de nuestro proyecto, no estamos estimando los items de nuestro backlog (#NoEstimates). Simplemente intentamos particionar los items de forma tal que sean pequeños y que requieran no más de 2 días de trabajo cada uno. De esta forma medimos cantidad de items completados por iteración.

A continuación de la planning debatimos algunas cuestiones de diseño de alto nivel. Ya por la tarde, con todo el equipo trabajando sobre una compu + proyector (#mob-programming like) comenzamos a escribir las pruebas de aceptación que nos guiarán en el desarrollo de las funcionalidades comprometidas (#tdd). Esto nos permitió detectar en forma temprana algunas dudas sobre el comportamiento esperado de la aplicación.

Estoy muy entusiasmado con este proyecto, ya que implica el trabajo con un equipo nuevo, teniendo la confianza del cliente para hacer las cosas de la forma que nosotros consideramos más apropiada.

Continuará…

Reclutando programadores: cortesía

Reclutando programadores: cortesía

Una empresa analiza el CV de una candidato, lo contacta y decide citarlo para una entrevista. El candidato acepta la invitación y la entrevista se concreta. La empresa finalmente por X motivo decide no contratar al candidato pero no se lo notifica explícitamente, simplemente no vuelve a contactarlo.

Fea la actitud.

Si el candidato se tomó el tiempo para asistir a la entrevista, la empresa debería mínimamente enviarle un mail para notificarle su decisión. No pretendo que la empresa de explicaciones, simplemente que tenga la cortesía mínima de enviar un mail para que el candidato no quede pendiente de una falsa ilusión. Y no importa que la entrevista haya terminado con la clásica frase “Gracias por venir, si decidimos avanzar con el proceso te llamamos”, creo que de todas formas hay que notificar al candidato, es una cuestión de cortesía.

Adicionalmente si se le pidió al candidato resolver algún tipo de ejercicio considero que la empresa debería mínimamente dar algún tipo de feedback al respecto. Una vez más una simple cuestión de cortesía. El costo es mínimo y deja una buena imagen de la empresa.

Reclutando programadores

Desde hace ya un par de años que la demanda de profesionales informáticos en Argentina está por encima de la oferta disponible. Por esto es que algunas empresas han comenzado a prestar mayor atención a ciertas cuestiones como el proceso de reclutamiento y los planes de carrera.

El año pasado una empresa en que había trabajado como empleado tiempo atrás, me contactó para que los ayudara con un plan de entrenamiento para programadores y líderes técnicos. Nos reunimos a hablar del tema para entender mejor sus necesidades y finalmente terminé presentando una propuesta integral que incluía trabajar sobre el proceso de reclutamiento, el entrenamiento y los planes de carrera. Si bien el proyecto nunca se concretó, yo estuve pensando bastante en el tema y un libro que lei recientemente me ayudó a confirmar algunos puntos de mi visión.

Una charla que tuve con un colega la semana pasada me motivó para compartir mis ideas, así que decidí inaugurar una nueva serie de artículos en este blog y que voy a bautizar como: “Reclutando programadores”.

Continuará…

recluting