Introduzione alle GitHub Actions

pubblicato da il 18/03/2020 alle 9:26

DevOps  GitHub 

Introduzione

GitHub è una delle piattaforme più utilizzate dagli sviluppatori per ospitare il codice sorgente dei propri progetti, soprattutto quando si tratta di soluzioni Open Source. Negli ultimi anni ha inoltre aggiunto una serie di funzionalità che permettono di integrare strumenti di Project Management e CI/CD.

Tra tutti questi strumenti, uno dei più interessanti è certamente GitHub Actions, rilasciato ufficialmente al GitHub Universe 2019.

Cosa è GitHub Actions?

GitHub Actions è uno strumento che offre la possibilità di automatizzare le attività di Continuous Integration e Continuous Delivery.
A tal fine permette la definizione di uno o più Workflow, ovvero un insieme di step che eseguono in modo automatico le operazioni di build, test e delivery della nostra applicazione, a fronte di eventi come ad esempio una push o una pull request.

Ogni workflow è rappresentato da un file con estensione .yml, molto simile a quello utilizzato in strumenti come Azure Pipelines.

Come è strutturato un file di workflow?

Per definire le parti da cui è composto un file di workflow prendiamo come esempio il seguente file:

name: My Build

on:
  push:
    branches:
      - master
      - develop
  pull_request:
    branches:
      - master
      - develop

jobs:
  build:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [windows-latest, ubuntu-latest, macos-latest]

  steps:
    - uses: actions/checkout@v2
    - name: Setup .NET Core
    uses: actions/setup-dotnet@v1
    with:
      dotnet-version: 3.1.101
    - name: Build with dotnet
    run: dotnet build --configuration Release
    - name: Run unit tests
    run: dotnet test

Come possiamo vedere, ogni workflow è caratterizzato da una proprietà name e da due sezioni.

La sezione on definisce quali sono gli eventi che scatenano le operazioni definite nel workflow.
Nell'esempio precedente ogni volta che viene fatta una push oppure una pull request sulla branch master o develop, vengono avviate le varie operazioni definite nella sezione jobs.

La sezione jobs definisce, invece, quali sono le operazioni da eseguire.
È possibile definire dei parametri nella sottosezione build come, ad esempio, quali siano i sistemi operativi su cui eseguire i vari step.

Nella sezione steps viene invece definita la sequenza delle operazioni che vengono eseguite.
Ad esempio, il file mostrato in precedenza carica la versione 3.1 di .NET Core e tramite la CLI esegue la build del progetto in configurazione Release e poi esegue gli unit test.

Creiamo un workflow

Per creare un workflow, dalla pagina del vostro progetto su Github cliccate sulla voce di menu Actions mostrata in figura:

Menu Actions

Cliccato su questa voce di menu, la pagina che si apre ci suggerisce quale possa essere il template di partenza per il nostro workflow, in base alle tecnologia utilizzata.
Ad esempio se il nostro è un progetto basato su .NET Core / .NET Standard, ci viene mostrato il seguente suggerimento:

Creazione Workflow

Cliccando sul bottone Set up this workflow si viene riportati alla creazione del nostro workflow, dove è possibile dare un nome al file yml e definire il processo in un editor di testo che offre funzionalità di autocompletamento.

Editor Workflow

Una volta terminata la definizione delle nostre operazioni, il file viene aggiunto al nostro repository nel percorso .github/workflows.

Come eseguire e monitorare il nostro workflow

Creato il nostro workflow, possiamo avviarlo in base agli eventi per i quali è stato configurato.
Ad esempio, se abbiamo registrato tra gli eventi la Pull Request, ogni volta che un utente farà una PR su uno dei branch abilitati, il workflow partirà in automatico e verrà mostrato un indicatore di successo o errore nella pagina di dettaglio della PR.

Per monitorare le varie esecuzioni, sempre cliccando la voce di menu Actions, viene mostrato l'elenco dei workflow creati e per ognuno di essi l'elenco delle varie esecuzioni.

Elenco Workflow

Per ognuna delle esecuzioni è inoltre possibile vedere il dettaglio che mostra l'andamento in tempo reale dell'operazione in esecuzione

Dettaglio Workflow

Conclusioni

In questo articolo abbiamo fornito una breve introduzione a GitHub Actions.
Abbiamo visto come poter utilizzare questo strumento per automatizzare i nostri processi di build ed eventualmente di delivery. È infatti possibile automatizzare anche il deploy, ad esempio, su NuGet, Azure o altre piattaforme.

La documentazione ufficiale delle GitHub Actions è consultabile all'indirizzo https://help.github.com/en/actions, dove è presente anche una sezione Reference in cui è possibile trovare l'elenco dei costrutti che è possibile utilizzare nei file di workflow.