Gestire azioni e flussi di lavoro
In questa unità si esploreranno i diversi strumenti e le varie strategie disponibili in GitHub Enterprise Cloud e GitHub Enterprise Server per condividere e gestire GitHub Actions e i flussi di lavoro e gestirne l'utilizzo a livello aziendale.
Il contenuto è strutturato in base al livello in cui sono disponibili gli strumenti presentati: livello di azienda o livello di organizzazione.
Livello di azienda
Configurare i criteri di utilizzo di GitHub Actions
I flussi di lavoro di GitHub Actions contengono spesso azioni, ovvero set di comandi autonomi da eseguire all'interno del flusso di lavoro. Quando si crea un flusso di lavoro, è possibile creare azioni personalizzate oppure fare riferimento alle azioni pubbliche della community disponibili in GitHub Marketplace. Per questo motivo, per impedire agli utenti di eseguire azioni dannose di terze parti, è essenziale configurare specifici criteri di utilizzo per i flussi di lavoro e le azioni da eseguire in azienda.
Per la configurazione dei criteri sono disponibili numerose opzioni in Enterprise Cloud, così come in Enterprise Server se GitHub Connect è abilitato nelle impostazioni aziendali.
Per configurare i criterio di utilizzo di GitHub Actions per l'azienda, passare all'account aziendale e quindi sezionare Policies > Actions (Criteri > Azioni) nella barra laterale. Verranno visualizzate le opzioni seguenti.
L'elenco a discesa Enable for all organizations (Abilita per tutte le organizzazioni) disponibile nella parte superiore consente di decidere quali organizzazioni all'interno dell'azienda possono usare GitHub Actions (tutte, alcune o nessuna), mentre le tre opzioni sottostanti consentono di definire il livello di restrizione di GitHub Actions in queste organizzazioni.
Per abilitare solo alcune azioni da poter eseguire in azienda, selezionare Consenti azioni aziendali e seleziona le azioni non aziendali e i flussi di lavoro riutilizzabili e scegliere l'opzione appropriata al proprio caso d'uso.
Sincronizzare manualmente le azioni pubbliche per Enterprise Server
La maggior parte delle azioni ufficiali create da GitHub viene automaticamente inclusa in Enterprise Server e raccolta in un momento specifico dal GitHub Marketplace. Includono actions/checkout, actions/upload-artifact, actions/download-artifact, actions/labeler e varie azioni actions/setup-, tra le altre. Per ottenere tutte le azioni ufficiali incluse nella vostra istanza aziendale, navigate verso l'organizzazione delle azioni sulla vostra istanza: https://HOSTNAME/actions.
Come accennato nella sezione Configurare i criteri di utilizzo di GitHub Actions, è possibile configurare Enterprise Server in modo che acceda automaticamente alle azioni pubbliche disponibili in GitHub Marketplace e configurare i criteri di utilizzo di tali azioni. Se, tuttavia, si vuole esercitare un controllo più attento sulle azioni pubbliche da rendere disponibili in azienda, è possibile scaricare e sincronizzare manualmente le azioni relative all'istanza aziendale usando lo strumento actions-sync.
A livello di organizzazione
Documentare gli standard aziendali
La creazione di un flusso di lavoro di GitHub Actions comporta spesso la necessità di scrivere più file e creare più repository per specificare il flusso di lavoro. La creazione include anche le azioni, i contenitori e/o gli strumenti di esecuzione da utilizzare nel flusso di lavoro. A seconda del numero di utenti presenti nell'istanza di Enterprise Cloud o Enterprise Server, è possibile che si crei rapidamente un po' di confusione se non sono stati precedentemente definiti standard aziendali per la creazione di flussi di lavoro di GitHub Actions.
Come procedura consigliata, è opportuno quindi documentare gli elementi seguenti in Wiki GitHub o come file markdown in un repository accessibile a tutti gli utenti dell'organizzazione:
- Repository per l'archiviazione
- Convenzioni di denominazione di file/cartelle
- Posizione dei componenti condivisi
- Piani per la manutenzione in corso
- Linee guida per i contributi
Creare modelli di flusso di lavoro
I modelli di flusso di lavoro costituiscono uno strumento ottimale per garantire che l'automazione venga riutilizzata e gestita a livello aziendale. Sia in Enterprise Cloud che in Enterprise Server, gli utenti con accesso in scrittura al repository .github di un'organizzazione possono creare modelli di flusso di lavoro che saranno disponibili per l'uso ai membri dell'altra organizzazione con lo stesso accesso in scrittura. I modelli di flusso di lavoro possono quindi essere usati per creare nuovi flussi di lavoro nei repository pubblici e privati dell'organizzazione.
La creazione di un modello di flusso di lavoro è articolata in due passaggi:
Creare un file del flusso di lavoro yml.
Creare un file di metadati JSON che descrive il modo in cui il modello deve essere presentato agli utenti durante la creazione di un flusso di lavoro.
Nota
Il file di metadati deve avere lo stesso nome del file del flusso di lavoro. Invece dell'estensione .yml, è necessario aggiungere .properties.json. Ad esempio, un file denominato octo-organization-ci.properties.json contiene i metadati per il file del flusso di lavoro denominato octo-organization-ci.yml.
Entrambi i file devono essere inseriti in un repository .github pubblico e in una directory denominata workflow-templates. Potresti doverli creare se non esistono già nella tua organizzazione.
Di seguito è riportato un esempio di un file di flusso di lavoro di base:
name: Octo Organization CI
on:
push:
branches: [ $default-branch ]
pull_request:
branches: [ $default-branch ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Run a one-line script
run: echo Hello from Octo Organization
Si noti che il file precedente usa un segnaposto $default-branch. Quando si crea un flusso di lavoro usando un modello personalizzato, questo segnaposto viene automaticamente sostituito con il nome del ramo predefinito del repository.
Di seguito è riportato il file di metadati che si dovrebbe creare per il file del flusso di lavoro precedente:
{
"name": "Octo Organization Workflow",
"description": "Octo Organization CI workflow template.",
"iconName": "example-icon",
"categories": [
"Go"
],
"filePatterns": [
"package.json$",
"^Dockerfile",
".*\\.md$"
]
}
I file di metadati usano i parametri seguenti:
| Parametro | Descrizione | Obbligatorio |
|---|---|---|
| nome | Nome del modello di flusso di lavoro visualizzato nell'elenco dei modelli disponibili. | Sì |
| descrizione | Descrizione del modello di flusso di lavoro visualizzato nell'elenco dei modelli disponibili. | Sì |
| iconName | Definisce un'icona per la voce del flusso di lavoro visualizzata nell'elenco dei modelli. Deve essere un'icona SVG con lo stesso nome e deve essere archiviata nella directory workflow-templates. Ad esempio, viene fatto riferimento a un file SVG denominato example-icon.svg come icona di esempio. | No |
| categorie | Definisce la categoria di linguaggio del flusso di lavoro. Quando un utente visualizza i modelli disponibili, quelli creati con lo stesso linguaggio verranno visualizzati per primi. | No |
| filePatterns | Consente di usare il modello a cui fa riferimento se il repository dell'utente include un file nella directory radice corrispondente a un'espressione regolare definita. | No |
Dopo aver creato un modello di flusso di lavoro, gli utenti dell'organizzazione possono trovarlo in Actions > New workflow > Workflows created by _your_organization_name (Azioni > Nuovo flusso di lavoro > Flussi di lavoro creati da _your_organization_name).
Modelli riutilizzabili per azioni e flussi di lavoro
GitHub Actions consente l'automazione del flusso di lavoro e una parte fondamentale della gestione efficiente dei flussi di lavoro consiste nell'usare modelli riutilizzabili. I modelli riutilizzabili consentono di standardizzare e semplificare lo sviluppo in più repository, riducendo la ridondanza e migliorando la gestibilità.
I modelli riutilizzabili in GitHub Actions fanno riferimento a azioni e flussi di lavoro predefiniti a cui è possibile fare riferimento e usare in più progetti. Garantiscono coerenza e conformità agli standard a livello aziendale.
Tipi di modelli riutilizzabili
| Tipo di modello | Scopo | Esempio |
|---|---|---|
| Flussi di lavoro riutilizzabili | Standardizzare le pipeline CI/CD tra repository. | ci-pipeline.yml, deploy-app.yml |
| Azioni riutilizzabili | Incapsulare la logica di automazione comune. | setup-env-action, security-scan-action |
| Modelli di flusso di lavoro | Definire strutture di lavoro riutilizzabili. | test-job.yml, build-job.yml |
Flussi di lavoro riutilizzabili
Un flusso di lavoro riutilizzabile è un flusso di lavoro definito in un repository separato a cui è possibile fare riferimento in più progetti. Ciò consente alle organizzazioni di centralizzare la logica CI/CD.
Struttura di un flusso di lavoro riutilizzabile
Un flusso di lavoro riutilizzabile viene archiviato in .github/workflows/ e usa il workflow_call trigger .
Esempio: flusso di lavoro CI standardizzato (ci-pipeline.yml)
name: CI Pipeline
on:
workflow_call:
inputs:
node-version:
required: true
type: string
secrets:
npm-token:
required: true
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: ${{ inputs.node-version }}
registry-url: 'https://npm.pkg.github.com/'
- name: Install Dependencies
run: npm install
- name: Run Tests
run: npm test
Uso di un flusso di lavoro riutilizzabile in un altro repository
Una volta definito, il flusso di lavoro riutilizzabile può essere usato in qualsiasi repository tramite la uses: parola chiave .
Esempio: Chiamata del flusso di lavoro riutilizzabile
name: Reusable CI Pipeline
on: push
jobs:
test:
uses: org/reusable-workflows/.github/workflows/ci-pipeline.yml@v1
with:
node-version: '16'
secrets:
npm-token: ${{ secrets.NPM_TOKEN }}
Vantaggi dell'uso di un flusso di lavoro riutilizzabile
- Assicura che tutti i repository seguano la stessa struttura CI/CD.
- Riduce la ridondanza e il carico di manutenzione.
- Consente aggiornamenti centralizzati senza modificare ogni repository.
Azioni riutilizzabili
GitHub Action è un'unità modulare riutilizzabile che esegue attività di automazione specifiche. Le organizzazioni spesso creano azioni personalizzate per incapsulare la logica usata di frequente.
Struttura di un'azione riutilizzabile
Un'azione riutilizzabile viene definita in un repository di azioni con un action.yml file.
Esempio: Azione di configurazione ambiente personalizzata
name: "Setup Environment"
description: "Sets up Node.js and installs dependencies"
inputs:
node-version:
description: "Node.js version"
required: true
registry-url:
description: "NPM Registry URL"
required: false
default: "https://registry.npmjs.org/"
runs:
using: "node16"
main: "index.js"
Uso di un'azione riutilizzabile in un flusso di lavoro
Anziché ripetere i passaggi di configurazione in ogni flusso di lavoro, viene usata l'azione personalizzata:
name: Build & Test
on: push
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Environment
uses: org/actions/setup-env@v1
with:
node-version: '16'
Vantaggi:
- Riduce la duplicazione della logica di configurazione tra i repository.
- Semplifica i file del flusso di lavoro, rendendoli più leggibili.
- Centralizza gli aggiornamenti: correzioni o miglioramenti in un'unica posizione riflettono tutti i flussi di lavoro.
Modelli di flussi di lavoro
Come illustrato in precedenza, i modelli di flusso di lavoro consentono di standardizzare l'automazione nell'organizzazione fornendo strutture predefinite per le attività comuni. Questi modelli sono una parte fondamentale della categoria più ampia di flussi di lavoro riutilizzabili.
Nella sezione precedente "Creazione dei modelli di flusso di lavoro", è stato descritto come costruire questi modelli da un file yml e un corrispondente file di metadati .properties.json.
Per connettere ulteriormente il concetto: i modelli di flusso di lavoro sono una forma di flusso di lavoro riutilizzabile. Quando vengono creati e archiviati in un repository pubblico .github nella workflow-templates/ directory, consentono ad altri membri dell'organizzazione di creare flussi di lavoro coerenti per i repository senza doverli definire da zero.
Sfruttando i modelli di flusso di lavoro, le aziende possono:
- Applicare le procedure consigliate nei repository.
- Accelerare l'integrazione e la configurazione per i nuovi progetti.
- Mantenere la coerenza nei processi CI/CD.