Wdrażanie CI/CD z GitHub Actions: Automatyczna synchronizacja z AWS S3

Czego potrzebujesz na start?

Przed rozpoczęciem konfiguracji upewnij się, że posiadasz:

  • Konto AWS z dostępem do zarządzania bucketami S3
  • Utworzony bucket S3, który będzie celem synchronizacji
  • Klucze dostępowe AWS (AWS_ACCESS_KEY_ID i AWS_SECRET_ACCESS_KEY)
  • Repozytorium GitHub z włączoną funkcją GitHub Actions

Krok 1: Przygotowanie bucketa S3

Najpierw musisz utworzyć i odpowiednio skonfigurować bucket S3:

  1. Zaloguj się do Konsoli AWS
  2. Przejdź do usługi S3 i utwórz nowy bucket (np. „moja-strona”)
  3. Skonfiguruj ustawienia bucketa:
    • Jeśli publikujesz statyczną stronę, pamiętaj o włączeniu publicznego dostępu
    • Sprawdź, czy ustawienia bucketa nie blokują publicznego odczytu, jeśli jest to wymagane

Krok 2: Konfiguracja poświadczeń AWS

Aby GitHub Actions mogło komunikować się z AWS, potrzebujesz odpowiednich poświadczeń:

  1. W konsoli AWS przejdź do IAM (Identity and Access Management)
  2. Utwórz nowego użytkownika lub wykorzystaj istniejącego z odpowiednimi uprawnieniami do S3
  3. Wygeneruj klucze dostępu (AWS_ACCESS_KEY_ID i AWS_SECRET_ACCESS_KEY)
  4. W swoim repozytorium GitHub przejdź do Settings > Secrets and variables > Actions
  5. Dodaj następujące sekrety:
    • AWS_ACCESS_KEY_ID
    • AWS_SECRET_ACCESS_KEY
    • AWS_S3_BUCKET (nazwa Twojego bucketa)
    • Opcjonalnie: AWS_REGION (np. us-east-1)

Uwaga: Zawsze przechowuj poświadczenia jako zaszyfrowane sekrety, nigdy nie umieszczaj ich bezpośrednio w kodzie!

Krok 3: Utworzenie workflow GitHub Actions

Teraz musimy stworzyć plik konfiguracyjny workflow:

  1. W repozytorium utwórz katalog .github/workflows (jeśli jeszcze nie istnieje)
  2. Utwórz w nim plik s3-sync.yml

Krok 4: Konfiguracja workflow

Poniżej znajduje się przykładowy plik konfiguracyjny, który synchronizuje zawartość katalogu public z bucketem S3:

name: Upload Website

# Workflow uruchamiany przy pushu do brancha master
on:
  push:
    branches:
      - master

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
# Krok 1: Pobranie repozytorium
      - name: Checkout repozytorium
        uses: actions/checkout@v3

# Krok 2: Synchronizacja z S3
      - name: Sync to S3
        uses: jakejarvis/s3-sync-action@v0.5.1
        with:
# Dodatkowe flagi dla polecenia aws s3 sync
          args: --acl public-read --follow-symlinks --delete --exclude '.git/*'
        env:
          AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          AWS_REGION: 'eu-west-1'# Opcjonalnie; domyślnie "us-east-1"
          SOURCE_DIR: 'public'# Opcjonalnie; domyślnie synchronizowane jest całe repo

Warto wyjaśnić użyte flagi:

  • -acl public-read – ustawia publiczny dostęp do przesyłanych plików
  • -follow-symlinks – zapewnia poprawne przetwarzanie dowiązań symbolicznych
  • -delete – usuwa z bucketa pliki, które nie istnieją już w repozytorium
  • -exclude '.git/*' – wyklucza katalog .git z synchronizacji

Krok 5: Testowanie workflow

Po skonfigurowaniu:

  1. Zatwierdź plik s3-sync.yml w repozytorium (commit & push)
  2. Po wypchnięciu zmian do brancha master, workflow uruchomi się automatycznie
  3. Sprawdź wynik działania w zakładce Actions swojego repozytorium

Wskazówki i dodatkowe opcje

  • Dostosowywanie synchronizacji: Możesz przekazać dowolne flagi obsługiwane przez aws s3 sync poprzez parametr args
  • Różne środowiska: Skonfiguruj osobne workflow dla różnych gałęzi (np. development, staging, produkcja)
  • Rozwiązywanie problemów: W przypadku błędów, analizuj logi w zakładce Actions

Podsumowanie

Dzięki GitHub Actions możesz w prosty sposób zautomatyzować wdrażanie zawartości repozytorium do AWS S3. Po poprawnej konfiguracji, każda zmiana wypchana do wskazanego brancha spowoduje automatyczne zaktualizowanie zawartości bucketa S3.

Wykorzystana akcja pochodzi z GitHub Marketplace: S3 Sync Action.

Scroll to Top