SetValue.NETSetValue.NET

GitHub Actions

August 01, 2020

En esta breve introducción, hablamos sobre las GitHub Actions, la solución de GitHub para crear workflows con automatizaciones personalizadas que complementan el desarrollo de un software. Acciones como testear, compilar o desplegar se pueden realizar fácilmente desde el mismo repositorio, desencadenados por un commit o un pull request. Estas acciones nos permiten crear procesos personalizados de CI/CD.

Cada Workflow, es un conjunto de Actions publicadas en el Marketplace, o que han sido previamente construidas para nuestros proyectos, y que, combinadas, nos permiten complementar el ciclo de vida del desarrollo del Software, validando el código que se ha subido, compilando, o desplegando, por ejemplo.

Estos workflows son ejecutados en unas máquinas llamadas runners que pueden ser de GitHub (GitHub-hosted) o propias (self-hosted), en ambos casos los workflows pueden ser ejecutados en Linux, Windows, macOS y contenedores.

Limitaciones

Actualmente, aunque principalmente dependen de si utilizas los runners GitHub-hosted o self-hosted, existen estas limitaciones:

Límite GitHub-hosted Self-hosted
Tiempo de ejecución Job 6 horas No aplica
Tiempo de ejecución Workflow 72 horas 72 horas
Tiempo máximo de un Job en cola 24 horas No aplica
API Requests / hora 1000 1000
Jobs concurrentes Free: 20, Pro: 40, Team: 60, Enterprise: 180 No aplica
Job matrix 256 256

Azure Pipelines vs GitHub Actions

Ambas soluciones de CI/CD son instrumentadas desde ficheros escritos en YAML que está almacenado en el repositorio de código. Sin embargo, aunque en esencia son parecidos, tienen determinadas diferencias.

  • Azure Pipelines soporta un editor visual (classic editor) que permite crear la configuración del CI de forma visual. GitHub Actions utiliza únicamente YAML y no puede ser editado gráficamente.
  • Azure Pipelines permite omitir cierta información en la definición de los jobs. GitHub Actions requiere configuración explícita que la estructura del YAML no soporta que se omita.
  • Azure Pipelines soporta stages en un único fichero YAML. GitHub Actions por el contrario, requiere varios ficheros YAML.
  • Los agentes on-prem de Azure Pipelines pueden seleccionarse con ciertas capacidades, en cambio en GitHub Actions se pueden seleccionar con etiquetas.

Ejemplos

En este repositorio, GitHub ha publicado distintos ejemplos para construir GitHub Actions sencillas, cubriendo un abanico amplio de casuísticas.

Por ejemplo, para compilar y testear una aplicación .NET Core con cada commit o pull request del repositorio:

name: .NET Core

on:
  push:
    branches: [ $default-branch ]
  pull_request:
    branches: [ $default-branch ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Setup .NET Core
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: 3.1.301
    - name: Install dependencies
      run: dotnet restore
    - name: Build
      run: dotnet build --configuration Release --no-restore
    - name: Test
      run: dotnet test --no-restore --verbosity normal

Custom Actions

Además de estar disponibles las Actions existentes en el Marketplace de GitHub, dependiendo del proyecto que estemos construyendo, éstas podrían no ser suficiente, para ello puedes construir personalizadas, con la funcionalidad precisa para que sean utilizadas por los workflows de tus repositorios, o si lo deseas, de la comunidad de GitHub.

Actualmente, se pueden construir Actions de dos tipos, Docker container y JavaScript. El primero soporta Linux, y las Actions de JavaScript Linux, macOS y Windows.

En próximos posts, hablaremos de la construcción de una GitHub Action personalizada.

Buy Me A Coffee