¿De qué forma las Acciones de GitHub automatizan las tareas de desarrollo?

Completado

Aquí, presentaremos Acciones de GitHub y los flujos de trabajo. Conozca los tipos de acciones que puede usar y dónde encontrarlas. También verá ejemplos de estos tipos de acciones y cómo encajan en un flujo de trabajo.

Reducción del tiempo que transcurre entre la idea y la implementación gracias a GitHub

GitHub está diseñado para ayudar a los equipos de desarrolladores y a los ingenieros de DevOps a crear e implementar aplicaciones rápidamente. Son muchas las características de GitHub que se ocupan de ello, pero por lo general forman parte de una de estas dos categorías:

  • Comunicación: considere todas las formas en que GitHub facilita a un equipo de desarrolladores la comunicación sobre el proyecto de desarrollo de software: revisiones de código en solicitudes de incorporación de cambios, incidencias de GitHub, paneles de proyectos, wikis, notificaciones, etc.
  • Automatización: Acciones de GitHub permite que el equipo automatice los flujos de trabajo en cada paso del proceso de desarrollo de software, desde la integración hasta la entrega y la implementación. Incluso le permite automatizar la adición de etiquetas a las solicitudes de incorporación de cambios y la comprobación de incidencias y solicitudes de incorporación de cambios obsoletas.

Al combinarse, estas características han permitido a miles de equipos de desarrollo reducir de manera eficaz la cantidad de tiempo que transcurre desde su idea inicial hasta la implementación.

Uso de la automatización de flujo de trabajo para reducir el tiempo de desarrollo

En este módulo nos centraremos en la automatización, así que dediquemos un momento a entender cómo los equipos pueden usar la automatización para reducir el tiempo que se tarda en completar un flujo de trabajo típico de desarrollo e implementación.

Considere todas las tareas que deben tener lugar después de que se escriba el código, pero antes de que el código se pueda usar de forma confiable para su finalidad prevista. En función de los objetivos de la organización, es probable que tenga que realizar una o varias de las siguientes tareas:

  • Asegurarse de que el código pasa todas las pruebas unitarias.
  • Realizar controles de calidad y cumplimiento del código para garantizar que el código fuente cumpla con los estándares de la organización.
  • Comprobar el código y sus dependencias para detectar problemas de seguridad conocidos.
  • Compilar el código que integra el nuevo origen de (potencialmente) varios colaboradores.
  • Asegurarse de que el software pasa las pruebas de integración.
  • Dar una versión a la nueva compilación.
  • Entregar los nuevos archivos binarios a la ubicación adecuada del sistema de archivos.
  • Implementar los nuevos archivos binarios en uno o varios servidores.
  • Si alguna de estas tareas no se supera, informe del problema a la persona o equipo adecuado para su resolución

El reto es realizar estas tareas de manera confiable, sistemática y sostenible. Se trata de un trabajo ideal para la automatización de flujos de trabajo. Si ya usa GitHub, es probable que quiera configurar la automatización del flujo de trabajo mediante Acciones de GitHub.

¿Qué son las Acciones de GitHub?

Las Acciones de GitHub son scripts empaquetados para automatizar tareas en un flujo de trabajo de desarrollo de software en GitHub. Acciones de GitHub se puede configurar para desencadenar flujos de trabajo complejos que satisfagan las necesidades de su organización cada vez que los desarrolladores registran nuevo código fuente en una rama específica, a intervalos de tiempo o manualmente. El resultado es un flujo de trabajo automatizado confiable y sostenible, que supone una disminución significativa del tiempo de desarrollo.

¿Dónde se pueden encontrar las Acciones de GitHub?

Las Acciones de GitHub son scripts que se adhieren a un formato de datos yml. Cada repositorio tiene una pestaña Acciones que proporciona una manera rápida y sencilla de empezar a configurar el primer script. Si ve un flujo de trabajo que cree que podría ser un buen punto de partida, solo tiene que seleccionar el botón Configurar para agregar el script y comenzar a editar el archivo YML de origen.

Screenshot of the *Actions tab* in GitHub Actions displaying a simple workflow and a button to set up this workflow.

Sin embargo, más allá de las Acciones de GitHub destacadas en la pestaña Acciones, puede:

  • Buscar Acciones de GitHub en el Marketplace de GitHub. El Marketplace de GitHub permite detectar y comprar herramientas que amplían el flujo de trabajo.
  • Buscar proyectos de código abierto. Por ejemplo, la organización Acciones de GitHub presenta muchos repositorios populares de código abierto que contienen Acciones de GitHub que puede usar.
  • Escribir sus propias Acciones de GitHub desde cero. Además, si lo desea, puede convertirlas a código abierto, o incluso publicarlas en el Marketplace de GitHub.

