# Del Caos al Control: transforma tus Actualizaciones con Updatecli

> Automatiza tus upgrades como un verdadero equipo.  
> 📈 Aumenta la frecuencia de actualizaciones, reduce errores humanos y elimina la deuda técnica silenciosa.

---

## 😫 El punto de quiebre

**Imaginá esto:**  
Un equipo DevOps tratando de mantener actualizado todo el ecosistema. Imágenes Docker, versiones de Helm charts, manifiestos YAML, archivos de configuración… cada uno con su propio ritmo, su propio repositorio y su propia urgencia.

Lo que en teoría eran simples actualizaciones, en la práctica se convertían en:

* Calendarios saturados con tareas repetitivas
    
* Coordinación interminable por Slack
    
* Revisiones manuales con riesgo de error
    
* Dificultades para escalar nuevas integraciones
    

Y lo peor: el trabajo no era visible para todos, lo que generaba fricción entre equipos de desarrollo, operaciones y plataforma.

## 🔍 La búsqueda de una solución

Necesitábamos algo que:

* Detecte automáticamente cambios de versión
    
* Aplique esas actualizaciones en múltiples repos
    
* Cree pull requests automáticos y trazables
    
* Se integre con nuestros flujos CI/CD
    
* Fuera transparente para todo el equipo
    

