GitHub Actions CI/CD: praktický příklad workflow
GitHub Actions spouští CI/CD přímo v repozitáři na GitHubu. Ukážeme si workflow pro nasazení, které zapíše verzi i do AboutTheApp.
Shrnutí a kontext
GitHub Actions je CI/CD služba GitHubu: při pull requestu například spustí testy a po vydání verze sestaví aplikaci a nasadí ji do zvoleného prostředí. V článku najdete dva hotové workflow soubory ke zkopírování. Obsahují část, která po úspěšném nasazení zapíše do AboutTheApp verzi a poznámky k vydání.
1. Co je GitHub Actions
GitHub Actions spouští automatizované úlohy jako reakci na události v repozitáři, jako je například push, schválení pull requestu nebo nový tag. Jednotlivé úlohy workflow jsou popsány v souboru YAML ve složce .github/workflows. Běží na tzv. runneru, což je virtuální stroj, který GitHub pro každou úlohu připraví a po dokončení jej zahodí.
CI (continuous integration, průběžná integrace) znamená, že se každá změna automaticky sestaví a otestuje. CD (continuous delivery nebo deployment, průběžné doručování či nasazování) hotové sestavení nasadí. Obojí lze realizovat v jednom nebo několika workflow v jednom repozitáři. Podrobný popis syntaxe najdete v dokumentaci GitHubu.
| Pojem | Co znamená | Příklad |
|---|---|---|
| Workflow | Soubor YAML s automatizací | .github/workflows/ci.yml |
| Událost (on) | To, co workflow spustí | pull_request, push tagu v*, ruční spuštění workflow_dispatch |
| Job | Skupina kroků na jednom runneru | test, deploy |
| Krok (step) | Jeden příkaz nebo jedna akce | run: npm test |
| Akce (uses) | Hotový krok z GitHub Marketplace | actions/checkout@v5 |
| Secret | Šifrovaná hodnota pro workflow | secrets.DEPLOY_TOKEN |
| Environment | Cílové prostředí s vlastními secrets a pravidly | staging, production |
2. CI workflow: testy u každého pull requestu
CI workflow v GitHub Actions spustí instalaci závislostí, testy a build u každého pull requestu a u každého pushe do hlavní větve. Pull request s neprošlými testy pak GitHub označí červeně a v nastavení ochrany větve můžete úplně zakázat její sloučení. Příklad je pro aplikaci v Node.js, u jiného jazyka vyměníte setup-node a příkazy npm.
name: CI
on:
pull_request:
push:
branches: [main]
permissions:
contents: read
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: actions/setup-node@v5
with:
node-version: 24
cache: npm
- run: npm ci
- run: npm test
- run: npm run build3. CD workflow: nasazení po tagu verze
V tomto režimu se nasazovací workflow spustí v momentě, kdy do repozitáře pošlete tag verze, například v1.4.2. Workflow si z tagu vezme číslo verze bez předpony "v" a najde předchozí tag, který slouží pro vymezení proběhlých změn. To, jak tagy vznikají, závisí na strategii větvení a také na zvoleném schématu verzí.
Uvedený job deploy běží v prostředí "production". V nastavení repozitáře (Settings → Environments) k němu můžete přidat schvalovatele a uložit přístupové údaje k serveru jako "secrets" prostředí. Skript deploy.sh zastupuje váš skutečný způsob nasazení: rsync na server, push Docker image nebo příkaz hostingu.
name: Release
on:
push:
tags:
- "v*"
permissions:
contents: read
jobs:
deploy:
runs-on: ubuntu-latest
environment: production
steps:
- uses: actions/checkout@v5
with:
fetch-depth: 0
- name: Resolve release metadata
id: release
run: |
echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
previous_tag=$(git describe --tags --match 'v*' --abbrev=0 HEAD^ 2>/dev/null || true)
echo "previous-tag=$previous_tag" >> "$GITHUB_OUTPUT"
- uses: actions/setup-node@v5
with:
node-version: 24
cache: npm
- run: npm ci
- run: npm test
- run: npm run build
env:
VITE_APP_VERSION: ${{ steps.release.outputs.version }}
- name: Deploy
run: ./scripts/deploy.sh
env:
DEPLOY_TOKEN: ${{ secrets.DEPLOY_TOKEN }}4. Zápis verze a nasazení do AboutTheApp
Verzi a nasazení do AboutTheApp zapíše akce Report release to AboutTheApp (abouttheapp/sync) jako poslední krok nasazovacího workflow. Uloží číslo verze, její poznámky k vydání a instalaci u zákazníka v konkrétním prostředí.
Bez tohoto kroku zůstane informace o nasazení jen v logu běhu workflow a v commitech, kam se podpora ani zákazník nedostanou.
Bez version-visibility: public založí akce verzi jako privátní. Uvidí ji jen přihlášený uživatel nebo uživatel s odemykacím kódem.
- 1
Založte produkt a zákazníka
V dashboardu AboutTheApp založte produkt a zákazníka s aliasem. Pokud nechcete evidovat nasazení u zákazníků nebo na různých prostředích, stačí založit jen produkt.
- 2
Vygenerujte si klíč pro CI/CD
V uživatelském menu otevřete Účet → CI/CD a klikněte na Vygenerovat klíč. Klíč uvidíte jen jednou a platí pro všechny produkty v účtu. Vygenerování nového klíče ten starý zneplatní.
- 3
Uložte klíč jako secret
Na GitHubu v repozitáři otevřete Settings → Secrets and variables → Actions a klíč uložte pod názvem ABOUTTHEAPP_TOKEN.
- 4
Přidejte krok na konec nasazení
Krok níže vložte na konec jobu deploy. Spustí se jen tehdy, když předchozí kroky včetně nasazení skončily úspěšně.
- name: Report release to AboutTheApp
uses: abouttheapp/sync@v1
with:
token: ${{ secrets.ABOUTTHEAPP_TOKEN }}
alias: rezervace
version: ${{ steps.release.outputs.version }}
changelog-source: git-log
changelog-since: ${{ steps.release.outputs.previous-tag }}
version-visibility: public
customer-alias: klient
environment: production5. Poznámky k vydání z commitů nebo z CHANGELOG.md
Pokud použijete parametr changelog-source: git-log, sestaví se poznámky k vydání z commitů mezi předchozím tagem a aktuálním, bez merge commitů, text každého commitu bude jako odrážka. Protože u prvního vydání předchozí tag neexistuje, verze se zapíše bez poznámek.
Pokud poznámky píšete ručně do souboru CHANGELOG.md ve formátu Keep a Changelog, použijte changelog-source: file. Akce z něj použije sekci, jejíž nadpis odpovídá verzi, třeba ## [1.4.2] - 2026-11-05. Jak mají vypadat dobré poznámky se dočtete v šabloně poznámek k vydání.
6. Ověření, že nasazená aplikace běží v nové verzi
Ověření nasazení zapnete parametrem verify-url. Akce pak před zápisem verze opakovaně volá adresu nasazené aplikace, dokud nedostane odpověď o nasazené verzi. Pokud ji aplikace do 300 sekund nevrátí, krok selže a nezapíše nic.
Odpověď může být JSON, například {"version": "1.4.2"} nebo prostý text s verzí na prvním řádku. Pokud nevíte, jak dostat verzi do buildu, přečtěte si článek Jak zobrazit verzi aplikace. Adresa musí být dostupná z runneru bez přihlášení a vrácená hodnota se musí přesně shodovat s verzí.
verify-url: https://rezervace.example.com/version.json
verify-timeout: 3007. Staging, produkce a více zákazníků
Staging a produkci rozdělte v GitHub Actions na dva joby. Job staging nasadí na staging automaticky, job production nastavte tak, ať má needs: staging a vlastní environment se schvalovatelem, takže na produkci se nasadí až po schválení. Každý job má vlastní krok abouttheapp/sync se správnou hodnotou environment.
Stejně to funguje u aplikace, kterou provozujete pro více zákazníků. Pro každého zákazníka a prostředí zapište instalaci zvlášť, samostatným krokem nebo pomocí matrix strategie přes seznam aliasů zákazníků. Zápis verze je idempotentní, opakované spuštění ji jen aktualizuje. Zápis instalace verze se však přidává při každém běhu, takže opakované spuštění workflow zapíše do AboutTheApp další nasazení.
8. Kde uvidíte výsledek
Zapsaná verze se objeví v katalogu verzí produktu v dashboardu i s poznámkami k vydání. Veřejná verze se zobrazí na About page v záložce Verze produktu. About box v aplikaci zobrazí aktuální verzi i s poznámkami.
Zákaznická About page ukazuje v záložce Prostředí a verze, která verze běží u zákazníka na stagingu a na produkci a kdy se nasadila. Podpora i zákazník tak vidí verzi, kterou zákazník skutečně používá, a může vidět i stav na ostatních prostředích.
Časté otázky
Je GitHub Actions zdarma?
Pro veřejné repozitáře ano, standardní runnery GitHubu jsou u nich zdarma. U privátních repozitářů obsahuje každý tarif GitHubu měsíční kredit na výpočetní čas a pokud ho přesáhnete, tak si musíte připlatit. Větší runnery se platí i u veřejných repozitářů.
Jaký je rozdíl mezi CI a CD?
CI (průběžná integrace) každou změnu automaticky sestaví a otestuje. CD (průběžné doručování nebo nasazování) otestované sestavení připraví k vydání nebo rovnou nasadí. V GitHub Actions to bývají dva workflow soubory nebo dva joby v jednom.
Kam se ukládá workflow GitHub Actions?
Do složky .github/workflows v repozitáři, jedná se o soubor s příponou .yml nebo .yaml. Každý soubor je samostatné workflow s vlastními událostmi.
Jak spustit workflow GitHub Actions jen při novém tagu?
Do sekce on dejte push s filtrem tags, například tags: ["v*"]. Workflow se pak spustí jen při push tagu začínajícího na "v", ne při běžném pushi do větve. Tag pošlete příkazem git push origin v1.4.2.
Jak po nasazení zjistím, která verze běží u zákazníka?
Nasazení musí verzi někam zapsat, z logu běhu workflow ji podpora ani zákazník nevyčtou. V AboutTheApp to dělá krok abouttheapp/sync na konci nasazovacího workflow, který zapíše verzi a instalaci u zákazníka na daném prostředí. AboutTheApp sám GitHub nečte, záznam vznikne jen tímto krokem nebo voláním API.
Ve zkratce
Dva workflow soubory pokryjí testy u pull requestů i nasazení po tagu. Krok abouttheapp/sync na konci zajistí, že u každé verze je vidět, co se v ní změnilo a kde běží.
Chcete vidět, která verze běží u kterého zákazníka?
Založte si zdarma aplikaci v AboutTheApp, přidejte do workflow krok abouttheapp/sync a každé nasazení se zapíše samo.