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
- Un servidor que ejecute Ubuntu 22.04 con un mínimo de 2 GB de RAM.
- Un usuario no usuario con privilegios de root.
- El Cortafuegos sin complicaciones(UFW) está activado y en ejecución.
- Nombres de dominio completos (FQDN) que apunten a tu servidor. Utilizaremos
gocd.example.com
para nuestro tutorial. - 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.
Antes de utilizarla, debes configurar GoCD. Dirígete al menú Admin >> Configuración del Servidor de la barra de navegación superior.
Añade la URL del sitio en los campos proporcionados y pulsa el botón Guardar.
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.
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.
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.
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.
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.
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.
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.
Selecciona el usuario y pulsa el botón Importar para añadirlo.
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.
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.