Saltar al contenido principal

Herramientas de desarrollo: versiones y upgrades

Versiones de las herramientas self-hosted que usa el área de desarrollo y cuándo se actualizó cada una. Actualizado al 26/10/2026.

Resumen​

HerramientaURLVersión actualÚltimo upgradeDónde corre
Jenkinsjenkins.sils.tech2.580.1 LTS (Java 25)19/10/2026Container en VM sils-dev-no-spot
SonarQubesonar.sils.tech2026.5.3 LTA Developer Edition26/10/2026Container en VM sils-dev-no-spot
Nexusnexus.sils.tech3.97.2 Community Edition (Java 21), base en PostgreSQL26/10/2026Container en VM sils-dev-no-spot
GitLabgitlab.sils.tech19.5.1 EE (sin licencia, funciones Free)22/10/2026VM gitlab-v2 (Omnibus)
GitLab Runner—19.5.022/10/2026VM gitlab-runners
Grafanagrafana.sils.tech13.2.426/10/2026Container en VM sils-monitor
Silstech Docsdocs.sils.techDocusaurus 3.10.126/10/2026 (cambio de proyecto)Firebase Hosting y Cloud Functions

Todo está en el proyecto GCP sils-keeper-infra, zona us-central1-a. Jenkins, SonarQube y Nexus se levantan con Docker Compose desde /sils-dev/dev-infra/docker-compose.yml. Su copia en el repo dev-infra es docker-compose-example.yml.

Jenkins​

FechaVersiónNotas
11/03/20222.319.3 LTS (Java 11)Instalación inicial con Docker Compose.
sin registrar2.354, 2.400 (Java 11)Upgrades intermedios. Solo quedaron como líneas comentadas en el compose.
sin registrar2.513 (Java 21)Cambio a Java 21.
antes del 07/09/20262.569 (Java 21)Desde esta versión los agentes también necesitan Java 21.
19/10/20262.580.1 LTS (Java 25)Vuelta a la línea LTS. El controller pasa a Java 25; los agentes GCE siguen en Java 21.
  • Imagen: jenkins/jenkins:2.580.1-lts-jdk25.
  • La configuración se edita a mano en /var/jenkins_home (no se usa JCasC). Permisos y carpetas: ver Permisos y config files.

SonarQube​

FechaVersiónNotas
11/03/2022lts (8.9 LTS)Instalación inicial, con PostgreSQL en un container.
sin registrar10.7.0, 2025 LTAUpgrades intermedios.
antes del 04/08/20262026.4.0Rompió los scanners viejos que traían Java 17 (ver el post).
13/10/20262026.5.2 LTALa base de datos pasa a Cloud SQL pg-keeper-instance (PostgreSQL 14).
26/10/20262026.5.3 LTApg-keeper-instance sube de PostgreSQL 14 a 17 (Sonar 2026.5 ya no soporta la 14).
26/10/20262026.5.3 LTAParche de seguridad. Se agregó sonar.secretKeyPath para cifrar los secretos guardados en la base.
  • Imagen: sonarqube:2026.5.3-developer. Java 25, incluido en la imagen.
  • La clave de cifrado está en /sils-dev/dev-infra/config/sonar/sonar-secret.txt, con backup en Secret Manager (sonarqube-secret-key, proyecto sils-keeper-infra). Si se pierde, no se pueden descifrar los secretos guardados, como el token de GitLab.
  • Base de datos: Cloud SQL pg-keeper-instance, PostgreSQL 17 desde el 26/10/2026. Antes de cada upgrade: sacar un backup bajo demanda de esa instancia.
  • Para que Sonar comente en los MRs de GitLab, los proyectos tienen que analizarse con @sonar/scan 5 o superior. Los paquetes sonarqube-scanner 2.x y 3.x traen Java 17 y fallan.

Nexus​

FechaVersiónNotas
11/03/20223.25.0Instalación inicial.
07/09/20263.79.1La base H2 se corrompió el 20/08/2026 y se recreó; desde entonces el scheduler de tareas no arranca (ver abajo).
26/10/20263.97.2 Community EditionUpgrade directo. Migró la base H2 (schema v2.15 → v2.174). Desde la 3.97 la telemetría a Sonatype es obligatoria.
26/10/20263.97.2La base pasa de H2 embebida a PostgreSQL (Cloud SQL pg-keeper-instance, base nexus), con el Database Migrator oficial.
  • Imagen: sonatype/nexus3:3.97.2. Los blobs (archivos de los paquetes) siguen en el disco de la VM, en /apps/nexus-data/blobs.
  • Base de datos: Cloud SQL pg-keeper-instance, base y usuario nexus. La password está en /sils-dev/dev-infra/.env (NEXUS_DB_PASSWORD) y en Secret Manager (nexus-db-password). Pool de conexiones limitado a 20 con NEXUS_DATASTORE_NEXUS_ADVANCED=maximumPoolSize=20 (por defecto abre 100).
  • Telemetría: si no está aceptada, Nexus devuelve 403 en todas las descargas de paquetes (los metadatos sí responden). El aceptarla no se migra de H2 a PostgreSQL: después de una migración hay que aceptarla de nuevo en la UI.
  • Vuelta atrás a H2: la base H2 y los restos de OrientDB se archivaron en /apps/nexus-legacy-db-20261026 (fuera de /apps/nexus-data). Para volver, copiar db/nexus.mv.db.migrated-to-postgres-20261026 a /apps/nexus-data/db/nexus.mv.db (dueño uid 200) y sacar las variables NEXUS_DATASTORE_NEXUS_* del compose.
  • Backup previo al upgrade: /apps/nexus-data-backup-3.79.1-20261026-1339.tgz (con Nexus apagado). Sonatype no soporta downgrade; para volver hay que restaurar ese backup y la imagen 3.79.1.
  • Límites de la Community Edition: 40.000 componentes o 100.000 pedidos por día. Hoy usamos muy por debajo (unos cientos de pedidos por día).
  • Scheduler de tareas: estuvo caído desde la corrupción del 20/08/2026 hasta el 26/10/2026 (invalid stream header al leer 8 tareas dañadas en las tablas QRTZ_*). Se arregló borrando esas tareas de la base con Nexus apagado. La tarea compact blob store (blob store default, domingos 06:00 UTC) se recreó a mano.
  • Registry npm privado: https://nexus.sils.tech/repository/npm-internal (paquetes @silstech/*).