Uso de Acciones de GitHub de código abierto

Muchas Acciones de GitHub son de código abierto y están disponibles para todos los usuarios que quieran usarlas. Pero como sucede con cualquier software de código abierto, debe comprobarlas con atención antes de usarlas en el proyecto. Al igual que las normas recomendadas por la comunidad respecto al software de código abierto, como la inclusión de un archivo LÉAME, el código de conducta, el archivo de contribución y las plantillas de problemas, por nombrar algunas, puede seguir estas recomendaciones al utilizar las acciones de GitHub:

  • Revise el archivo action.yml de la acción para ver las entradas y salidas, y para asegurarse de que el código hace lo que dice que hace.
  • Compruebe si la acción está en el Marketplace de GitHub. Esta es una buena comprobación, incluso si una acción no tiene que estar en el Marketplace de GitHub para que sea válida.
  • Compruebe si la acción está verificada en el Marketplace de GitHub. Esto significa que GitHub ha aprobado el uso de esta acción. Sin embargo, debe revisarla igualmente antes de usarla.
  • Incluya la versión de la acción que use mediante la especificación de una referencia de Git, SHA o etiqueta.

Tipos de acciones de GitHub

Hay tres tipos de acciones de GitHub: acciones de contenedor, acciones de JavaScript y acciones de composición.

En las acciones de contenedor, el entorno forma parte del código de la acción. Estas acciones solo se pueden ejecutar en un entorno de Linux hospedado por GitHub. Las acciones de contenedor admiten muchos lenguajes diferentes.

Las acciones de JavaScript no incluyen el entorno en el código. Tendrá que especificar el entorno para ejecutar estas acciones. Puede ejecutar estas acciones en una máquina virtual en la nube o en el entorno local. Las acciones de JavaScript admiten entornos de Linux, macOS y Windows.

Las acciones de composición permiten combinar varios pasos de flujo de trabajo dentro de una acción. Por ejemplo, puedes utilizar esta característica para agrupar comandos de ejecución múltiples en una acción y luego tener un flujo de trabajo que ejecute estos comandos agrupados como un paso simple utilizando dicha acción.

Anatomía de una acción de GitHub

Este es un ejemplo de una acción que permite desproteger un repositorio de Git. Esta acción, actions/checkout@v1, forma parte de un paso de un flujo de trabajo. En este paso también se compila el código de Node.js que se ha extraído del repositorio. En la sección siguiente se abordarán los flujos de trabajo, los trabajos y los pasos.

steps:
  - uses: actions/checkout@v1
  - name: npm install and build webpack
    run: |
      npm install
      npm run build

Supongamos que quiere utilizar una acción de contenedor para ejecutar código en contenedor. Su acción podría tener este aspecto:

name: "Hello Actions"
description: "Greet someone"
author: "octocat@github.com"

inputs:
    MY_NAME:
      description: "Who to greet"
      required: true
      default: "World"

runs:
    uses: "docker"
    image: "Dockerfile"

branding:
    icon: "mic"
    color: "purple"

Observe la sección inputs. Aquí se obtiene el valor de una variable denominada MY_NAME. Esta variable se establece en el flujo de trabajo que ejecuta esta acción.

En la sección runs, especifique docker en el atributo uses. Al hacerlo, deberá proporcionar la ruta de acceso al archivo de imagen de Docker. En este caso, se llama Dockerfile. Aquí no se incluyen detalles sobre Docker, pero, si quiere más información, consulte el módulo Introducción a los contenedores de Docker.

En la última sección, la relativa a la personalización de marca, se personaliza la acción en el marketplace de GitHub, si decide publicarla allí.

Puede encontrar una lista completa de los metadatos de la acción en Sintaxis de metadatos para Acciones de GitHub.

¿Qué es un flujo de trabajo de Acciones de GitHub?

Un flujo de trabajo de Acciones de GitHub es un proceso que se configura en el repositorio para automatizar las tareas del ciclo de vida de desarrollo de software, lo que incluye Acciones de GitHub. Con un flujo de trabajo, puede compilar, probar, empaquetar, publicar e implementar cualquier proyecto en GitHub.

Para crear un flujo de trabajo, agregue acciones a un archivo .yml en el directorio .github/workflows del repositorio de GitHub.

En el próximo ejercicio, el archivo de flujo de trabajo main.yml tendrá el siguiente aspecto:

name: A workflow for my Hello World file
on: push
jobs:
  build:
    name: Hello world action
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1
    - uses: ./action-a
      with:
        MY_NAME: "Mona"

Observe el atributo on:. Se trata de un desencadenador para especificar cuándo se ejecutará este flujo de trabajo. En este caso, desencadena una ejecución cuando se produce un evento push en el repositorio. Puede especificar eventos únicos como on: push, una matriz de eventos como on: [push, pull_request] o un mapa de configuración de eventos que programe un flujo de trabajo o restrinja la ejecución de un flujo de trabajo a cambios de bifurcaciones, etiquetas o archivos específicos. Es posible que el mapa tenga un aspecto similar a este:

on:
  # Trigger the workflow on push or pull request,
  # but only for the main branch
  push:
    branches:
      - main
  pull_request:
    branches:
      - main
  # Also trigger on page_build, as well as release created events
  page_build:
  release:
    types: # This configuration does not affect the page_build event above
      - created

Si no especifica el tipo o los tipos de actividad del evento, este se desencadenará en todos los tipos. Para obtener una lista completa de los eventos y sus tipos de actividad, vea: Eventos que desencadenan flujos de trabajo en la documentación de GitHub.

Un flujo de trabajo debe tener al menos un trabajo. Un trabajo es una sección del flujo de trabajo asociada a un ejecutor. Un ejecutor puede estar hospedado en GitHub o autohospedado, y el trabajo se puede ejecutar en una máquina o en un contenedor. El ejecutor se especifica con el atributo runs-on:. Aquí, se le indica al flujo de trabajo que ejecute este trabajo en ubuntu-latest.

Cada trabajo tendrá pasos para completar. En el ejemplo, el paso usa la acción actions/checkout@v1 para extraer el repositorio. Lo interesante es el valor uses: ./action-a, que es la ruta a la acción de contenedor que se crea en un archivo action.yml. El contenido de un archivo action.yml se ha examinado antes en la sección ¿Qué son las Acciones de GitHub?.

La última parte de este archivo de flujo de trabajo establece el valor de la variable MY_NAME para este flujo de trabajo. Recuerde que la acción de contenedor tomó una entrada llamada MY_NAME.

Para más información sobre la sintaxis del flujo de trabajo, vea Sintaxis de flujo de trabajo para Acciones de GitHub.

Ejecutores hospedados en GitHub y autohospedados

Hemos mencionado brevemente los ejecutores como asociados a un trabajo. Un ejecutor es simplemente un servidor que tiene instalada la aplicación de ejecutor de Acciones de GitHub. En el ejemplo de flujo de trabajo anterior, había un atributo runs-on: ubuntu-latest dentro del bloque de trabajos, que indicaba al flujo de trabajo que el trabajo se ejecutará mediante el ejecutor hospedado en GitHub que se ejecuta en el entorno ubuntu-latest.

En lo que respecta a los ejecutores, hay dos opciones entre las que elegir: Ejecutores hospedados en GitHub o ejecutores autohospedados. Si usa un ejecutor hospedado en GitHub, cada trabajo se ejecuta en una nueva instancia de un entorno virtual especificado por el tipo de ejecutor hospedado en GitHub que defina, runs-on: {operating system-version}. Con los ejecutores autohospedados, debe aplicar la etiqueta de autohospedado, su sistema operativo y la arquitectura del sistema. Por ejemplo, un ejecutor autohospedado con un sistema operativo Linux y una arquitectura ARM32 tendría un aspecto similar al siguiente: runs-on: [self-hosted, linux, ARM32].

Cada tipo de ejecutor tiene sus ventajas, pero los ejecutores hospedados en GitHub ofrecen una forma más rápida y sencilla de ejecutar los flujos de trabajo, aunque con opciones limitadas. Los ejecutores autohospedados son una manera muy configurable de ejecutar flujos de trabajo en su propio entorno local personalizado. Puede ejecutar ejecutores autohospedados en el entorno local o en la nube. También puede usar ejecutores autohospedados para crear una configuración de hardware personalizada con más capacidad de procesamiento o memoria para ejecutar trabajos más grandes, instalar software disponible en la red local y elegir un sistema operativo que no ofrecen los ejecutores hospedados en GitHub.

Posibles límites de uso de las Acciones de GitHub

Acciones de GitHub tiene algunos límites en función de su plan de GitHub y de si su ejecutor está hospedado en GitHub o autohospedado. Para obtener más información sobre los límites de uso, consulte Límites de uso, facturación y administración en la documentación de GitHub.