Zpět na domů

Jak nastavit CI/CD pipeline s GitHub Actions – Průvodce

Tento komplexní průvodce vysvětluje, jak nastavit CI/CD pipeline s GitHub Actions, pokrývající vše od základních workflow po pokročilá Docker nasazení. Naučíte se automatizovat testování, sestavování a nasazení s praktickými příklady YAML, závislostmi úloh, strategiemi ukládání do mezipaměti a bezpečnou správou tajemství.

CI/CD pipeline s GitHub Actions: Kompletní nastavení
Advertisement 728x90

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.

Google AdInline article slot

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říklad push do konkrétní větve nebo pull_request.
  • Spouštěč (runs-on): Stroj, na kterém se úloha provádí. ubuntu-latest je 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@v4 pro klonování repozitáře nebo actions/setup-node@v4 pro 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.

Google AdInline article slot

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í

  1. Kešování závislostí: Volba cache: 'npm' v actions/setup-node výrazně urychluje pracovní postup opětovným použitím závislostí z předchozích spuštění.
  2. Závislosti úloh: Klíčové slovo needs určuje pořadí provádění. Například úloha build se spouští pouze v případě úspěšného provedení úloh lint a test. To zabraňuje plýtvání časem na sestavování rozbitého kódu.
  3. Proměnné prostředí: Pro služby jako databáze lze definovat proměnné prostředí. Například úloha test může spustit kontejner služby PostgreSQL a použít env pro 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.

Google AdInline article slot

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í:

  1. DOCKER_HUB_USERNAME: Vaše uživatelské jméno Docker Hub.
  2. 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

— Editorial Team

Advertisement 728x90

Číst dál