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.
Tworzenie usług Ruby
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 staging
Konfiguracja kluczy SSH
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 ""
Ustaw klucz publiczny
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ługi
Następnie:
- W
SSH public keys, kliknijAdd a public key. - W
Description, ustawGitHub Action. - W
Key, wklej zawartość klucza publicznego, który masz na swoim komputerze.
Pobierz ustawienia usługi
Ustaw klucz prywatny
Przejdź na stronę GitHub i wybierz swój projekt.
Kliknij Settings/Environments, a następnie New environment.
Konfiguracja środowisk GitHub
W Name, ustaw "production" i potwierdź.
Ustawianie środowiska
Kliknij przycisk No restriction i wybierz Selected branches and tags.
Ustawianie ograniczeń środowiska
Kliknij Add deployment branch or tag rule, wpisz "production" w Name pattern, i kliknij Add rule.
Ustawianie gałęzi środowiska
Ustawianie gałęzi środowiska
W Environment secrets, kliknij Add secret.
Dodaj 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 SSH
W Environment variables, kliknij Add variable.
Ustawianie zmiennych
W Name, wpisz STACKHERO_ENDPOINT. W Value, wklej endpoint swojej usługi Ruby. Znajdziesz go w swoim panelu Stackhero.
Ustawianie zmiennej endpointu
Jeśli dostosowałeś nazwę domeny swojej usługi, użyj wersji dostosowanej zamiast xxxxxx.stackhero-network.com.
Usuń wygenerowane klucze
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
Konfiguracja workflow GitHub Actions
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 produkcji
Gratulacje, teraz możesz automatycznie wdrażać swój kod do produkcji za pomocą GitHub Actions!
Tworzenie środowiska staging
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.
Idąc dalej
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).