¿Qué es Go?

0
6596

Integración continua con Go

Índice de contenidos.

¿Qué es Go?

Go es un servidor de integración y liberación continua de software.

  • Integración Continua es la práctica de automatizar la construcción y pruebas del proyecto para detectar errores durante el desarrollo.
  • Liberación Continua es la práctica de automatizar la liberación de software. Esto significa que el servidor puede generar automáticamente un entregable a partir de cada cambio en el código fuente. La liberación continua implica integración continua, y una serie de pruebas de aceptación del producto.

Go es código abierto. Su desarrollo está controlado por ThoughtWorks.

  • ThoughtWorks es una empresa de desarrollo de software para terceros. Están relacionados con el movimiento ágil, y han hecho numerosas contribuciones de código abierto como CruiseControl, Selenium, y otros.

Funcionalidades

  • Facilidad de modelado de pipelines, stages, jobs, and tasks.
  • Visualización de pipelines en forma de grafo.
  • Ejecución distribuida. Cualquier computador puede unirse como agente y ejecutar trabajos de un pipeline dentro de un sandbox local.
  • Backup en un click.
  • Fan-in. La construcción del proyecto se detiene si no se cumplen una serie de condiciones, por ejemplo, si los pipelines definidos no operan con la misma versión del código fuente.

Comparado con Jenkins

  • Jenkins tiene 600 plugins, Go tiene uno o dos.
  • Go tiene permisos de granularidad más fina.
  • Jenkins tiene menos capacidades de visualización de pipelines.
  • Jenkins tiene una comunidad más madura.
  • Jenkins no tiene un fan-in apropiado.

Conceptos

Elementos con los que se trabaja en Go:

  • Un material es código fuente tomado de un servidor de control de versiones (git, svn, etc) o un repositorio de paquetes de código (deb, jar, gem, etc.).
  • Un trabajo (job) es un conjunto de tareas que pueden realizarse en un agente.
  • Una fase (stage) es un conjunto de trabajos. Estos trabajos son paralelizables.
  • Un pipeline (tubería) es un conjunto de fases. Generalmente las fases se organizan en secuencias, donde el completado de una fase inicia la siguiente.

La instalación mínima de Go consiste en un agente y un servidor.

  • El agente tiene una serie de recursos (comandos, compiladores, entornos, librerías, etc.). Los trabajos se ejecutan en un agente dentro de un sandbox.
  • El servidor asigna trabajos a los agentes con los recursos apropiados.

El pipeline modela el proceso de construcción y entrega de software, desde el código fuente a las manos de los usuarios.

Instalación

Go está disponible para OS X, Linux, Windows, y Solaris.

La instalación en OS X es como sigue:

  • Descarga los DMGs para agente y servidor. Mueve los .app a /Applications.
  • Arranca el agente y servidor.
  • Apunta el agente al servidor (aparecerá un dialogo preguntando por la IP).

Cuando ejecutas el servidor se abre una página para administrarlo. Si pierdes la dirección puedes recuperarla desde un enlace en el about del ejecutable.

Si vas a ejecutar comandos del sistema, te convendrá saber el PATH. En OS X el PATH es /usr/bin:/bin:/usr/sbin:/sbin. Si quieres verlo por ti mismo ejecuta

  $> ps -p `pgrep go-server` -wwwE

Los datos de servidor se guardan en ~/Library/Application Support/Go Server. Pero que yo sepa no hay motivos para tocar ahí. Si quieres ver la actividad en los sandbox de los agentes usa fseventer.app o fs_usage (o filemon en Windows).

Un pipeline para iOS

Primero debes instalar:

Los pasos, en resumen, son estos:

  • Crea un pipeline con dos fases.
  • Crea una primera fase con un trabajo para compilar, probar, y generar un informe (abajo). Y un Test Artifact donde Source es test-reports y el campo Destination está vacío.
  xctool -workspace cdl-ios-app.xcworkspace -scheme product -sdk iphonesimulator -reporter junit:test-reports/junit.xml

  • Crea una segunda fase con Fetch Materials desactivado (si no, bajaría el código fuente y sobreescribiría el informe). Añade un comando para formatear el informe a HTML, y un Test Artifact donde Source es test-reports/ y el campo Destination está vacío.
  •   xsltproc -o test-reports/junit.html junit-frames.xsl test-reports/junit.xml

  • Edita el segundo trabajo, ve a Custom Tabs, y añade un tab con nombre JUnit y Path test-reports/index.html.
  • Ejecuta el pipeline. Si vas a la segunda fase, y pulsas en el tab JUnit deberías ver un informe JUnit en HTML. Si quieres llevarte este ejemplo contigo, ve a Admin > Config XML, y copia el fichero de configuración XML.

    En mi equipo tiene este aspecto

    Hay un pipeline “cdl-ios-app” con dos fases. La rueda dentada edita el pipeline, y el botón de play lo ejecuta. Las dos fases están en verde porque han tenido éxito, y si pulsas en ellas puedes ver los detalles de su ejecución.

    Problemas que puedes encontrar

    xctool no está en el path

    Ejecuta esto (o similares, fijate en el path):

      sudo ln -fs /Users/jano/tools/xctool/bin/xctool /usr/bin

    El workspace no contiene el scheme

    El mensaje es algo así como

      xctool: error: The workspace 'cdl-ios-app' does not contain a scheme named 'product'.

    La solución es

    • Abre el workspace (si no lo tienes crea uno, por ejemplo con cocoapods).
    • En Xcode ve a Product > Scheme > Manage Schemes…
    • En el scheme que estás usando asegurate de marcar la casilla Shared, y de apuntar Container al workspace, y no al fichero del proyecto.
    • Esto debería crear un fichero en cdl-ios-app.xcworkspace/ xcshareddata/xcschemes. Añade este fichero al repositorio con git add -f si lo tienes en .gitignore.

    Siguiente paso

    Si no conoces los beneficios de la integración continua lee Continuous Integration de Martin Fowler. Básicamente: automatizar la construcción de tu proyecto ahorra tiempo, dinero, y permite trabajar más eficientemente.

    Go es una herramienta para implementar el proceso de liberación continua. Pero las estrategias a implementar requieren conocimiento de los retos y soluciones a problemas comunes en la implementación de pipelines. El libro a leer para ello es Continuous Delivery de Jez Humble, David Farley. He aquí un capítulo gratis: Continuous Delivery: Anatomy of the Deployment Pipeline.

    La documentación del proyecto Go es muy completa. Visita el sitio http:// www.go.cd/ y lee la documentación, blog, y lista de correo.

    Mi impresión es que Go tiene más potencial que Jenkins y acabará reemplazándolo. Pero por ahora hay Jenkins para rato porque es más maduro y tiene más plugins.

    DEJA UNA RESPUESTA

    Por favor ingrese su comentario!

    He leído y acepto la política de privacidad

    Por favor ingrese su nombre aquí

    Información básica acerca de la protección de datos

    • Responsable:
    • Finalidad:
    • Legitimación:
    • Destinatarios:
    • Derechos:
    • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad