Cómo instalar y configurar GoCD en Ubuntu 22.04

GoCD es un sistema de entrega continua y automatización de código abierto. GoCD destaca en el modelado de flujos de trabajo complejos de CD para una retroalimentación rápida con sus construcciones de modelado, ejecución paralela y gestión de dependencias. GoCD te ayuda a solucionar los problemas de un proceso roto, haciendo un seguimiento en tiempo real de cada cambio, desde la confirmación hasta el despliegue. GoCD te permite comparar fácilmente dos compilaciones y desplegar cualquier versión de la aplicación que desees. El ecosistema GoCD consiste en un servidor GoCD y un agente GoCD. GoCD lo controla todo, como la ejecución de la interfaz de usuario basada en web y la gestión y suministro de trabajos al agente. Los agentes Go se encargan de ejecutar los trabajos y los despliegues.

Este tutorial te enseñará a instalar y configurar GoCD en un servidor Ubuntu 22.04.

Requisitos previos

  1. Un servidor que ejecute Ubuntu 22.04 con un mínimo de 2 GB de RAM.
  2. Un usuario no usuario con privilegios de root.
  3. El Cortafuegos sin complicaciones(UFW) está activado y en ejecución.
  4. Nombres de dominio completos (FQDN) que apunten a tu servidor. Utilizaremos gocd.example.com para nuestro tutorial.
  5. Asegúrate de que todo está actualizado.
    $ sudo apt update && sudo apt upgrade
    

Paso 1 – Configurar el cortafuegos

Antes de instalar ningún paquete, el primer paso es configurar el cortafuegos para que abra puertos para HTTP, HTTPS y Synapse.

Comprueba el estado del cortafuegos.

$ sudo ufw status

Deberías ver algo como lo siguiente

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Abre los puertos HTTP, HTTPS y GoCD en el cortafuegos.

$ sudo ufw allow 8153
$ sudo ufw allow http
$ sudo ufw allow https

Vuelve a comprobar el estado para confirmarlo.

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
8153                       ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
8153 (v6)                  ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

Paso 2 – Instala GoCD

Importa la clave GPG de GoCD al sistema.

$ curl https://download.gocd.org/GOCD-GPG-KEY.asc | gpg --dearmor | sudo tee /usr/share/keyrings/gocd.gpg > /dev/null 2>&1

Añade el repositorio GoCD al sistema.

$ echo "deb [signed-by=/usr/share/keyrings/gocd.gpg] https://download.gocd.org /" | sudo tee /etc/apt/sources.list.d/gocd.list

Actualiza la lista de repositorios del sistema.

$ sudo apt update

Instala GoCD. Esto también instalará la última versión compatible de Java Runtime(JRE) necesaria para ejecutar GoCD.

$ sudo apt install -y go-server

Antes de pasar al siguiente paso, tenemos que crear un directorio para almacenar los artefactos. Los artefactos pueden almacenarse en el mismo disco en el que está instalado el servidor o en un disco dedicado o unidad de almacenamiento en bloque. Nosotros los almacenaremos en el mismo disco para este tutorial.

Crea un directorio para almacenar los artefactos.

$ sudo mkdir /opt/artifacts

Dale a GoCD la propiedad del directorio de artefactos.

$ sudo chown -R go:go /opt/artifacts

Paso 3 – Instalar y configurar PostgreSQL

GoCD incluye por defecto la base de datos H2, que no requiere configuración. Si utilizas GoCD en un entorno de producción, se recomienda PostgreSQL.

Ubuntu 22.04 incluye una versión antigua de PostgreSQL. Instalaremos Postgres 15 para nuestro tutorial.

Instala el repositorio para PostgreSQL.

$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

Importa la clave GPG de PostgreSQL.

$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/apt.postgresql.org.gpg >/dev/null

Actualiza la lista de repositorios del sistema.

$ sudo apt update

Instala el servidor PostgreSQL 15.

$ sudo apt install -y postgresql postgresql-contrib

Comprueba el estado del servicio.

$ sudo systemctl status postgresql
? postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
     Active: active (exited) since Mon 2022-12-19 06:49:50 UTC; 2h 26min ago
   Main PID: 3536 (code=exited, status=0/SUCCESS)
        CPU: 1ms

Dec 19 06:49:50 gocd systemd[1]: Starting PostgreSQL RDBMS...
Dec 19 06:49:50 gocd systemd[1]: Finished PostgreSQL RDBMS.

Accede al shell de PostgreSQL.

$ sudo -i -u postgres psql

Crea una nueva base de datos para GoCD.

postgres=# CREATE DATABASE "gocd" ENCODING="UTF8" TEMPLATE="template0";

Crea un nuevo usuario de base de datos con una contraseña segura.

postgres=# CREATE ROLE "gocd_database_user" PASSWORD 'gocd_database_password' NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN;

Concede al usuario los derechos para utilizar la base de datos.

postgres=# GRANT ALL PRIVILEGES ON DATABASE "gocd" TO "gocd_database_user";

Concede al usuario privilegios de superusuario. El usuario de la base de datos sólo necesita privilegios de superusuario la primera vez que se inicia el servidor GoCD. Esto es necesario porque las extensiones pgcrypto y citext deben crearse inicialmente. El privilegio de superusuario puede revocarse después de la primera vez que se inicie el servidor GoCD, ya que dejará de ser necesario.

postgres-=# ALTER ROLE "gocd_database_user" SUPERUSER;

Sal del shell de Postgres.

postgres=# \q

El último paso para configurar PostgreSQL para GoCD es almacenar las credenciales de la base de datos en el directorio de configuración del servidor GoCD.

Crea el archivo db.properties y ábrelo para editarlo.

$ sudo nano /etc/go/db.properties

Pega en él el siguiente código.

db.driver=org.postgresql.Driver
db.url=jdbc:postgresql://localhost:5432/gocd
db.user=gocd_database_user
db.password=gocd_database_password

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Paso 4 – Configurar GoCD

Antes de configurar GoCD, tenemos que iniciar el servidor GoCD.

Inicia el servidor GoCD.

$ sudo systemctl start go-server

Comprueba el estado del servidor.

