docs: update readme
This commit is contained in:
@@ -19,7 +19,7 @@ Jenkins centralizado para el despliegue de software en terminales SCO (Self-Chec
|
|||||||
|
|
||||||
## Arquitectura
|
## Arquitectura
|
||||||
|
|
||||||
- **Jenkins master**: corre en Docker en el servidor Minio (`186.67.82.140`).
|
- **Jenkins master**: corre en Docker en un servidor (`172.19.13.204`).
|
||||||
- **Agentes (SCOs)**: cada terminal SCO conecta al master vía JNLP (puerto 50000). El proceso del agente corre como `root`.
|
- **Agentes (SCOs)**: cada terminal SCO conecta al master vía JNLP (puerto 50000). El proceso del agente corre como `root`.
|
||||||
- **Storage**: Minio almacena el software de cada cliente en buckets separados (ej: bucket `ralph`).
|
- **Storage**: Minio almacena el software de cada cliente en buckets separados (ej: bucket `ralph`).
|
||||||
|
|
||||||
@@ -39,7 +39,7 @@ Formato: `sco <cliente> <tienda>`
|
|||||||
docker compose up -d --build
|
docker compose up -d --build
|
||||||
```
|
```
|
||||||
|
|
||||||
Jenkins queda disponible en `http://<server-ip>:8080` (admin / H0l4mund0!).
|
Jenkins queda disponible en `http://<server-ip>:8080` (admin / admin123).
|
||||||
|
|
||||||
## Conectar un agente SCO
|
## Conectar un agente SCO
|
||||||
|
|
||||||
@@ -100,126 +100,10 @@ Recibe el nombre del cliente como argumento (`$1`):
|
|||||||
9. Inicializa carpetas y archivos de base de datos del cpi-server.
|
9. Inicializa carpetas y archivos de base de datos del cpi-server.
|
||||||
10. Genera `engine.properties` para SymmetricDS (solo en primera instalación).
|
10. Genera `engine.properties` para SymmetricDS (solo en primera instalación).
|
||||||
|
|
||||||
## Operaciones de mantenimiento
|
## Agregar un nuevo cliente
|
||||||
|
|
||||||
### Agregar un nuevo cliente
|
1. Agregar los nodos del cliente en `data/jenkins/jenkins.yaml` con el label `sco <cliente> <tienda>`.
|
||||||
|
2. Crear `data/jenkins/pipelines/Jenkinsfile.<cliente>` con el dropdown de tiendas.
|
||||||
El deploy es idéntico para todos los clientes: el `install.sh` recibe el nombre del cliente como `$1`.
|
3. Agregar el job en la sección `jobs` de `jenkins.yaml`.
|
||||||
Solo cambia el nombre del job, el Jenkinsfile, y los nodos registrados.
|
4. Montar el nuevo Jenkinsfile en `docker-compose.yml`.
|
||||||
|
5. Recrear el contenedor: `docker compose up -d --build`.
|
||||||
**1. Registrar los nodos en `data/jenkins/jenkins.yaml`**
|
|
||||||
|
|
||||||
Bajo la clave `nodes`, añadir un bloque por cada SCO del cliente:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
- permanent:
|
|
||||||
name: "nuevocliente-tienda1-sco01"
|
|
||||||
labelString: "sco nuevocliente tienda1"
|
|
||||||
remoteFS: "/opt/jenkins-agent"
|
|
||||||
numExecutors: 1
|
|
||||||
retentionStrategy: "always"
|
|
||||||
launcher:
|
|
||||||
inbound: {}
|
|
||||||
```
|
|
||||||
|
|
||||||
Repetir para cada combinación tienda/SCO. Convención de nombres:
|
|
||||||
- Nombre del nodo: `<cliente>-<tienda>-<sco>` (ej: `ralph-yabucoa-sco02`)
|
|
||||||
- Label: `sco <cliente> <tienda>` (ej: `sco ralph yabucoa`)
|
|
||||||
|
|
||||||
**2. Crear el Jenkinsfile en `data/jenkins/pipelines/Jenkinsfile.<cliente>`**
|
|
||||||
|
|
||||||
Copiar `Jenkinsfile.ralph` y ajustar dos cosas:
|
|
||||||
|
|
||||||
```groovy
|
|
||||||
// En parameters: listar las tiendas del nuevo cliente
|
|
||||||
choices: ['tienda1', 'tienda2', 'tienda3'],
|
|
||||||
|
|
||||||
// En el stage Deploy: cambiar el nombre del cliente (dos lugares)
|
|
||||||
def labelExpr = "nuevocliente && ${params.TIENDA}"
|
|
||||||
sh "bash install.sh 'nuevocliente'"
|
|
||||||
```
|
|
||||||
|
|
||||||
**3. Agregar el job en `data/jenkins/jenkins.yaml`**
|
|
||||||
|
|
||||||
Al final de la sección `jobs`:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
- script: |
|
|
||||||
pipelineJob('deploy-nuevocliente') {
|
|
||||||
description('Deploy de install.sh a los SCOs de NuevoCliente.')
|
|
||||||
definition {
|
|
||||||
cps {
|
|
||||||
script(new File('/opt/jenkins/Jenkinsfile.nuevocliente').text)
|
|
||||||
sandbox(true)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
**4. Montar el Jenkinsfile en `docker-compose.yml`**
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
volumes:
|
|
||||||
- ./data/jenkins/pipelines/Jenkinsfile.nuevocliente:/opt/jenkins/Jenkinsfile.nuevocliente:ro
|
|
||||||
```
|
|
||||||
|
|
||||||
**5. Recrear el contenedor**
|
|
||||||
|
|
||||||
```sh
|
|
||||||
docker compose up -d --build
|
|
||||||
```
|
|
||||||
|
|
||||||
En el servidor remoto:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
# Copiar los archivos modificados al servidor primero, luego:
|
|
||||||
docker compose up -d --build
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Agregar una tienda a un cliente existente
|
|
||||||
|
|
||||||
**1. Añadir los nodos de la nueva tienda en `jenkins.yaml`** (un bloque por SCO, igual que arriba).
|
|
||||||
|
|
||||||
**2. Agregar la tienda al dropdown del Jenkinsfile del cliente:**
|
|
||||||
|
|
||||||
```groovy
|
|
||||||
choices: ['yabucoa', 'san-lorenzo', 'rio-grande', 'nueva-tienda'],
|
|
||||||
```
|
|
||||||
|
|
||||||
**3. Aplicar en el servidor:**
|
|
||||||
|
|
||||||
```sh
|
|
||||||
docker compose restart jenkins
|
|
||||||
```
|
|
||||||
|
|
||||||
No hace falta rebuild completo si solo cambia `jenkins.yaml` o el Jenkinsfile — el contenedor los monta como volúmenes y JCasC los recarga.
|
|
||||||
|
|
||||||
> Si agregaste nodos nuevos pero no reiniciaste Jenkins, también podés recargar desde la UI: *Manage Jenkins → Configuration as Code → Reload existing configuration*.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### Agregar un SCO a una tienda existente
|
|
||||||
|
|
||||||
Solo tocar `jenkins.yaml`: añadir el nodo nuevo bajo `nodes`.
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
- permanent:
|
|
||||||
name: "ralph-yabucoa-sco08"
|
|
||||||
labelString: "sco ralph yabucoa"
|
|
||||||
remoteFS: "/opt/jenkins-agent"
|
|
||||||
numExecutors: 1
|
|
||||||
retentionStrategy: "always"
|
|
||||||
launcher:
|
|
||||||
inbound: {}
|
|
||||||
```
|
|
||||||
|
|
||||||
Luego recargar la configuración:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
docker compose restart jenkins
|
|
||||||
# o desde la UI: Manage Jenkins → Configuration as Code → Reload existing configuration
|
|
||||||
```
|
|
||||||
|
|
||||||
Una vez que Jenkins lo reconoce, conectar el agente en el SCO físico (ver sección "Conectar un agente SCO").
|
|
||||||
|
|||||||
Reference in New Issue
Block a user