CI/CD Pipeline s GitHub Actions: Kompletní průvodce nastavením
CI/CD Pipeline s GitHub Actions: Kompletní průvodce nastavením
V moderním vývoji softwaru je ruční testování kódu a spouštění skriptů pro nasazení po každé změně úzkým hrdlem, které zpomaluje dodávku a vnáší lidské chyby. CI/CD pipeline celý tento proces automatizuje: od testování kódu až po jeho nasazení do produkce. Tento průvodce vás naučí nastavit CI/CD pipeline pomocí GitHub Actions – výkonné a integrované automatizační platformy – s využitím praktických příkladů v YAML, abyste mohli dodávat kód rychleji a spolehlivěji.
Co se naučíte
Na konci tohoto průvodce pochopíte základní koncepty kontinuální integrace a kontinuálního nasazování (CI/CD) a budete schopni implementovat vícefázový pipeline pomocí GitHub Actions. Naučíte se psát pracovní postupy pro automatické testování, sestavování Docker obrazů a nasazování aplikací. Získáte hotový funkční kód v YAML pro testování, sestavování a nasazování vlastních projektů – ať už se jedná o aplikace v Pythonu, Node.js nebo kontejnerizované aplikace.
Základy GitHub Actions
GitHub Actions je automatizační platforma řízená událostmi, která je přímo integrována do repozitářů GitHub. Umožňuje spouštět automatizované pracovní postupy iniciované událostmi jako push, pull_request nebo release. Pracovní postup je definován v YAML souboru umístěném v adresáři .github/workflows/ a skládá se z jedné nebo více úloh, které se standardně spouštějí paralelně, přičemž každá obsahuje řadu kroků.
Klíčové komponenty
- Událost (
on): Spouštěč, který iniciuje pracovní postup, napříkladpushdo konkrétní větve nebopull_request. - Spouštěč (
runs-on): Stroj, na kterém se úloha provádí.ubuntu-latestje nejběžnější a doporučovaná volba díky výkonu a široké dostupnosti softwaru. - Kroky: Jednotlivé úkoly v rámci úlohy. Mohou to být shell skripty (
run) nebo hotové akce (uses) z Marketplace GitHub. - Akce: Znovupoužitelné bloky kódu, například
actions/checkout@v4pro klonování repozitáře neboactions/setup-node@v4pro instalaci Node.js.
Základní pracovní postup pro začátek
Nejjednodušší pracovní postup lze spouštět při každém pushi. Vytvořte soubor .github/workflows/main.yml pro provedení základního příkazu "Hello World".
name: example
on: push
jobs:
greeting:
runs-on: ubuntu-latest
steps:
- run: echo "Hello, CI/CD World!"
Po uložení a odeslání tohoto souboru do repozitáře si můžete výsledek provedení úlohy zobrazit na záložce "Actions" vašeho repozitáře GitHub.
Vytvoření komplexního CI pipeline
Část "CI" pipeline zaručuje, že změny kódu jsou automaticky testovány a ověřovány před sloučením. Obvykle to zahrnuje lintování, kontrolu typů a spouštění unit testů.
Soubor CI pracovního postupu
Vytvořte .github/workflows/ci.yml. Tento pracovní postup se spouští při každém push a pull_request do větve main. Níže uvedený příklad ukazuje kompletní pipeline pro projekt v Node.js, ale vzor je použitelný i pro jiné jazyky, například Python s actions/setup-python.
name: CI Pipeline
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- run: npm ci
- run: npm run lint
test:
runs-on: ubuntu-latest
needs: lint
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- run: npm ci
- run: npm test
build:
runs-on: ubuntu-latest
needs: [lint, test]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- run: npm ci
- run: npm run build
Vysvětlení klíčových funkcí
- Kešování závislostí: Volba
cache: 'npm'vactions/setup-nodevýrazně urychluje pracovní postup opětovným použitím závislostí z předchozích spuštění. - Závislosti úloh: Klíčové slovo
needsurčuje pořadí provádění. Například úlohabuildse spouští pouze v případě úspěšného provedení úlohlintatest. To zabraňuje plýtvání časem na sestavování rozbitého kódu. - Proměnné prostředí: Pro služby jako databáze lze definovat proměnné prostředí. Například úloha
testmůže spustit kontejner služby PostgreSQL a použítenvpro připojení k němu.
Pokročilé scénáře: kontejnerizovaná a víceprostředí nasazení
Pro moderní aplikace pipeline často zahrnuje sestavování obrazů kontejnerů a jejich nasazování. Následující tabulka popisuje běžné strategie nasazení a jejich spouštěče.
Srovnání spouštěčů nasazení
| Strategie | Spouštěče nasazení | Pro co je nejvhodnější |
|---|---|---|
| Na základě větví | push do main |
Kontinuální nasazování nejnovějšího vývojového kódu. |
| Na základě tagů | push nového tagu (např. v1.0.0) |
Vydání stabilního, verzovaného softwaru do produkce. |
| Na základě release | Publikování release na GitHub |
Oficiální vydání produktu, která také generují poznámky k vydání. |
Příklad: nasazení Docker kontejneru pomocí CI/CD pracovního postupu
Tento komplexní příklad ukazuje pipeline, který testuje Python aplikaci, sestavuje Docker obraz a odesílá jej do registru. Používá sérii oficiálních Docker akcí pro bezpečné a vysoce výkonné sestavování.
Vytvořte .github/workflows/deploy.yml:
name: Complete CI/CD Pipeline
on:
push:
branches: [ main ]
release:
types: [published]
env:
DOCKER_HUB_USERNAME: ${{ secrets.DOCKER_HUB_USERNAME }}
DOCKER_HUB_TOKEN: ${{ secrets.DOCKER_HUB_TOKEN }}
IMAGE_NAME: my-app
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v4
with:
python-version: '3.9'
- run: pip install -r requirements.txt
- run: pytest
build-and-push:
runs-on: ubuntu-latest
needs: test
if: github.event_name == 'push' || github.event_name == 'release'
steps:
- uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ env.DOCKER_HUB_USERNAME }}
password: ${{ env.DOCKER_HUB_TOKEN }}
- name: Extract metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.DOCKER_HUB_USERNAME }}/${{ env.IMAGE_NAME }}
tags: |
type=ref,event=branch
type=semver,pattern={{version}}
type=raw,value=latest,enable={{is_default_branch}}
- name: Build and push
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
deploy:
runs-on: ubuntu-latest
needs: build-and-push
if: github.event_name == 'release'
steps:
- name: Execute Deployment Script
run: |
echo "Deploying image ${{ env.DOCKER_HUB_USERNAME }}/${{ env.IMAGE_NAME }}:${{ github.event.release.tag_name }}"
Důležité: správa tajemství
Aby výše uvedený pracovní postup fungoval, je nutné bezpečně ukládat přihlašovací údaje v repozitáři GitHub. Přejděte do Settings > Secrets and variables > Actions a přidejte následující tajemství:
DOCKER_HUB_USERNAME: Vaše uživatelské jméno Docker Hub.DOCKER_HUB_TOKEN: Osobní přístupový token Docker Hub s právy pro čtení a zápis.
⚠️ Bezpečnostní varování: Nikdy nezapisujte hesla, tokeny nebo jiné citlivé údaje přímo do YAML souborů. Vždy používejte tajemství GitHub, která jsou šifrována a dostupná pouze během běhu pracovního postupu.
Často kladené otázky
Jaké jsou první kroky pro nastavení CI/CD pipeline s GitHub Actions?
Pro začátek vytvořte adresář .github/workflows ve vašem repozitáři. Uvnitř vytvořte YAML soubor (např. ci.yml) a definujte name, on (spouštěcí události jako push) a jobs (úlohy k provedení). Uložte a odešlete tento soubor, abyste spustili první automatizovaný pracovní postup.
Mohu použít GitHub Actions pro spouštění testů v pull request?
Ano, testování v pull request je základní případ použití. Nastavením spouštěče on na pull_request pro větev main se pracovní postup automaticky spustí při každém novém pull request, čímž zajistí kvalitu kódu před sloučením.
Jak sestavit a odeslat Docker obraz pomocí pracovního postupu GitHub Actions?
Můžete použít oficiální složené akce jako docker/login-action, docker/setup-buildx-action a docker/build-push-action. Ty zjednodušují proces, automaticky zpracovávají autentizaci a zahrnují funkce jako kešování sestavení a vícepatrová sestavení.
Lze nasazovat na GitHub Pages pomocí GitHub Actions?
Ano. Můžete použít komunitní akci JamesIves/github-pages-deploy-action. Nakonfigurujte ji zadáním složky s vaším sestaveným webem a provede operace git pro uložení a odeslání změn do větve gh-pages.
Jaký je rozdíl mezi spouštěči událostí push a release?
Událost push spouští pracovní postup při odeslání kódu do zadané větve. Událost release se spouští při publikování release na GitHub. push se obvykle používá pro CI a nasazení do stagingu, zatímco release se často používá pro nasazení do produkce.
Zdroje
- Set up GitHub Actions CI/CD pipeline · Issue #176 (Praktické příklady YAML pro CI, E2E a nasazení)
- DevOps: Set up GitHub Actions CI/CD pipeline · Issue #19 (Ukazuje lintování, kontrolu typů a ověření sestavení)
- GitHub - kamrun111/GitHubActionTest (Jednoduchý příklad CI/CD v Pythonu pro začátečníky)
- @jamesives/github-pages-deploy-action (Dokumentace k nasazení na GitHub Pages)
- GitHub - CarlosQuintero8/cicdsimulation (Ukazuje vícefázový pipeline s testováním, sestavováním a nasazením na GitHub Pages)
- GitHub - anuragstark/Py-app-CI-CD-Pipeline- (Komplexní průvodce zahrnující nasazení s Docker a Minikube)
- Automated CI/CD with GitHub Actions, starting from scratch (Krok za krokem průvodce vytvářením CI/CD pracovních postupů)
- Extend App with GitHub Actions · AccelByte Documentation (Příklad nasazení iniciovaného událostí release)
- Configure CI/CD for your C++ application · Docker Docs (Ukazuje nastavení GitHub Actions s Docker Hub)
- Hello CI World · HSF Training (Základní tutoriál k vytvoření a spuštění prvního pracovního postupu)
— Editorial Team
Zatím žádné komentáře.