TeamCity es un servidor de integración y entrega continuas (CI/CD). Ofrece una solución empresarial robusta y altamente configurable para automatizar la compilación, prueba y despliegue de aplicaciones. Su arquitectura de servidor-agente permite distribuir la carga de trabajo y escalar fácilmente, siendo compatible con múltiples plataformas y lenguajes de programación.
TeamCity facilita la transformación digital y la cultura DevOps mediante:
- Pipelines como código: Definición de pipelines mediante ficheros Kotlin DSL versionados en el repositorio (.teamcity/settings.kts), garantizando trazabilidad y control de versiones.
- Automatización completa: Integración con sistemas de control de versiones (Git, SVN, Mercurial) para disparar builds automáticamente ante cambios en el código.
- Múltiples etapas: Soporte para pipelines complejos con dependencias entre etapas, permitiendo flujos de compilación, prueba y despliegue secuenciales.
- Gestión de credenciales: Sistema seguro de variables de entorno y secretos para proteger credenciales durante el despliegue de infraestructura.
- Integración con herramientas de IaC: Compatible con Terraform, Ansible, CloudFormation y otras herramientas para automatizar la gestión de infraestructura.
- Visibilidad y trazabilidad: Panel de control centralizado que muestra el estado de todos los builds, logs detallados y artefactos generados.
- Informes y métricas: Estadísticas sobre éxito/fallos de builds, cobertura de código y tendencias de calidad para mejorar continuamente.
El despliegue de TeamCity en este proyecto utiliza Docker Compose con un servidor central y agentes auto-hospedados. El servidor TeamCity gestiona la orquestación mientras que los agentes ejecutan las tareas definidas en los pipelines.
- Docker y Docker Compose instalados en tu sistema.
- Puerto 8111 disponible en tu máquina local (puerto por defecto de TeamCity).
El fichero de definición se encuentra en docker-compose.yml.
-
Navega a la carpeta del proyecto:
cd path/to/vsfinal -
Ejecutar el despliegue:
docker-compose up -d
-
Espera a que el servidor TeamCity se inicialice completamente (puede tardar 1-2 minutos).
- Interfaz web: http://localhost:8111
- Primera configuración: Al acceder por primera vez, se abrirá el asistente de instalación inicial.
- Licencia: TeamCity incluye una licencia de demostración para desarrollo local.
Para configurar la autenticación con claves SSH, sigue estos pasos:
-
Generar un par de claves SSH en tu máquina local:
ssh-keygen -t rsa -b 4096
-
Configurar la clave pública en GitHub:
- Copia el contenido de la clave pública (generalmente en
~/.ssh/id_rsa.pub) - Ve a tu repositorio en GitHub: Settings → Deploy keys → Add deploy key
- Pega la clave pública y guárdala
- Copia el contenido de la clave pública (generalmente en
-
Configurar la clave privada en TeamCity:
- La clave privada se guardará para usarla cuando inicie el servidor
- Al arrancar el servidor por primera vez, deberás proporcionar la clave privada.
-
Primera autorización del agente:
- La primera vez que se arranca el servidor, TeamCity solicitará autorizar el agente
- Aprueba la solicitud para que el agente pueda conectarse y ejecutar los builds
Se incluye un ejemplo de definición de pipeline en el fichero .teamcity/settings.kts. Este fichero Kotlin DSL define un pipeline con 3 etapas:
- Compile Project: Simula la compilación del código.
- Run Unit Tests: Ejecuta las pruebas unitarias.
- Deploy to Staging: Simula el despliegue a un entorno de pruebas.
-
Desplegar TeamCity siguiendo las instrucciones anteriores.
-
Acceder a la interfaz web:
http://localhost:8111 -
Configurar la conexión al repositorio:
- En el menú principal, ir a Administration → Version Control → VCS Roots.
- Crear una nueva raíz VCS y configurar la URL de tu repositorio Git.
-
Crear un proyecto:
- Ir a Administration → Projects.
- Seleccionar Create Project.
- Asociar el proyecto al VCS Root configurado anteriormente.
-
Importar la configuración del pipeline:
- TeamCity detectará automáticamente la carpeta
.teamcity/settings.ktsy sincronizará la configuración del proyecto desde el repositorio. - Si no se importa automáticamente, ir a Project Settings → Version Control Settings y vincular el repositorio.
- TeamCity detectará automáticamente la carpeta
-
Ejecutar el pipeline:
- Ir a la página principal del proyecto y seleccionar la configuración de build "CI/CD Pipeline VS".
- Hacer clic en Run para ejecutar manualmente, o esperar a que se dispare automáticamente al hacer un push al repositorio.
- Cuando se dispare por primera vez un trigger tendrás que ir a TeamCity para autorizar que esos triggers vienen de parte del usuario.
-
Monitorizar la ejecución:
- Observar el progreso de cada etapa en la interfaz web.
- Revisar los logs detallados de cada paso en el panel de detalles del build.
Para modificar el pipeline, edita el fichero .teamcity/settings.kts:
import jetbrains.buildServer.configs.kotlin.v2019_2.*
import jetbrains.buildServer.configs.kotlin.v2019_2.Project
import jetbrains.buildServer.configs.kotlin.v2019_2.buildSteps.script
import jetbrains.buildServer.configs.kotlin.v2019_2.triggers.vcs
/* Archivo de configuración para el proyecto Vsfinal */
project {
description = "Proyecto final de VS"
buildType(BuildAndTest)
}
object BuildAndTest : BuildType({
name = "CI/CD Pipeline VS"
vcs {
root(DslContext.settingsRoot)
}
triggers {
vcs{ }
}
steps {
script {
name = "Compile Project"
scriptContent = "echo 'Compilando el proyecto...'"
}
script {
name = "Run Unit Tests"
scriptContent = "echo 'Ejecutando tests unitarios...'"
}
script {
name = "Deploy to Staging"
scriptContent = "echo 'Desplegando en el entorno de pruebas...'"
}
}
})Para detener los servicios:
docker-compose downPara detener y eliminar volúmenes (incluyendo datos persistentes):
docker-compose down -v