/github-actions-course

Creative Commons Attribution 4.0 InternationalCC-BY-4.0

Curso Básico de GitHub Actions

Aprende los conceptos básicos para crear tu primer flujo de CI/CD para tus proyectos con GitHub Actions

Bienvenido

¡Bienvenido al Curso Básico de GitHub Actions de Platzi! en este curso aprenderás a realizar flujos de Integración y Despliegue Continúo (CI/CD) para tus proyectos personales, así como automatizar cualquier proceso que que te ayude a impulsar tu flujo de trabajo 🚀.

  • ¿Para quíen es este curso?: Desarrolladores backend, frontend y Full Stack; DevOps; SREs, Estudiantes, Líderes de equipo, cualquier usuario de GitHub.
  • ¿Qué aprenderás?: Aprenderás a automatizar los procesos de compilación, pruebas y despliegue de sus proyectos.
  • ¿Qué construirás?: Una serie de flujos de trabajo que usen los principales conceptos detrás de GitHub Actions (Jobs, Steps, Actions, Variables, Expresiones, entre otros).
  • Prerequisitos: Conocimientos básicos sobre Git y GitHub (realizar commits y push; crear pull requests e issues; agregar etiquetas).
  • Duración: Este curso tendrá 5 pasos y lo podrás terminar en menos de 2 horas.

¿Cómo iniciar el curso?

  1. Haz click derecho en Start course y abre el enlace en una nueva pestaña.
    start-course
  2. En la nueva pestaña, llena los campos para crear un nuevo repositorio.
    • En owner, elige tu cuenta personal o la de tu organización.
    • Es recomendado dejar el repositorio como público ya que los privados consumen minutos que pueden ser cobrados. Create a new repository
  3. Después de que el nuevo repositorio ha sido creado, espera por cerca de 20 segundos; luego, recarga la página. Sigue los pasos que aparezcan en el README del repositorio.

Paso 1: Crea tu primer workflow file

¡Bienvenido al "Curso Básico de GitHub Actions"! 👋

Primero, aprenderemos los conceptos básicos de GitHub Actions

¿Qué es GitHub Actions?: Es una plataforma de integración y despliegue continuo (CI/CD) que permite automatizar procesos de compilación, pruebas y despliegue.

¿Qué es un Workflow?: Es un proceso automatizado configurable que ejecutará uno o más jobs. Se define como un archivo YAML en el directorio .github/workflows de tu repositorio y se ejecutará cuando lo active un evento.

¿Qué es un Event?: Actividad específica en un repositorio, la cual activa una ejecución de un workflow.

¿Qué es un Job?: Conjunto de tareas (steps) en un workflow que se ejecutan en el mismo runner.

¿Qué es un Runner?: Servidor que ejecuta los workflows. GitHub provee runners de Ubuntu, Windows y MacOS.

¿Qué es un Step?: Puede ser: un script/comando de shell o un action que se ejecutará.

¿Qué es un Action?: Aplicación personalizada que realiza una tarea compleja repetitiva.

⌨️ Actividad: Crea un workflow file

  1. Abra una nueva pestaña del navegador y siga los pasos de la segunda pestaña mientras lee las instrucciones de esta pestaña.
  2. Cree un Pull Request para ver todos los cambios que realizará a lo largo de este curso. Haga clic en la pestaña Pull Requests, haga clic en New Pull Request, establezca base: main y compare: aprendiendo-github-actions.
  3. Vaya a la pestaña Code.
  4. En el menú desplegable de la rama main, haga clic en la rama aprendiendo-github-actions.
  5. Agrega un script simple en tu lenguaje de programación preferido (Python, JavaScript, Go, Rust, etc.) que imprima un "Hola Mundo".
  6. Navegue a la carpeta .github/workflows/, luego seleccione Add file y haga clic en Create new file.
  7. En el campo Name your file..., ingrese hola-mundo.yml.
  8. Con lo aprendido hasta el momento, crea un workflow file que corra el archivo del paso anterior que imprime el "Hola Mundo".
  9. Espere unos 20 segundos y luego actualice esta página para el siguiente paso.

Ayuda

Crea un archivo llamado hola_mundo.py en la raiz del repositorio y agrega el siguiente contenido:

import os


def main():
    nombre = os.getenv("USERNAME")
    print(f"¡Hola, {nombre} desde GitHub!")


