Ejecutar una prueba de integración continua con gitlab-ci y gitlab-runner.

Posted on jue 16 junio 2016 in Tutorial de integración continua • 2 min read

En artículos anteriores se explicó como usar gitlab-ce y gitlab-runner por medio de contenedores y conectarlos para la integración continua.

Para que funcione docker por medio de gitlab-runner es necesario modificar la configuración del runner agregando el nombre y la ip de la máquina como se muestra a continuación (archivo /etc/gitlab-runner/config.toml):

concurrent = 1

[[runners]]
  name = "Sample gitlab-ci cpp project"
  url = "http://12.168.0.60:9080t/ci"
  token = "5faac16d0aaf8f97fd66f5f586ed9f5f"
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "debian"
    privileged = false
    disable_cache = false
    volumes = ["/cache"]
    extra_hosts = ["culata.dst:192.168.0.60"]
  [runners.cache]
    Insecure = false

Luego de modificar el archivo se ejecuta:

gitlab-runner restart

En el artículo del runner se tiene registrado un proyecto llamado sample-gitlabci-cpp-project tomado de github.

Contiene lo siguiente:

sample-gitlabci-cpp-project
├── helloworld.cpp
├── README.md
└── verify.sh

El archivo helloworld.cpp tiene lo siguiente:

// 'Hello World!' program 

#include <iostream>

int main()
{
  std::cout << "Hello World!" << std::endl;
  return 0;
}

El archivo verify.sh es el que genera la construcción:

#!/bin/bash

echo "Starting sample CI verification script"

echo "Trying to execute ./helloworld"

OUTPUT=`./helloworld`
RETVAL=$?

if [ $RETVAL -eq 0 ]; then
  echo "Retval is 0, OK"
else
  echo "Retval is not 0, FAIL"
  exit 1
fi

if [ "$OUTPUT" == "Hello World!" ]; then
  echo "Output is correct, OK"
else
  echo "Output is not right, FAIL"
  exit 1
fi

Se tiene otro archivo que está oculto con nombre .gitlab-ci.yml, que contiene el proceso de construcción del contenedor docker con la ejecución del verify.sh:

# Specify the docker image to use (only used if using docker runners)
# See: http://doc.gitlab.com/ee/ci/docker/using_docker_images.html
image: debian      

# Define commands that run before each job's script
before_script:
  - apt-get update
  - apt-get install -y gcc g++

# Try to compile our sample hello world app
compile:
  script:
  # Compile our app
  - g++ helloworld.cpp -o helloworld
  # Verify that our compiled app works properly with a custom "test" script
  - ./verify.sh
  # Save the compiled output from the above for downloading via GitLab and in Gitlab 8.6 to use in future build steps
  artifacts:
    paths:
    - helloworld

Ahora sólo queda ir a la sección build del proyecto y ejecutar un build, la siguiente figura muestra la ejecución del build como tal:

Como se ve en la figura la construción se dió sin problemas.

En siguientes artículos se mostrará el uso con node.js con Django.

¡Haz tu donativo! Si te gustó el artículo puedes realizar un donativo con Bitcoin (BTC) usando la billetera digital de tu preferencia a la siguiente dirección: 17MtNybhdkA9GV3UNS6BTwPcuhjXoPrSzV

O Escaneando el código QR desde la billetera:

17MtNybhdkA9GV3UNS6BTwPcuhjXoPrSzV