Así que has escuchado hablar de CI o CI/CD. De repente lo mencionaron en una reunión rápida. O lo viste en una oferta de trabajo. O simplemente te entró la curiosidad y decidiste investigar. Cualquiera que haya sido el motivo, bien ahí. Estás acá, y esta guía te va a acompañar paso a paso para que armes tu primer pipeline usando GitHub Actions.
Esto no es una guía para automatización a nivel empresarial. Es una intro limpia, concreta y práctica. Vamos a usar un script básico en Python y vamos a configurar un flujo de trabajo que ejecute pruebas cada vez que hagas un cambio.
Vamos a empezar a automatizar esas tareas repetitivas que nadie quiere hacer.
Lo que vas a necesitar
Nada complicado. Solo estas tres cosas.
- Una cuenta de GitHub. Si no tienes una, créala. Es gratis y vas a terminar usándola para muchas cosas más.
- Un script básico en Python. Algo sencillo. Incluso con un
print()
basta para comenzar. Luego le metemos más cosas..
Paso 1: Crea un repositorio en GitHub
Empecemos creando un repositorio de GitHub.
- Entra a tu cuenta de GitHub.
- Haz clic en el botón New repository
- Ponle un nombre como
ci-cd-python-pipeline
- Marca la opción Add a README file
- Haz clic en Create repository
- Listo. Ya tienes un lugar donde vas a montar tu primer pipeline.
Paso 2: Agrega un script en Python
Es hora de darle algo de poder de Python.
- Dentro del nuevo repo:
- Haz clic en Add file y luego en Create new file
- Nómbralo
hello.py
- Pega este código:
def my_function():
return "¡Hola, este es mi primer CI/CD!"
if __name__ == "__main__":
print(my_function())
- Guarda el archivo con un mensaje de commit corto, algo como
add hello.py
Ya está. Tienes algo que probar.

Paso 3: Hora de ponerle acción con GitHub Actions
Vamos a empezar con la automatización.
- Ve a la pestaña Actions

- Ignora las plantillas sugeridas y haz clic en set up a workflow yourself
- Ponle este nombre al archivo:
.github/workflows/python-ci.yml
- Ese nombre y esa ruta tienen que estar tal cual. GitHub busca el flujo exactamente en esa carpeta.
Paso 4: Escribe el flujo de trabajo
Copia y pega esto en el archivo python-ci.yml
:
name: Python CI Pipeline
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.x'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- name: Run Python script
run: |
python hello.py
¿Qué hace este flujo?
Vamos por partes.
name
: así se llama el flujo. Puedes ponerle lo que quieras. Algo creativo comoSuperPythonChecker3000
si te animas.on
: esto le dice a GitHub cuándo debe ejecutarse. En este caso, cuando haces push al branch principal o cuando creas un pull request hacia él.jobs
: define el trabajo que queremos correr. En este caso, uno llamadobuild
.runs-on
: le indica a GitHub que lo corra en un entorno Linux que ellos mismos te prestansteps
: son los pasos que sigue el flujo:
- Primero descarga tu código del repo
- Luego instala Python
- Después instala las dependencias, si es que las hay
- Finalmente corre el script
Paso 5: Haz un cambio y mira qué pasa
Una vez que tengas listo tu archivo del workflow, haz clic en Commit changes para guardarlo. Te va a salir una ventanita pidiendo un mensaje. Escribe algo como Add CI workflow
y confirma.
Ahora viene lo bueno.
Ve a la pestaña Actions en tu repo. Si todo está bien armado, vas a ver un check verde al lado del flujo. Eso significa que todo se ejecutó correctamente y tu script corrió sin problemas.
Si ves una cruz roja, no te asustes. Haz clic y revisa los logs para ver qué falló. Así se aprende.

Paso 6: Haz otro cambio y deja que corra solo
La idea de CI no es correr un script una sola vez y listo. Se trata de que todo se ejecute cada vez que cambias algo.
Así que abre hello.py
y cambia el mensaje. Puedes ponerle algo como Hello, GitHub Actions!
.
Guarda. Haz commit. Sube el cambio.
Y ya está. El workflow se lanza solo. No necesitas hacer nada más. Todo corre de nuevo y te avisa si algo dejó de funcionar.

Paso Extra: ¿Quieres subirle el nivel? Agrega una prueba
Si quieres ir un paso más allá, vamos a agregar una prueba simple. Esto te asegura que tu script sigue haciendo lo que esperas cada vez que lo toques.
Crea un nuevo archivo llamado test_hello.py
y pon este código:
import pytest
from hello import my_function
def test_my_function():
assert my_function() == "Hello, GitHub Actions!"
Actualiza tu archivo .github/workflows/python-ci.yml
:
- Primero, agrega
pip install pytest
en el paso ‘Install dependencies’, para que se vea así:
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install pytest
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- Luego, agrega la prueba después de «Run Python script»:
- name: Run Python script
run: |
python hello.py
- name: Run tests
run: |
pytest
Haz commit y sube los cambios. GitHub Actions ahora correrá tu script y el test cada vez que actualices el código.
Si todo va bien, verás el check verde. Si algo rompe, verás el aviso y podrás corregirlo antes de que se convierta en un problema más grande.
Para cerrar
Y listo. Acabas de armar tu primer pipeline CI con GitHub Actions. Hiciste un cambio. Lo subiste. Se ejecutó el script. Se corrió el test. No tuviste que mover un dedo más.
Es básico, sí. Pero funciona. Y es justo este tipo de automatización temprana lo que ayuda a que los proyectos grandes no se vuelvan una pesadilla más adelante.
Nos falta la parte de CD, que es donde entra el despliegue. Pero eso lo vemos en otro post.
Por ahora, disfruta tener una cosa menos que hacer a mano.