Tento workshop vás provede základními principy práce s "GitHub Flow" a CI/CD pipeline. Naučíte se, jak nastavit vývojové větve, automatizovat testování a nasazování aplikace do různých prostředí.
- 1. 🚀 GitHub Flow a CI/CD Workshop
- 1.1. 📋 Obsah
- 1.2. ⚙️ Prerekvizity a nastavení v průběhu řešení úkolů
- 1.3. 🔧 Úkol 1: Vytvoření větví pro různá prostředí
- 1.4. 🔧 Úkol 2: Nasazení aplikace do všech prostředí
- 1.5. 🔧 Úkol 3a: Implementace testů do CI pipeline
- 1.6. 🔧 Úkol 3b: Vývojový cyklus s rozšířeným GitHub Flow
- 1.7. 🔧 Úkol 5: Hotfix workflow
- 1.8. 💡 Volitelné rozšířené úkoly
-
Naklonujte si repozitář workshopu:
git clone https://github.com/janblahacgi/vsb-vmswv-workshop-01.git
-
Vytvořte si nový repozitář na svém GitHub účtu (bez inicializace README). Pro bezplatnou verzi GitHub musí být repozitář vytvořen jako veřejný, aby bylo možno využívat gh-pages.
-
Změňte vzdálený repozitář (remote) na váš nový repozitář:
git remote remove origin git remote add origin https://github.com/vaše-uživatelské-jméno/váš-nový-repozitář.git git push -u origin main
- Přejděte do nastavení vašeho repozitáře na GitHubu (Settings).
- Vyberte záložku "Pages" v levém menu.
- V sekci "Build and deployment":
- Source: Nastavte "Deploy from a branch"
- Branch: Vyberte "gh-pages" a "/ (root)" (Bude existovat až po prvním spuštění workflow (GitHub Actions))
- Klikněte na "Save".
- Ujistěte se, že máte povoleny GitHub Actions/General:
- Přejděte do záložky "Actions/General" v nastavení repozitáře
- Vyberte možnost "Allow all actions and reusable workflows" (Pravděpodobně výchozí hodnota)
- Vyberte možnost "Read and write permissions"
- Zaškrtněte "Allow GitHub Actions to create and approve pull requests"
Po vytvoření větví viz. Úkol 1
- Přejděte do "Settings/Branches"
- Klikněte "Add classic branch protection rule"
- Přidejte nové "Branch Protection Rule"
- Nastavte pravidla pro konkrétní větev
- Branch name pattern: vyplňte název větve (
dev
,test
,uat
nebomain
) - zaškrtněte volby:
- Require a pull request before merging
- Do not allow bypassing the above settings
- Branch name pattern: vyplňte název větve (
- Uložte nastavení
- Opakujte pro všechny větve
Vytvořit a správně nastavit větve pro tři prostředí nasazení:
dev
- vývojová větevtest
- testovací prostředíuat
- uživatelské akceptační testovánímain
- produkční větev
git checkout -b dev
git push --set-upstream origin dev
Ověření, že všechny větve existují:
git branch -a
Po vytvoření větví provést nastavení branch protection rules
Aplikaci nasadit do všech tří prostředí (test, UAT, produkce) a ověřit, že všechna nasazení fungují správně. Tímto krokem zajistíte, že máte funkční CI/CD pipeline a můžete začít vyvíjet aplikaci.
Prozkoumejte existující CI/CD workflow ve složce .github/workflows/
:
ci-cd.yaml
- výchozí boddeploy.yaml
- workflow pro nasazení aplikacevalidate.yaml
- workflow pro validaci kódu
Ověřte, že aplikace je nasazena do všech prostředí:
- Test:
https://vaše-uživatelské-jméno.github.io/váš-repozitář/test
- UAT:
https://vaše-uživatelské-jméno.github.io/váš-repozitář/uat
- Prod:
https://vaše-uživatelské-jméno.github.io/váš-repozitář/prod
CI/CD pipeline je již nakonfigurována, ale aktuálně neobsahuje spouštění testů. V aplikaci existuje záměrná chyba, kterou je potřeba odhalit a opravit pomocí automatických testů.
Vyzkoušejte si spuštění testů lokálně:
pnpm test
Testy odhalí chybu v kódu.
Pro zařazení kroku "Tests" do pipeline se můžete inspirovat akcí .github/actions/lint/action.yaml
.
K upravě využijte standardní GH flow, tedy vytvořte novou větev z dev
(fix/oprava-chyby), proveďte změny a vytvořte pull request.
Projít si kompletní vývojový cyklus podle GitHub Flow od oparavy chyby (vývoje nové funkce) až po její nasazení do produkce.
Předchozí úkol odhalil "chybu v kódu". Vyřešte chybu a aplikujte celý vývojový cyklus
Dokončete PR z fix/oprava-chyby
do dev
a slučte jej.
Projděte postupně celým deployment procesem:
- Vytvořte PR z
dev
dotest
- Po úspěšném testování vytvořte PR z
test
douat
- Po ověření v UAT prostředí vytvořte PR z
uat
domain
Ověřte, že vaše změny byly nasazeny do všech prostředí:
- Test:
https://vaše-uživatelské-jméno.github.io/váš-repozitář/test
- UAT:
https://vaše-uživatelské-jméno.github.io/váš-repozitář/uat
- Prod:
https://vaše-uživatelské-jméno.github.io/váš-repozitář/prod
Vyzkoušet si proces rychlé opravy kritické chyby v produkčním prostředí pomocí hotfix větve.
Simulujte situaci, kdy je v produkci objevena kritická chyba.
Pro potřeby cvičení považujme za kritickou chybu existenci tagu:
<p className="text-center w-full">
{import.meta.env.VITE_BUILD_FOR}
</p>
Ověřte, že oprava je nasazena na všech prostředích a všechny větve jsou synchronizované.
Implementovat automatické verzování na základě Conventional Commits a generování CHANGELOG.md souboru, který sleduje všechny změny v projektu.
- 📊 Konzistentní a automatizované verzování aplikace
- 📝 Přehledná historie změn pro vývojáře i uživatele
- ⏱️ Zefektivnění procesu vydávání nových verzí
- 🔍 Lepší dohledatelnost změn a jejich účelu
-
Nainstalujte nástroj
standard-version
do projektu:pnpm add -D standard-version
-
Přidejte skript do
package.json
:"scripts": { "release": "standard-version" }
-
Vytvořte konfigurační soubor
.versionrc.json
v kořenovém adresáři:{ "types": [ {"type": "feat", "section": "Features"}, {"type": "fix", "section": "Bug Fixes"}, {"type": "docs", "section": "Documentation"}, {"type": "style", "section": "Styles"}, {"type": "refactor", "section": "Code Refactoring"}, {"type": "perf", "section": "Performance Improvements"}, {"type": "test", "section": "Tests"}, {"type": "build", "section": "Build System"}, {"type": "ci", "section": "CI/CD"}, {"type": "chore", "hidden": true} ] }
-
Vytvořte GitHub Action pro automatické verzování (
.github/workflows/version.yaml
):name: Automatic Versioning on: push: branches: - main jobs: version: runs-on: ubuntu-latest if: "!startsWith(github.event.head_commit.message, 'chore(release):')" steps: - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup Environment uses: ./.github/actions/setup-env - name: Configure Git run: | git config --local user.email "action@github.com" git config --local user.name "GitHub Action" - name: Generate new version run: pnpm release - name: Push changes uses: ad-m/github-push-action@master with: github_token: ${{ secrets.GITHUB_TOKEN }} branch: ${{ github.ref }} tags: true
-
Vytvořte ukázkové commit messages podle konvence:
feat: add new feature
fix: resolve bug in component
docs: update README
-
Pushnete změny do
main
větve a pozorujte, jak se automaticky vytvoří nová verze a aktualizuje CHANGELOG.md.
Zlepšit viditelnost nasazení prostřednictvím automatických notifikací, které informují tým o úspěšném či neúspěšném nasazení do jednotlivých prostředí.
- 🔔 Lepší informovanost celého týmu o stavu nasazení
- ⚡ Rychlejší reakce na případné problémy
- 👁️ Zvýšení transparentnosti procesu nasazování
- 🤝 Usnadnění koordinace mezi vývojáři a testery
-
Upravte soubor
.github/workflows/deploy.yaml
a přidejte kroky pro notifikace:name: Deploy on: workflow_call: inputs: environment: required: true type: string description: "Target environment (test, uat, prod)" jobs: deploy: runs-on: ubuntu-latest environment: name: ${{ inputs.environment }} url: https://${{ github.repository_owner }}.github.io/${{ github.event.repository.name }}/${{ inputs.environment }} steps: - name: Checkout repository uses: actions/checkout@v4 - name: Setup Environment uses: ./.github/actions/setup-env - name: Build App uses: ./.github/actions/build with: environment: ${{ inputs.environment }} - name: Deploy to GitHub Pages uses: peaceiris/actions-gh-pages@v4 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./dist destination_dir: ${{ inputs.environment }} - name: Find Pull Request uses: jwalton/gh-find-current-pr@v1 id: findPr with: github-token: ${{ secrets.GITHUB_TOKEN }} - name: Add deployment comment to PR if: steps.findPr.outputs.pr uses: actions/github-script@v6 with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | const prNumber = ${{ steps.findPr.outputs.pr }} const env = '${{ inputs.environment }}' const url = 'https://${{ github.repository_owner }}.github.io/${{ github.event.repository.name }}/${{ inputs.environment }}' github.rest.issues.createComment({ owner: context.repo.owner, repo: context.repo.repo, issue_number: prNumber, body: `🚀 Deployment to **${env}** environment completed successfully!\n\n📝 **Deployment URL:** [${url}](${url})\n\n⏱️ Deployed at: ${new Date().toISOString()}` })
-
Vyzkoušejte nasazení:
- Vytvořte PR z
dev
dotest
- Sledujte, jak se automaticky přidá komentář s odkazem na nasazené prostředí
- Vytvořte PR z
Přidat do CI/CD pipeline automatické výkonnostní testy, které budou sledovat a vyhodnocovat výkon aplikace před nasazením do produkce.
- 📈 Včasné odhalení výkonnostních problémů
- 🛡️ Zabránění regresím ve výkonu aplikace
- 📊 Kontinuální sledování trendu výkonu
- 🏆 Objektivní metriky pro hodnocení kvality kódu
-
Nainstalujte nástroj Lighthouse CI pro měření výkonu:
pnpm add -D @lhci/cli
-
Vytvořte konfigurační soubor
lighthouserc.js
v kořenovém adresáři:module.exports = { ci: { collect: { staticDistDir: './dist', numberOfRuns: 3, }, upload: { target: 'temporary-public-storage', }, assert: { preset: 'lighthouse:recommended', assertions: { 'first-contentful-paint': ['warn', { maxNumericValue: 2000 }], 'interactive': ['error', { maxNumericValue: 3500 }], 'max-potential-fid': ['warn', { maxNumericValue: 100 }], 'cumulative-layout-shift': ['error', { maxNumericValue: 0.1 }], 'largest-contentful-paint': ['warn', { maxNumericValue: 2500 }], }, }, }, };
-
Přidejte skript do
package.json
:"scripts": { "lhci": "lhci autorun" }
-
Vytvořte novou action pro performance testy (
.github/actions/performance/action.yaml
):name: "Performance Tests" description: "Run Lighthouse performance tests" runs: using: "composite" steps: - name: Install Chrome run: | wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' sudo apt-get update sudo apt-get -y install google-chrome-stable shell: bash - name: Run Lighthouse CI run: pnpm lhci shell: bash
-
Přidejte kroky pro testování výkonu do workflow pro deploy (
.github/workflows/deploy.yaml
):# ...předchozí kroky... - name: Build App uses: ./.github/actions/build with: environment: ${{ inputs.environment }} - name: Run Performance Tests if: inputs.environment == 'prod' uses: ./.github/actions/performance - name: Deploy to GitHub Pages uses: peaceiris/actions-gh-pages@v4 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./dist destination_dir: ${{ inputs.environment }} # ...další kroky...
-
Vytvořte PR z
uat
domain
a sledujte, jak se automaticky spustí výkonnostní testy před nasazením do produkce. -
Analyzujte výsledky testů, které jsou k dispozici v logu GitHub Actions a na dočasném úložišti Lighthouse CI.
-
Pro pokročilou implementaci můžete přidat ukládání historických dat o výkonu pomocí Lighthouse CI serveru nebo jiného nástroje pro ukládání dat.