Ruby: Wdrażanie z GitHub Actions

Jak wdrożyć kod Ruby za pomocą GitHub Actions

👋 Witamy w dokumentacji Stackhero!

Stackhero oferuje gotowe do użycia rozwiązanie Ruby cloud, które zapewnia wiele korzyści, w tym:

  • Wdrażaj swoją aplikację w kilka sekund za pomocą prostego git push.
  • Używaj własnej nazwy domeny i korzystaj z automatycznej konfiguracji certyfikatów HTTPS dla zwiększonego bezpieczeństwa.
  • Ciesz się spokojem dzięki automatycznym kopiom zapasowym, aktualizacjom jednym kliknięciem oraz prostemu, przejrzystemu i przewidywalnemu cennikowi.
  • Uzyskaj optymalną wydajność i solidne zabezpieczenia dzięki prywatnej i dedykowanej VM.

Oszczędzaj czas i upraszczaj sobie życie: wypróbowanie rozwiązania Ruby cloud hosting Stackhero zajmuje tylko 5 minut!

GitHub Actions umożliwia automatyzację zadań, takich jak wdrażanie kodu Ruby na serwery produkcyjne.

W tym przewodniku dowiesz się, jak bezpiecznie i niezawodnie używać GitHub Actions do wdrażania kodu Ruby w środowiskach staging i produkcyjnym.

Aby to osiągnąć, będziesz utrzymywać dwie gałęzie: staging i production, gdzie kod wypchnięty do tych gałęzi będzie automatycznie wdrażany na odpowiadającą instancję Stackhero.

Posiadanie instancji staging nie jest obowiązkowe. Możesz postępować zgodnie z tym przewodnikiem, mając tylko jedną instancję produkcyjną. Jednak aby zapewnić płynne wdrożenia i pełną pewność podczas wdrażania do produkcji, zdecydowanie zaleca się utrzymywanie zarówno instancji staging, jak i produkcyjnej. Ta praktyka jest standardem branżowym i dobrą praktyką, pomagającą uniknąć wielu problemów.

Aby kontynuować ten przewodnik, potrzebujesz konta GitHub z repozytorium hostującym Twój kod.

Przejdź do swojego panelu Stackhero i utwórz dwie usługi Stackhero, jedną dla staging i jedną dla produkcji. Aby uniknąć zamieszania, zalecamy zmianę nazw tych usług na "Production" i "Staging".

Nie masz jeszcze konta Stackhero? Możesz je utworzyć w zaledwie dwie minuty, za darmo, a następnie utworzyć swoje usługi chmurowe Ruby za pomocą kilku kliknięć.

Przykład usług produkcyjnych i stagingPrzykład usług produkcyjnych i staging

Klucze SSH dadzą GitHub Actions prawo do połączenia się z Twoją usługą Ruby w celu wdrożenia kodu. Jest to kluczowy element zabezpieczania usług Stackhero.

Na swoim komputerze utwórz nowe klucze SSH:

ssh-keygen -C "" -f /tmp/ssh_key -N ""

Pobierz właśnie wygenerowany klucz publiczny:

cat /tmp/ssh_key.pub

W panelu Stackhero wybierz swoją usługę Ruby "production" i kliknij przycisk "Configure". Pobierz ustawienia usługiPobierz ustawienia usługi

Następnie:

  1. W SSH public keys, kliknij Add a public key.
  2. W Description, ustaw GitHub Action.
  3. W Key, wklej zawartość klucza publicznego, który masz na swoim komputerze.

Pobierz ustawienia usługiPobierz ustawienia usługi

Przejdź na stronę GitHub i wybierz swój projekt.

Kliknij Settings/Environments, a następnie New environment. Konfiguracja środowisk GitHubKonfiguracja środowisk GitHub

W Name, ustaw "production" i potwierdź. Ustawianie środowiskaUstawianie środowiska

Kliknij przycisk No restriction i wybierz Selected branches and tags. Ustawianie ograniczeń środowiskaUstawianie ograniczeń środowiska

Kliknij Add deployment branch or tag rule, wpisz "production" w Name pattern, i kliknij Add rule. Ustawianie gałęzi środowiskaUstawianie gałęzi środowiska Ustawianie gałęzi środowiskaUstawianie gałęzi środowiska

W Environment secrets, kliknij Add secret. Dodaj sekretDodaj sekret