$ sudo systemctl status go-server
? go-server.service - go-server
     Loaded: loaded (/etc/systemd/system/go-server.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-12-15 08:53:10 UTC; 8s ago
    Process: 8475 ExecStart=/usr/share/go-server/bin/go-server start sysd (code=exited, status=0/SUCCESS)
   Main PID: 8541 (wrapper-linux-x)
      Tasks: 43 (limit: 2237)
     Memory: 566.7M
        CPU: 11.873s
     CGroup: /system.slice/go-server.service
             ??8541 /usr/share/go-server/bin/../wrapper/wrapper-linux-x86-64 /usr/share/go-server/wrapper-config/wrapper.conf wrapper.syslog.ident=go-server wrapper.pidfile=/var/lib/go-server/run/go-server.pi>
             ??8556 /usr/share/go-server/jre/bin/java --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED -Xms512m -Xmx1024m -XX:MaxMetaspaceSize=400m .....

Inicia el panel de control GoCD visitando la URL http://<yourserverIP>:8153/. Para acceder al panel GoCD a través de una conexión segura, visita la URL https://<yourserverIP>:8154. Ignora el error que indica que los certificados no son válidos. Siempre es importante acceder al panel de control a través de una conexión segura.

Aparecerá la siguiente página.

Página de GoCD

Antes de utilizarla, debes configurar GoCD. Dirígete al menú Admin >> Configuración del Servidor de la barra de navegación superior.

Menú de Configuración del Servidor GoCD

Añade la URL del sitio en los campos proporcionados y pulsa el botón Guardar.

URL del servidor GoCD

Haz clic en la opción Gestión de Artefactos del menú de la izquierda e introduce la ubicación del directorio de artefactos creado anteriormente. Selecciona la opción Permitir limpieza automática de artefactos para gestionar el espacio y establece la capacidad según tus necesidades. Pulsa el botón Guardar cuando hayas terminado.

Gestión de GoCD Artifcats

Sin embargo, la opción de autoeliminación no toma una copia de seguridad de tus artefactos antiguos. Para hacer una copia de seguridad manualmente y luego eliminar los artefactos antiguos, desactiva la eliminación automática desmarcando la opción Permitir la limpieza automática de artefactos.

A continuación, tenemos que configurar las opciones de correo electrónico para recibir notificaciones por correo electrónico de GoCD.

Opciones del servidor de correo electrónico GoCD

Haz clic en el botón Enviar correo electrónico de prueba para comprobar la configuración y, a continuación, haz clic en el botón Guardar para terminar.

Si quieres establecer la duración del tiempo de espera del trabajo, puedes hacerlo visitando la sección Configuración del tiempo de espera del trabajo.

Reinicia el servidor GoCD para aplicar los cambios.

$ sudo systemctl restart go-server

Paso 5 – Configurar la autenticación de GoCD

Por defecto, cualquiera puede acceder a GoCD, pero puedes configurar la autenticación mediante un archivo de contraseñas o LDAP. En este tutorial, configuraremos la autenticación mediante contraseña.

Instala las herramientas de Apache para que podamos crear un archivo de contraseñas encriptado utilizando el comando htpasswd.

$ sudo apt install apache2-utils

Crea un archivo de contraseñas utilizando la autenticación Bcrypt. La bandera -c crea un nuevo archivo, la bandera -B establece la autenticación Bcrypt y goadmin es el nombre de usuario.

$ sudo htpasswd -B -c /etc/go/passwd_auth navjot

Introduce la contraseña cuando se te solicite.

New password:
Re-type new password:
Adding password for user navjot

Puedes añadir varios usuarios utilizando el mismo comando, pero elimina la bandera -c porque el archivo ya existe. Si vuelves a utilizar la bandera -c, se sobrescribirá el archivo existente y se sustituirá el usuario existente por el nuevo.

$ sudo htpasswd -B /etc/go/passwd_auth gouser1

El siguiente paso en la autenticación es configurar la ubicación de la contraseña en el backend GoCD. Visita la sección Admin >> Seguridad >> Configuración de Autorizaciones de la barra de navegación superior.

Haz clic en el botón Añadir y proporciona cualquier ID. Selecciona Plugin de autenticación de archivos de contraseña para GoCD como ID del plugin en el menú desplegable e introduce la ruta del archivo de contraseña. A continuación, haz clic en el botón Comprobar conexión para verificar si GoCD puede acceder al archivo con fines de autenticación.

Configuración de la autorización GoCD

Para el primer usuario, mantén desmarcada la opción Permitir el acceso sólo a usuarios conocidos. Haz clic en el botón Guardar para terminar.

Enseguida se te pedirá que actualices GoCD y accederás a la página de inicio de sesión.

Página de inicio de sesión de GoCD

Introduce las credenciales creadas anteriormente y pulsa el botón Iniciar sesión para continuar. Visita la sección Admin >> Seguridad >> Gestión de Usuarios de la barra de navegación superior.

Gestión de usuarios de GoCD

Marca la casilla ADMINISTRADOR DEL SISTEMA para marcar al usuario como administrador. Ahora, vuelve a la sección Admin >> Seguridad >> Configuración de Autorizaciones y pulsa el botón Editar situado en el listado del archivo de contraseñas.

Opción de edición del archivo de contraseña GoCD

Marca la opción Permitir el acceso sólo a usuarios conocidos. A partir de ahora, tendrás que crear un nuevo usuario a través del archivo htpasswd y luego importarlo primero desde la página del servidor.

Vamos a crear un segundo usuario.

$ sudo htpasswd -B /etc/go/passwd_auth gouser1
New password:
Re-type new password:
Adding password for user gouser1

Visita la sección Admin >> Seguridad >> Gestión de Usuarios del menú de navegación superior y haz clic en el botón Importar Usuario. Introduce el nombre de usuario gouser1 para buscar al usuario.

Usuario de importación de GoCD

Selecciona el usuario y pulsa el botón Importar para añadirlo.

Lista de usuarios de GoCD

Ahora, también puedes iniciar sesión con el segundo usuario. Repite el proceso para más usuarios.

Paso 6 – Instalar Nginx

Ubuntu 22.04 viene con una versión antigua de Nginx. Para instalar la última versión, necesitas descargar el repositorio oficial de Nginx.

Importa la clave de firma de Nginx.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Añade el repositorio de la versión estable de Nginx.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list

Actualiza los repositorios del sistema.

$ sudo apt update

Instala Nginx.

$ sudo apt install nginx

Verifica la instalación.

$ nginx -v
nginx version: nginx/1.22.1

Iniciar el servidor Nginx.

$ sudo systemctl start nginx

Paso 7 – Instalar SSL

Necesitamos instalar Certbot para generar el certificado SSL. Puedes instalar Certbot utilizando el repositorio de Ubuntu o descargar la última versión utilizando la herramienta Snapd. Nosotros utilizaremos la versión Snapd.

Ubuntu 22.04 viene con Snapd instalado por defecto. Ejecuta los siguientes comandos para asegurarte de que tu versión de Snapd está actualizada.

$ sudo snap install core
$ sudo snap refresh core

Instala Certbot.

$ sudo snap install --classic certbot

Utiliza el siguiente comando para asegurarte de que se puede ejecutar el comando Certbot creando un enlace simbólico al directorio /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Ejecuta el siguiente comando para generar un certificado SSL.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d gocd.example.com

El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/gocd.example.com de tu servidor.

Genera un certificado de grupo Diffie-Hellman.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Realiza una ejecución en seco del proceso para comprobar si la renovación SSL funciona correctamente.

$ sudo certbot renew --dry-run

Si no ves ningún error, ya está todo listo. Tu certificado se renovará automáticamente.

Paso 8 – Configurar Nginx

Abre el archivo /etc/nginx/nginx.conf para editarlo.

$ sudo nano /etc/nginx/nginx.conf

Añade la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Crea y abre el archivo /etc/nginx/conf.d/gocd.conf para editarlo.

$ sudo nano /etc/nginx/conf.d/gocd.conf

Pega en él el siguiente código.

server {
  # Redirect any http requests to https
  listen         80;
  listen         [::]:80;
  server_name    gocd.example.com;
  return 301     https://$host$request_uri;
}

map $http_upgrade $connection_upgrade {
  default upgrade;
  '' close;
}

server {
  listen                    443 ssl http2;
  listen                    [::]:443 ssl http2;
  server_name               gocd.example.com;

  access_log                /var/log/nginx/gocd.access.log;
  error_log                 /var/log/nginx/gocd.error.log;

  # TLS configuration
  ssl_certificate           /etc/letsencrypt/live/gocd.example.com/fullchain.pem;
  ssl_certificate_key       /etc/letsencrypt/live/gocd.example.com/privkey.pem;
  ssl_trusted_certificate   /etc/letsencrypt/live/gocd.example.com/chain.pem;
  ssl_protocols             TLSv1.2 TLSv1.3;

  ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
  ssl_prefer_server_ciphers on;
  ssl_session_cache         shared:SSL:50m;
  ssl_session_timeout       1d;

  # OCSP Stapling ---
  # fetch OCSP records from URL in ssl_certificate and cache them
  ssl_stapling on;
  ssl_stapling_verify on;
  ssl_dhparam /etc/ssl/certs/dhparam.pem;

  # Proxy everything over to the GoCD server
  location / {
    proxy_set_header        Host            $host;
    proxy_set_header        X-Real-IP       $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        X-Forwarded-Proto $scheme;
    proxy_http_version      1.1;
    proxy_set_header        Upgrade $http_upgrade;
    proxy_set_header        Connection $connection_upgrade;
    proxy_pass              http://localhost:8153/;

    # To be able to upload artifacts larger than default size of 1mb, ensure that you set this up to a large value.
    # setting to `0` will disable checking for body size.
    # See https://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size
    client_max_body_size  10000m;

    # If you are intending to allow downloading of large artifacts (> 1GB) from GoCD you may need to adjust one of the
    # following two proxy buffering settings to prevent downloads failing for slow clients due to server idle timeouts.
    #
    # See https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_buffering
    #
    # 1) disable the buffering of responses entirely (enabled by default on NGINX) OR
    # proxy_buffering off;
    #
    # 2) increase the max temporary file size (setting to `0` will disable the limit)
    # proxy_max_temp_file_size 2048m;
  }
}

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite una vez hayas terminado.

Comprueba la sintaxis del archivo de configuración de Nginx.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Reinicia el servicio Nginx.

$ sudo systemctl restart nginx

Ya puedes acceder al Panel de Control GoCD a través de la URL https://gocd.example.com.

Paso 9 – Instalar el Agente GoCD

Los Agentes GoCD son los trabajadores responsables de la ejecución de todas las tareas. Cuando se detecta un cambio en el origen, se activa la canalización y se asignan las tareas a los trabajadores disponibles para su ejecución. A continuación, el agente ejecuta la tarea e informa del estado final tras la ejecución.

Para ejecutar la canalización, debe configurarse al menos un agente. Instalemos el agente GoCD en el servidor GoCD.

Ya hemos importado el repositorio GoCD, por tanto, instala directamente el agente GoCD.

$ sudo apt install go-agent

Inicia el servicio del agente GoCD.

$ sudo systemctl start go-agent

Visita la pestaña Agentes de tu panel de control GoCD y deberías ver el agente en la lista y habilitado automáticamente.

Lista de agentes de GoCD

Desde aquí puedes empezar a utilizar el servicio de CI/CD de GoCD.

Conclusión

Con esto concluye nuestro tutorial, en el que has aprendido a instalar y configurar GoCD en un servidor Ubuntu 22.04. Si tienes alguna pregunta, publícala en los comentarios a continuación.

También te podría gustar...