Ruby: Wdrażanie za pomocą GitHub Actions

Jak wdrożyć swój kod Ruby przy użyciu 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 łatwą automatyzację zadań, takich jak wdrażanie kodu Ruby na serwerach produkcyjnych. Nie są wymagane żadne ręczne kroki.

W tym przewodniku dowiesz się, jak bezpiecznie i niezawodnie skonfigurować GitHub Actions, aby automatycznie wdrażać kod Ruby zarówno na środowiska staging, jak i produkcyjne. Takie podejście zapewnia spójność wdrożeń i minimalizuje ryzyko błędów.

Na początek będziesz pracować z dwiema gałęziami w swoim repozytorium GitHub: staging i production. Za każdym razem, gdy wypchniesz kod do jednej z tych gałęzi, zmiany zostaną automatycznie wdrożone na odpowiadającej im instancji Stackhero.

Posiadanie instancji staging jest opcjonalne. Możesz skorzystać z tego przewodnika mając tylko środowisko produkcyjne, jednak zdecydowanie zaleca się skonfigurowanie zarówno środowiska staging, jak i produkcyjnego. Jest to uznawane za najlepszą praktykę branżową i pozwala wykryć problemy zanim trafią do użytkowników produkcyjnych.

Przed rozpoczęciem upewnij się, że masz konto GitHub oraz repozytorium z kodem Ruby.

Przejdź do swojego panelu Stackhero, aby utworzyć dwie usługi Ruby: jedną dla staging, drugą dla produkcji. Dla przejrzystości warto zmienić ich nazwy na "Production" i "Staging".

Nie masz jeszcze konta Stackhero? Możesz zarejestrować się za darmo w kilka minut, a następnie utworzyć swoje usługi Ruby w chmurze kilkoma kliknięciami.

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

Aby umożliwić GitHub Actions wdrażanie kodu, musisz skonfigurować klucze SSH. Dzięki temu tylko autoryzowane akcje będą mogły łączyć się z Twoimi usługami Stackhero, co zapewnia bezpieczeństwo wdrożeń.

Nową parę kluczy SSH możesz wygenerować na swoim komputerze za pomocą:

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

Następnie pobierz wygenerowany klucz publiczny:

cat /tmp/ssh_key.pub

W panelu Stackhero wybierz usługę Ruby "production" i kliknij przycisk "Configure". Ustawienia usługiUstawienia usługi

Następnie:

  1. W sekcji SSH public keys kliknij Add a public key.
  2. W polu Description wpisz GitHub Action.
  3. W polu Key wklej zawartość klucza publicznego ze swojego komputera.

Ustawienia usługiUstawienia usługi

Teraz przejdź na stronę GitHub i otwórz swój projekt.

Przejdź do Settings > Environments, a następnie kliknij New environment. Konfiguracja środowisk GitHubKonfiguracja środowisk GitHub

Nazwij środowisko "production" i zapisz je. 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" jako wzorzec i dodaj regułę. Ustawianie gałęzi środowiskaUstawianie gałęzi środowiska Ustawianie gałęzi środowiskaUstawianie gałęzi środowiska

Aby bezpiecznie przechowywać klucz prywatny SSH, przejdź do Environment secrets i kliknij Add secret. Dodawanie sekretuDodawanie sekretu

Pobierz swój klucz prywatny z komputera:

cat /tmp/ssh_key

W polu Name wpisz STACKHERO_SSH_PRIVATE_KEY. W polu Value wklej zawartość swojego klucza prywatnego. Ustawianie sekretu klucza prywatnego SSHUstawianie sekretu klucza prywatnego SSH

Następnie dodaj endpoint swojej usługi Ruby jako zmienną środowiskową. Kliknij Add variable w sekcji Environment variables. Ustawianie zmiennychUstawianie zmiennych

W polu Name wpisz STACKHERO_ENDPOINT. W polu Value wklej endpoint swojej usługi Ruby, który znajdziesz w panelu Stackhero. Ustawianie zmiennej endpointUstawianie zmiennej endpoint

Jeśli ustawiłeś niestandardową nazwę domeny dla swojej usługi, pamiętaj, aby użyć tej domeny zamiast <XXXXXX>.stackhero-network.com.

Po skonfigurowaniu kluczy w Stackhero i GitHub możesz je usunąć ze swojego komputera dla bezpieczeństwa.

rm /tmp/ssh_key /tmp/ssh_key.pub

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

# File: .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 wywołają akcję wdrożenia po wykonaniu 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" oraz 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" oraz zmienna "STACKHERO_ENDPOINT" powinny być zdefiniowane w odpowiednim środowisku gałęzi na GitHub w "Settings"/"Environments".
        ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
        endpoint: ${{ vars.STACKHERO_ENDPOINT }}

Po utworzeniu pliku workflow możesz zatwierdzić 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 końcu wypchnij zmiany do GitHub.

git push --set-upstream origin production

Ostatni git push prześle Twój kod do gałęzi production w GitHub. GitHub Actions automatycznie uruchomi workflow i wdroży Twój kod na instancji Stackhero.

Aby zobaczyć workflow w akcji, odwiedź stronę swojego projektu na GitHub i kliknij Actions. GitHub Actions, które wdrożyły na produkcjęGitHub Actions, które wdrożyły na produkcję

Gratulacje, właśnie skonfigurowałeś ciągłe wdrażanie na produkcję z GitHub Actions.

Konfiguracja środowiska staging przebiega dokładnie tak samo jak dla produkcji. Wystarczy powtórzyć powyższe kroki, zamieniając production na staging tam, gdzie to konieczne.

Po skonfigurowaniu środowiska staging możesz utworzyć gałąź staging.

git checkout -b staging

Wypchnij gałąź staging do GitHub.

git push --set-upstream origin staging

GitHub Actions będzie teraz automatycznie wdrażać Twoją gałąź staging na wyznaczonej instancji Ruby Stackhero dla staging.

Aby zwiększyć bezpieczeństwo wdrożeń, warto chronić gałęzie production i staging. Oznacza to, że bezpośrednie pushowanie jest ograniczone, a zmiany muszą przechodzić przez pull request. Członkowie zespołu z odpowiednimi uprawnieniami mogą przeglądać i zatwierdzać pull requesty do staging, a gdy wszystko jest gotowe, zmiany mogą być scalone do production w ten sam sposób.

Stosując ten workflow, zwiększasz bezpieczeństwo (tylko upoważnieni użytkownicy mogą wdrażać na staging i production) oraz niezawodność (wszystkie nowe funkcje są testowane na staging przed wdrożeniem na produkcję). Dzięki temu Twoje wdrożenia są płynne, a środowisko produkcyjne pozostaje stabilne.