Jak můžu pomocí GitHub Actions vytvořit pracovní postupy pro kontinuální integraci?
Tady najdete informace o GitHub Actions a pracovních postupech pro kontinuální integraci.
Získáte informace pro:
- Vytvořit pracovní postup ze šablony
- Analyzovat protokoly GitHub Actions
- Otestovat více cílů
- Oddělit úlohy sestavení a testování
- Ukládat artefakty sestavení a přistupovat k nim
- Automatizovat označování žádosti o přijetí změn při revizi
Vytvořit pracovní postup ze šablony
Pokud chcete vytvořit pracovní postup, začněte tím, že použijete šablonu. Šablona obsahuje běžné úlohy a kroky předkonfigurované pro konkrétní typ automatizace, kterou implementujete. Pokud neznáte pracovní postupy, úlohy a kroky, podívejte se na modul Automatizace vývojových úloh pomocí GitHub Actions .
Na hlavní stránce úložiště vyberte kartu Akce a pak vyberte Nový pracovní postup.
Na stránce Zvolit pracovní postup si můžete vybrat z mnoha různých šablon. Jedním z příkladů je šablona Node.js , která provádí čistou instalaci závislostí uzlů, sestaví zdrojový kód a spustí testy pro různé verze Node. Dalším příkladem je šablona balíčku Pythonu, která nainstaluje závislosti Pythonu a spouští testy, včetně lintu, napříč různými verzemi Pythonu.
Do vyhledávacího pole zadejte Node.js.
Ve výsledcích hledání v podokně Node.js vyberte Konfigurovat.
Tento výchozí pracovní postup šablony Node.js uvidíte v nově vytvořeném souboru node.js.yml.
name: Node.js CI
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [14.x, 16.x, 18.x]
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- run: npm ci
- run: npm run build --if-present
- run: npm test
Všimněte si atributu on:
. Tento pracovní postup se aktivuje při nasdílení změn do úložiště a při provedení žádosti o přijetí změn v hlavní větvi.
V tomto pracovním postupu je jeden job
. Pojďme se podívat, co to dělá.
Atribut runs-on:
určuje, že pro operační systém je pracovní postup spuštěn v ubuntu-latest
. Atribut node-version:
určuje, že existují tři buildy, jeden pro Node verze 14.x, 16.x a 18.x. Část popíšeme matrix
podrobněji později, když pracovní postup přizpůsobíme.
V steps
úloze se k získání kódu z úložiště do virtuálního počítače používají akce GitHub Actions /checkout@v3 a akce /setup-node@v3 pro nastavení správné verze Node.js. Určíme, že budeme testovat tři verze Node.js s atributem ${{ matrix.node-version }}
. Tento atribut odkazuje na matici, která jsme dříve definovali. Atribut cache
určuje správce balíčků pro ukládání do mezipaměti ve výchozím adresáři.
Poslední část tohoto kroku provádí příkazy používané projekty Node.js. Příkaz npm ci
nainstaluje závislosti ze souboru package-lock.json, příkaz npm run build --if-present
spustí skript sestavení (pokud existuje) a příkaz npm test
spustí testovací prostředí. Všimněte si, že tato šablona obsahuje kroky pro sestavení i testování ve stejné úloze.
Další informace o příkazu npm najdete v příslušné dokumentaci:
Protokoly akcí pro sestavení
Při spuštění pracovního postupu se vytvoří protokol, který obsahuje podrobnosti o tom, co se stalo, a případné chyby nebo selhání testu.
Pokud dojde k chybě nebo pokud se test nezdaří, zobrazí se v protokolech červená ✖ místo zelené značky ✔ zaškrtnutí. Můžete prozkoumat podrobnosti o chybě nebo selhání a zjistit, co se stalo.
V tomto cvičení identifikujete neúspěšné testy zkoumáním podrobností uvedených v protokolech. K protokolům můžete přistupovat z karty Actions.
Přizpůsobení šablon pracovních postupů
Na začátku tohoto modulu jsme popsali scénář, ve kterém potřebujete nastavit CI pro váš tým. Šablona Node.js je skvělý začátek, ale chcete ji přizpůsobit tak, aby lépe vyhovovala požadavkům vašeho týmu. Chcete cílit na různé verze uzlů a různé operační systémy. Chcete také, aby kroky sestavení a testování byly samostatné úlohy.
Pojďme se podívat, jak si můžete pracovní postup přizpůsobit.
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
node-version: [16.x, 18.x]
Výše jsme nakonfigurovali matici sestavení pro testování v různých operačních systémech a jazykových verzích. Tato matice vytváří čtyři sestavení, jedno pro každý operační systém spárované s každou verzí Node.
Čtyři sestavení spolu se všemi jejich testy vytvářejí poměrně hodně informací protokolu. Mohlo by být obtížné je všechny roztřídit. V následující ukázce vám ukážeme, jak přesunout testovací krok do vyhrazené testovací úlohy. Tato úloha otestuje více cílů. Oddělení kroků sestavení a testování usnadňuje pochopení protokolu.
test:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
node-version: [16.x, 18.x]
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- name: npm install, and test
run: |
npm install
npm test
env:
CI: true
Co jsou artefakty?
Když pracovní postup vytvoří něco jiného než záznam protokolu, označuje se produkt jako artefakt. Například sestavení Node.js vytvoří kontejner Dockeru, který lze nasadit. Tento artefakt, kontejner, se dá nahrát do úložiště pomocí akcí akcí/ upload-artifact a později stáhnout z úložiště pomocí akcí akce /download-artifact.
Uložení artefaktu zachová mezi úlohami. Každá úloha používá novou instanci virtuálního počítače, takže artefakt nemůžete znovu použít tak, že ho uložíte na virtuální počítač. Pokud artefakt potřebujete v jiné úloze, můžete artefakt nahrát do úložiště v jedné úloze a stáhnout ho pro jinou úlohu.
Úložiště artefaktů
Artefakty se ukládají v prostoru úložiště na GitHubu. Prostor je pro veřejná úložiště zdarma a v závislosti na účtu je určitý prostor zdarma i pro privátní úložiště. GitHub ukládá artefakty po dobu 90 dnů.
V následujícím fragmentu actions/upload-artifact@main
kódu pracovního postupu si všimněte, že v akci je path:
atribut. Hodnota tohoto atributu je cesta k uložení artefaktu. V tomto příkladu jsme zadali public/, aby se do adresáře nahrálo vše. Pokud bychom chtěli nahrát jenom jeden soubor, použijeme něco jako veřejný/mytext.txt.
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: npm install and build webpack
run: |
npm install
npm run build
- uses: actions/upload-artifact@main
with:
name: webpack artifacts
path: public/
Pokud chcete stáhnout artefakt pro testování, musí se sestavení úspěšně dokončit a nahrát artefakt. V následujícím kódu určíme, že testovací úloha závisí na úloze sestavení.
test:
needs: build
runs-on: ubuntu-latest
V následujícím fragmentu kódu pracovního postupu stáhneme artefakt. Nyní může testovací úloha použít artefakt k testování.
steps:
- uses: actions/checkout@v3
- uses: actions/download-artifact@main
with:
name: webpack artifacts
path: public
Další informace o používání artefaktů v pracovních postupech najdete v tématu Ukládání dat pracovního postupu jako artefaktů v dokumentaci k GitHubu.
Automatizace revizí na GitHubu pomocí pracovních postupů
Zatím jsme popsali spuštění pracovního postupu s událostmi GitHubu, jako jsou push nebo žádost o přijetí změn. Pracovní postup můžeme spustit také podle plánu nebo na nějaké události mimo GitHub.
Někdy chceme pracovní postup spustit až poté, co osoba provede nějakou akci. Můžeme například chtít spustit pracovní postup jenom poté, co revidujícím žádost o přijetí změn schválí. V tomto scénáři můžeme aktivovat parametr pull-request-review
.
Další akcí, kterou můžeme provést, je přidání popisku k žádosti o přijetí změn. V tomto případě používáme akci pullreminders/label-when-approved-action.
steps:
- name: Label when approved
uses: pullreminders/label-when-approved-action@main
env:
APPROVALS: "1"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ADD_LABEL: "approved"
Všimněte si bloku s názvem env:
. V tomto bloku nastavíte proměnné prostředí pro tuto akci. Můžete třeba nastavit požadovaný počet schvalovatelů. V tomto příkladu je zadaný jeden. secrets.GITHUB_TOKEN
Ověřovací proměnná se vyžaduje, protože akce musí provádět změny v úložišti přidáním popisku. Nakonec zadejte název popisku, který chcete přidat.
Přidání popisku může být událost, která spustí jiný pracovní postup, například sloučení. Tuto událost probereme v dalším modulu o průběžném doručování pomocí GitHub Actions.