Licenciar software que se ejecuta en agentes de CI y de compilación efímeros sin agotar plazas
El licenciamiento atado por nodo asume máquinas estables. Los runners de CI y los agentes autoescalados nacen y se destruyen constantemente, así que cada ejecución parece una máquina nueva y consume una plaza. Así se licencia cómputo efímero sin agotar tu recuento de plazas.
Los modelos de licenciamiento se diseñaron en su mayoría para máquinas que se quedan quietas — un escritorio, un servidor, una estación de trabajo. Los agentes de CI y de compilación en la nube violan esa suposición a propósito: existen durante un trabajo y luego desaparecen, y el siguiente trabajo recibe una VM o contenedor completamente nuevos. Apunta una licencia atada por nodo a ese entorno y hace exactamente lo contrario de lo deseado — cada compilación parece una máquina nueva, activa, consume una plaza, y luego la máquina se destruye sin liberarla jamás. Una licencia de diez plazas puede agotarse antes del almuerzo. La solución no es un recuento de plazas mayor; es licenciar la dimensión que de verdad varía.
Por qué lo efímero rompe el atado por nodo
El atado por nodo deriva una huella del hardware de una máquina y vincula la licencia a ella, así que una plaza representa un dispositivo distinto. Eso es exactamente correcto para escritorios y exactamente erróneo para el cómputo efímero, donde «dispositivo distinto» es una unidad sin sentido — hay uno nuevo cada pocos minutos, ninguno dura, y lo que realmente quieres limitar no es cuántas máquinas sino cuánto uso concurrente (o total).
Peor aún, la suposición de limpieza también falla. Las plazas atadas por nodo normalmente se liberan con una desactivación explícita cuando un usuario cambia de máquina. Un runner de CI no se desactiva; se elimina. Así que su plaza persiste hasta que algo la recupera, y en una tubería ajetreada las plazas se consumen mucho más rápido de lo que cualquier proceso manual las libera.
Tres modelos que encajan con el cómputo efímero
Elige según lo que de verdad quieras limitar.
Flotante / concurrencia. Licencia el número de usos simultáneos, no de máquinas. Un pool de N leases concurrentes significa que a lo sumo N compilaciones se ejecutan a la vez; la lease de un runner terminado (o destruido) se recupera y la siguiente compilación la toma. Es el encaje natural cuando el paralelismo es lo que vendes — véase licencias flotantes concurrentes. Combínalo con reaping de leases por heartbeat para que un runner que desaparece sin desactivarse tenga su lease liberada tras un breve tiempo de espera en lugar de persistir.
Derecho con alcance de compilación. Si solo necesitas habilitar la función en CI (demostrar que el cliente está licenciado, sin contar máquinas), valida un derecho (entitlement) firmado con un token que no consuma plaza en absoluto. La compilación comprueba el derecho sin conexión y se ejecuta; nada queda atado por nodo.
Compilaciones medidas. Si la unidad justa son las ejecuciones totales, mídelas — cuenta las compilaciones como uso contra una cuota, con una clave de idempotencia para que una compilación reintentada no cuente doble.
Detectar CI y tomar el camino correcto
El punto de giro de la implementación es que tu software sepa que está en CI para que tome el camino efímero en lugar del de escritorio:
static bool IsCi() =>
Environment.GetEnvironmentVariable("CI") is "true" or "1"
|| Environment.GetEnvironmentVariable("GITHUB_ACTIONS") == "true"
|| Environment.GetEnvironmentVariable("GITLAB_CI") == "true"
|| Environment.GetEnvironmentVariable("TF_BUILD") == "true" // Azure Pipelines
|| Environment.GetEnvironmentVariable("JENKINS_URL") is not null;
// In CI, validate against a concurrency/entitlement path — not a node-locked activation.
var result = IsCi()
? keyright.ValidateFloating() // or a build-scoped entitlement check
: keyright.Activate(); // normal desktop node-lock
La experiencia de escritorio no cambia; el camino de CI simplemente valida la dimensión que tiene sentido ahí y nunca escribe una activación por máquina que dejaría varada una plaza.
Cómo hacerlo con Keyright
Keyright admite los tres modelos — concurrencia flotante con reaping por heartbeat, derechos con alcance de compilación validados sin consumir plaza, y recuento de compilaciones medido — para que puedas licenciar CI efímero y agentes autoescalados por concurrencia o uso en lugar de por máquina, y nunca veas una tubería agotar tus plazas. Cada camino valida sin conexión contra una carga firmada, así que un runner con egreso restringido igual funciona. Keyright es autoalojado, así que tus derechos y datos de uso quedan en infraestructura que tú controlas.
Consulta los planes, o empieza desde licencias flotantes concurrentes y añade detección de CI para enrutar los runners hacia ellas.
Prueba Nebula.NET
Endurece tu código .NET en minutos — empieza con la edición gratuita.