Pobierz wcześniej wygenerowany klucz prywatny na swoim komputerze:

cat /tmp/ssh_key

W Name, wpisz STACKHERO_SSH_PRIVATE_KEY. W Value, wklej swój klucz prywatny. Ustawianie sekretu klucza prywatnego SSHUstawianie sekretu klucza prywatnego SSH

W Environment variables, kliknij Add variable. Ustawianie zmiennychUstawianie zmiennych

W Name, wpisz STACKHERO_ENDPOINT. W Value, wklej endpoint swojej usługi Ruby. Znajdziesz go w swoim panelu Stackhero. Ustawianie zmiennej endpointuUstawianie zmiennej endpointu

Jeśli dostosowałeś nazwę domeny swojej usługi, użyj wersji dostosowanej zamiast xxxxxx.stackhero-network.com.

Ponieważ nie będziesz już potrzebować wcześniej wygenerowanych kluczy SSH, możesz je usunąć z komputera ze względów bezpieczeństwa:

rm /tmp/ssh_key /tmp/ssh_key.pub

W swoim repozytorium Git, na swoim komputerze, utwórz katalog o nazwie .github/workflows. W tym katalogu utwórz plik o nazwie deploy-to-stackhero.yml.

# Plik: .github/workflows/deploy-to-stackhero.yml

name: Deploy to Stackhero
run-name: Deploy branch "${{ github.ref_name }}" to Stackhero

on:
  push:
    # Lista gałęzi, które uruchomią akcję wdrożenia po git push.
    # Nie zapomnij utworzyć środowiska odpowiadającego nazwie gałęzi w GitHub (w "Settings"/"Environments").
    # Następnie dodaj odpowiedni sekret "STACKHERO_SSH_PRIVATE_KEY" i zmienną "STACKHERO_ENDPOINT" w tym środowisku.
    branches: [ "production", "staging" ]

jobs:
  Deploy:
    environment: ${{ github.ref_name }}
    runs-on: ubuntu-latest
    steps:
    - uses: stackhero-io/github-actions-deploy-to-stackhero@v1
      with:
        # Sekret "STACKHERO_SSH_PRIVATE_KEY" i zmienna "STACKHERO_ENDPOINT" powinny być zdefiniowane w odpowiadającym środowisku gałęzi na GitHub pod "Settings"/"Environments".
        ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
        endpoint: ${{ vars.STACKHERO_ENDPOINT }}

Zatwierdź swoje zmiany:

git add -A .
git commit -m "Add GitHub Actions to deploy to Stackhero"

Następnie utwórz gałąź produkcyjną:

git checkout -b production

Na koniec wypchnij swoje zmiany do GitHub:

git push --set-upstream origin production

Ta końcowa komenda git push wypchnie kod z Twojego komputera do gałęzi production na GitHub. GitHub Actions automatycznie uruchomi się i wdroży ten kod na Twoją instancję Stackhero.

Aby sprawdzić tę akcję, przejdź na stronę GitHub, wybierz swój projekt i kliknij Actions. GitHub Actions, które wdrożyły do produkcjiGitHub Actions, które wdrożyły do produkcji

Gratulacje, teraz możesz automatycznie wdrażać swój kod do produkcji za pomocą GitHub Actions!

Tworzenie środowiska staging jest podobne do konfiguracji środowiska produkcyjnego. Aby je utworzyć, powtórz kroki z poprzednich sekcji tego przewodnika, po prostu zastępując production staging.

Następnie utwórz gałąź staging:

git checkout -b staging

Na koniec wypchnij swoje zmiany do GitHub:

git push --set-upstream origin staging

GitHub Actions automatycznie wdroży Twoją gałąź staging na instancję Ruby przeznaczoną do staging.

Dobrą praktyką jest ochrona gałęzi production i staging, aby zapobiec bezpośrednim pushom do nich. W takim przypadku należy utworzyć pull request dla gałęzi staging, a następnie scalić go przez osoby mające prawa do pushowania kodu do staging. Po zatwierdzeniu na platformie staging, pull request może zostać scalony do gałęzi production przez te same osoby mające prawa.

To podejście zapewnia bezpieczeństwo (tylko upoważnione osoby mogą pushować do staging i production) oraz niezawodność (nowe funkcje są testowane na platformie staging przed wypchnięciem do gałęzi production).