Ahí apareció: [**<mark>Updatecli</mark>**](https://github.com/updatecli/updatecli).

## 🚀 ¿Qué es Updatecli?

Updatecli es una herramienta de automatización de cambios declarativos.  
Permite definir, con archivos YAML, reglas para buscar nuevas versiones y aplicar esos cambios donde sea necesario: en Dockerfiles, Helm, YAMLs, Markdown, CI/CD, etc.

### 🔁 ¿Qué hace por nosotros?

* **Detecta cambios**: Nuevas versiones de imágenes, tags, artefactos
    
* **Actualiza automáticamente** archivos claves en nuestros repos
    
* **Abre pull requests** con los cambios y el contexto necesario
    
* **Se ejecuta como job CI/CD** o vía cron en runners compartidos
    

## 🛠️ Cómo lo usamos

Creamos pipelines Updatecli en nuestros repos para:

* Mantener sincronizadas las versiones de imágenes Docker en los Helm charts
    
* Actualizar configuraciones compartidas en múltiples servicios
    
* Detectar y proponer PRs cuando hay nuevas versiones en nuestras herramientas base
    
* Facilitar upgrades en cascada, sin intervención manual
    

### Un ejemplo simplificado:

```plaintext
sources:
  dockerTag:
    kind: docker
    image: ghcr.io/myorg/my-service
    tagfilter: '^v'

targets:
  valuesYaml:
    kind: yaml
    file: charts/my-service/values.yaml
    key: image.tag
    sourceid: dockerTag
```

Este ejemplo detecta la última imagen publicada y actualiza el `values.yaml`. El PR lo crea Updatecli solito. 🎯

## 📈 Impacto real

Desde que integramos Updatecli:

| Resultado | Antes | Ahora |
| --- | --- | --- |
| Tiempo de actualización por repo | ~2 días | ~15 minutos |
| Tareas manuales por semana | +30 | &lt;5 |
| Coordinación por Slack | Constante | Casi nula |
| PRs automáticos por semana | 0 | +20 |
| Errores por inconsistencias | Frecuentes | Muy raros |

## 🔄 Transformación cultural

Lo más poderoso no fue solo la herramienta, sino lo que **cambió en la cultura**:

* ✔️ De tareas manuales invisibles → a flujos automatizados y visibles
    
* ✔️ De depender de un experto → a empoderar a cualquier desarrollador
    
* ✔️ De retrabajo constante → a flujos reproducibles y documentados
    

> Updatecli **nos ayudó a escalar la operación sin escalar el caos**.

## 💬 Lo que antes eran mensajes en Slack…

> "*Che, ¿actualizaste la versión de esa imagen?*"  
> "*¿Cuál es la versión que deberíamos usar en* `dev`?"  
> "*¿Por qué no subió a* `prod` si ya estaba en `main`?"

Ahora son PRs automáticos con contexto, trazabilidad y revisiones claras.

## 🧠 Lo que aprendimos

📌 Automatizar no es reemplazar personas.  
👉 Es liberar tiempo para tareas que realmente agregan valor.

📌 No hay DevOps sin visibilidad y consistencia.  
👉 Updatecli refuerza ambos pilares.

📌 La escalabilidad de un equipo está atada a su capacidad de automatizar.  
👉 ¡Y ahora estamos listos para escalar!

---

> Porque automatizar no es solo un lujo. Es una necesidad para escalar.

---

## ⚡ Quick Start: Probá Updatecli en minutos

### 🚧 Requisitos

* Instalar [Updatecli desde GitHub](https://github.com/updatecli/updatecli)
    
* [Tener un archivo YAML que quieras](https://github.com/updatecli/updatecli) actualizar (e[j: `data.yaml`)](https://github.com/updatecli/updatecli)
    
* [Defin](https://github.com/updatecli/updatecli)ir un manifiesto `manifest.yaml`
    

---

### 📁 Es[cenario](https://github.com/updatecli/updatecli)

[Vamos a actua](https://github.com/updatecli/updatecli)lizar un archivo [YAML (`data.yaml`) que c](https://github.com/updatecli/updatecli)ontiene la etiqueta de imagen Docker para Jenkins:

```yaml
# data.yaml
container:
  image: jenkinsci/jenkins
  tag: 2.275
```

---

### 🧬 Manifiesto de Updatecli

Este archivo `manifest.yaml` contiene:

* **Source**: cómo obtener la nueva versión de Jenkins
    
* **Condition**: verificar que esa imagen existe en DockerHub
    
* **Target**: actualizar el archivo si es necesario
    

```yaml
name: QuickStart example

sources:
  jenkinsVersion:
    name: Get the latest Jenkins weekly version
    kind: jenkins
    spec:
      release: weekly

conditions:
  dockerimage:
    name: Is Jenkins weekly tag published on DockerHub
    kind: dockerimage
    spec:
      image: jenkins/jenkins

targets:
  dataFile:
    name: Bump Jenkins Docker Image Tag
    kind: yaml
    spec:
      key: container.tag
      file: data.yaml
```

---

### 🏃 Ejecutar Updatecli

Usá estos comandos desde tu terminal:

* Para ver qué cambiaría:
    

```bash
updatecli diff --config manifest.yaml
```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1744676922355/7d78cbd0-9024-4e17-a615-c364866de965.png align="center")

* Para aplicar el cambio:
    

```bash
updatecli apply --config manifest.yaml
```

---

> 🔁 ¡Y listo! En minutos, podés tener tus archivos actualizados sin intervención manual.

## 🚀 Automatizando con GitHub Actions

Repositorio: [roxs-updatecli-actions](https://github.com/roxsross/roxs-updatecli-actions)

Usamos Updatecli en un workflow semanal para mantener actualizado el chart de NGINX Ingress:

```bash
on:
  schedule:
    - cron: '0 7 * * 1'
  workflow_dispatch:
```

#### Update automático del chart:

```bash
sources:
  chartVersion:
    kind: helmchart
    spec:
      url: https://kubernetes.github.io/ingress-nginx
      name: ingress-nginx

targets:
  updateChart:
    kind: file
    spec:
      file: applications/ingress-nginx/deploy.sh
      matchpattern: CHART_VERSION=.*
      replacepattern: CHART_VERSION={{ source "chartVersion" }}

actions:
  createPR:
    kind: github/pullrequest
    title: 'Actualizar NGINX Ingress a versión {{ source "chartVersion" }}'
```

🔁 Cada semana, **Updatecli** verifica **nuevas versiones y genera un PR** automático con el cambio.

---

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1744732352080/358b46ec-f871-4d01-ac0a-d7870acea3c7.png align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1744732403325/9caa1ed1-5f71-4e5d-9fc9-882f9a5f4d8b.png align="center")

## 🔚 Conclusión: Automatizar para liberar, escalar para transformar

Porque en DevOps, escalar no significa trabajar más.  
Significa trabajar mejor.  
Y para eso, la automatización ya no es una opción. Es el camino.

> 🎯 Si querés un equipo más ágil, enfocado y feliz, empezá por liberarles del caos.  
> Y dejá que Updatecli haga la magia detrás de escena.