GitLab​

FechaVersiónNotas
hasta 22/10/202615.11.5 EEVM gitlab con Ubuntu 18.04 y PostgreSQL 14 en Cloud SQL (pg-keeper-instance). La base vieja se exportó el 26/10/2026 a gs://sils-gitlab-backups/legacy/ antes de subir esa instancia a PostgreSQL 17, así que ya no se puede volver a la VM vieja.
22/10/202619.5.1 EEMigración a una VM nueva (gitlab-v2, Ubuntu 22.04) con upgrades encadenados. La base pasa a Cloud SQL pg-gitlab (PostgreSQL 17). Detalle completo en el post de la migración.
  • Runners: VM gitlab-runners, gitlab-runner 19.5.0 (antes 17.0.0, en la misma VM que GitLab).
  • Backups: diarios a gs://sils-gitlab-backups, más snapshots del disco de la VM.

Grafana​

FechaVersiónNotas
antes del 15/04/202510.2.0Fecha exacta sin registrar. Ya estaba en esta versión en las copias del compose del 15/04/2025.
26/10/202613.2.4Upgrade directo, probado antes sobre una copia de los datos. Grafana 12 eliminó Angular: los paneles viejos (graph, table-old, singlestat) de 4 dashboards se convierten solos a timeseries, table y stat. Se actualizaron los plugins BigQuery 3.4.6, Infinity 4.1.3, Cloud Logging 1.8.1 y JSON 1.4.3.
  • Imagen: grafana/grafana:13.2.4. Base SQLite en el volumen Docker monitoring_grafana_data. Login con GitLab (OAuth).
  • Backups previos al upgrade en /monitoring-backups/ de la VM (base con sqlite3 .backup, resto del volumen y configuración). Para volver a la 10.2.0 hay que restaurar la base de ese backup: la 13 migra el schema.
  • Plugins: se actualizan con grafana cli plugins update-all (BigQuery e Infinity exigen Grafana 12 o superior).
  • Corre en la VM sils-monitor (Debian 11) con Docker Compose, desde /monitoring/docker-compose.yml. El compose y la config están versionados en silsv2/devs/monitoring.
  • Ojo con ese repo: cada push a master dispara un deploy que arma grafana.ini, datasources.yml y prometheus.yml desde variables de CI, los copia a /monitoring y reinicia la VM. El deploy no corre docker compose up, así que no aplica cambios de imagen. Antes de pushear sin [skip ci], verificar que las variables de CI coincidan con los archivos del server.
  • En el mismo compose corren:
    • Prometheus prom/prometheus:v3.1.0.
    • Tempo grafana/tempo:2.7.2 (fijado el 26/10/2026; antes usaba latest).

Silstech Docs​

FechaProyecto GCPNotas
hasta 26/10/2026sils-auth-devCompartía proyecto (y pool de usuarios de Firebase Auth) con el login de des.sils.com.ar.
26/10/2026sils-keeper-infraHosting, Auth y las Functions mcp y gitlab pasan a un proyecto propio de infra. Los usuarios de docs se recrean solos al loguearse.
  • Repo: silsv2/devs/sils-docs. Cada push a master corre firebase deploy (Hosting y Functions) con la SA docs-deployer@sils-keeper-infra.
  • Servidores MCP: https://us-central1-sils-keeper-infra.cloudfunctions.net/mcp (docs) y .../gitlab. El login OAuth usa un OAuth client que sigue en sils-auth-dev; sus redirect URIs son .../mcp/oauth/callback y .../gitlab/oauth/callback.
  • Custom domain docs.sils.tech: registros A 199.36.158.100 y TXT hosting-site=sils-keeper-infra, sin CNAME (un CNAME impide que Firebase lea el TXT de verificación).

Cómo mantener este doc​

Cada vez que se actualice una herramienta:

  1. Agregar una fila en la tabla de historial de esa herramienta, con la fecha y lo que cambió.
  2. Actualizar la tabla de resumen.
  3. Para Jenkins, SonarQube y Nexus, actualizar también la imagen en docker-compose-example.yml del repo dev-infra. Dejar la versión anterior comentada.