if __name__ == "__main__":
    main()

Agregue el siguiente contenido al archivo hola-mundo.yml:

name: Aprendiendo GitHub Actions
run-name: ¡Estoy aprendiendo GitHub Actions!
on: [push]
jobs:
  hola-mundo:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Definir variable
        run: echo "USERNAME=${{ github.actor }}" >> $GITHUB_ENV
      - name: Correr script
        run: python hola_mundo.py

Paso 2: Conoce los principales Triggers

¡Creaste tu primer Workflow! 🎉

Ahora que conoces los componentes básicos de un workflow en GitHub Actions podemos empezar a explorar nuevos conceptos. El primero será ver los principales eventos o Triggers para lanzar un nuevo workflow.

¿Qué eventos exploraremos?

  • push
  • pull_request
  • issues
  • issue_comment
  • workflow_dispatch
  • schedule

⌨️ Actividad: Expermienta con los distintos Triggers

  1. Vuelve a la rama en que estabamos trabajando (aprendiendo-github-actions).
  2. Navegue a la carpeta .github/workflows/, luego seleccione Add file y haga clic en Create new file.
  3. En el campo Name your file..., ingrese triggers.yml.
  4. Crea un workflow que incluya al menos 3 de los triggers que vimos en la clase.
  5. Espere unos 20 segundos y luego actualice esta página para el siguiente paso.

Ayuda

Agregue el siguiente contenido al archivo triggers.yml:

name: Triggers
run-name: ¡Estoy aprendiendo a usar diferentes Triggers!
on:
  push:
    branches:
      - master
  pull_request:
    types: [opened, synchronize, reopened]
    paths:
      - '**.py'
  issues:
    types:
      - labeled
  workflow_dispatch:
    inputs:
      lenguaje_favorito:
        description: 'Lenguaje favorito'
        default: Python
        required: true
        type: choice
        options:
        - Python
        - JavaScript
        - Go
      nombre:
        description: 'Tu nombre'
        required: true
        default: Juan
        type: string
  schedule:
    - cron:  '15 22 * * *'
jobs:
  hola-mundo-manual:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Definir nombre
        run: echo "USERNAME=${{ inputs.nombre }}" >> $GITHUB_ENV
      - name: Definir lenguaje
        run: echo "LANGUAGE=${{ inputs.lenguaje_favorito }}" >> $GITHUB_ENV
      - name: Correr script
        run: python hola_lenguaje.py
  hola-mundo:
    if: ${{ github.event_name != 'workflow_dispatch' }}
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Definir variable
        run: echo "USERNAME=${{ github.actor }}" >> $GITHUB_ENV
      - name: Correr script
        run: python hola_mundo.py

Paso 3: Aprende a usar Expresiones

¡Buen trabajo usando los distintos eventos para lanzar nuevos workflows! ✨

Ahora que conoces como lanzar distintos workflows con los principales tipos de eventos es importante sacar provecho del uso de Expresiones en nuestros workflow files para obtener mayor versatilidad y opciones.

¿Qué son las expresiones?: Es una forma de configurar variables de entorno y acceder al contexto. Usan una sintaxis especial ${{ <expresión> }}

Puedes combinar valores literales, referencias de contexto y funciones usando operadores o condicionales.

⌨️ Actividad: Crea tus primeras Expresiones

  1. Vuelve a la rama en que estabamos trabajando (aprendiendo-github-actions).
  2. Navegue a la carpeta .github/workflows/, luego seleccione Add file y haga clic en Create new file.
  3. En el campo Name your file..., ingrese expresiones.yml.
  4. Crea un workflow que incluya al menos 3 expresiones de las vistas en clase.
  5. Espere unos 20 segundos y luego actualice esta página para el siguiente paso.

Ayuda

Agregue el siguiente contenido al archivo expresiones.yml:

name: Expresiones
run-name: ¡Estoy aprendiendo a usar Expresiones!
on:
  workflow_dispatch:
    inputs:
      edad:
        description: 'Edad'
        required: true
        type: integer
      nombre:
        description: 'Tu nombre'
        required: true
        default: 'Juan'
        type: string
jobs:
  mayor:
    if: ${{ inputs.edad >= 18 }} 
    runs-on: ubuntu-latest
    steps:
      - name: Correr script
        run: echo ${{ inputs.nombre }} es mayor de edad
  menor:
    if: ${{ inputs.edad < 18 }} 
    runs-on: ubuntu-latest
    steps:
      - name: Correr script
        run: echo ${{ inputs.nombre }} es menor de edad

Paso 4: Aprende a usar los distintos Contextos

¡Excelente trabajo con el uso de Expresiones! 🥳

Como ya vimos, mediante el uso de Expresiones podemos acceder a información de formá dinámica durante la ejecución de nuestros workflows. Una de las fuentes más importantes de información usada es la que nos brindan los contextos.

¿Qué son los contextos?: Es una manera de acceder a información acerca de las ejecuciones de workflows, variables, entornos de runners, jobs y steps. Cada contexto es un objeto que contiene propiedades.

Los más usados son:

  • github
  • env
  • vars
  • job
  • steps
  • runner
  • secrets
  • inputs

⌨️ Actividad: Usa los diferentes contextos

  1. Vuelve a la rama en que estabamos trabajando (aprendiendo-github-actions).
  2. Navegue a la carpeta .github/workflows/, luego seleccione Add file y haga clic en Create new file.
  3. En el campo Name your file..., ingrese contextos.yml.
  4. Crea un workflow que incluya el uso de alguno de los contextos que vimos en clase.
  5. Espere unos 20 segundos y luego actualice esta página para el siguiente paso.

Ayuda

Agregue el siguiente contenido al archivo contextos.yml:

name: Contexto
run-name: ¡Estoy aprendiendo a usar Contextos!
on: push
jobs:
  check-main:
    if: ${{ github.ref == 'refs/heads/main' }}
    runs-on: ubuntu-latest
    steps:
      - run: echo "Desplegando en la rama $GITHUB_REF"

Paso 5: Aprende a usar las Variables de Entorno

¡Ya estás a un paso de terminar! ❤️

El uso de variables de entorno es lo único que te falta por aprender de los principales conceptos y componentes de GitHub Actions, así que vamos a por ello.

¿Qué son las variables?: Son una manera de almacenar y reutilizar información de configuración no confidencial. Tales como datos de configuración, como marcas del compilador, nombres de usuario o nombres de servidor como variables.

⌨️ Actividad: Usa variables de entorno en tu workflow

  1. Vuelve a la rama en que estabamos trabajando (aprendiendo-github-actions).
  2. Navegue a la carpeta .github/workflows/, luego seleccione Add file y haga clic en Create new file.
  3. En el campo Name your file..., ingrese variables.yml.
  4. Crea un workflow que incluya el uso de variables.
  5. Espere unos 20 segundos y luego actualice esta página para el siguiente paso.

Ayuda

Agregue el siguiente contenido al archivo variables.yml:

name: Saludo usando variables
run-name: ¡Estoy aprendiendo a usar Variables!
on:
  workflow_dispatch
env:
  DIA_DE_SEMANA: Lunes
jobs:
  saludo-variables:
    runs-on: ubuntu-latest
    env:
      SALUDO: Hola
    steps:
      - name: Saludar
        run: echo "$SALUDO, $NOMBRE. Hoy es $DIA_DE_SEMANA!"
        env:
          NOMBRE: Juan

Cierre

¡Felicidades! haz completado esta sección del Curso Básico de GitHub Actions de Platzi 💚

celebrate

Ya conoces los principales conceptos para crear workflows que te sirvan para automatizar todo tipo de tareas incluidas las de integración y despliegue continúo.

Has aprendido sobre:

  • Qué son Worfklows.
  • Qué son Events.
  • Qué son Jobs.
  • Qué son Runners.
  • Qué son Steps.
  • Qué son Ations.
  • Cuál es la sintaxis de un workflow file.
  • Cuáles son los principales Triggers.
  • Uso de Expresiones.
  • Acceder a información de Contextos.
  • El uso de variables para acceder a información reutilizable.

¿Qué sigue?

  • Puedes crear flujos de Integración Continúa (CI) para tus proyectos.
  • Puedes crear flujos de Despliegue (CD) para tus proyectos.
  • Puedes automatizar todo tipo de tareas en tus repositorios para mantener un mejor orden y control.

© 2023 Platzi • Código de ConductaCC-BY-4.0 License