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.
Tworzenie usług 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 staging
Konfiguracja kluczy SSH
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 ""
Ustaw klucz publiczny
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ługi
Następnie:
- W sekcji
SSH public keyskliknijAdd a public key. - W polu
DescriptionwpiszGitHub Action. - W polu
Keywklej zawartość klucza publicznego ze swojego komputera.
Ustawienia usługi
Ustaw klucz prywatny
Teraz przejdź na stronę GitHub i otwórz swój projekt.
Przejdź do Settings > Environments, a następnie kliknij New environment.
Konfiguracja środowisk GitHub
Nazwij środowisko "production" i zapisz je.
Ustawianie środowiska
Kliknij przycisk No restriction i wybierz Selected branches and tags.
Ustawianie ograniczeń środowiska
Kliknij Add deployment branch or tag rule, wpisz "production" jako wzorzec i dodaj regułę.
Ustawianie gałęzi środowiska
Ustawianie gałęzi środowiska
Aby bezpiecznie przechowywać klucz prywatny SSH, przejdź do Environment secrets i kliknij Add secret.
Dodawanie 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 SSH
Następnie dodaj endpoint swojej usługi Ruby jako zmienną środowiskową. Kliknij Add variable w sekcji Environment variables.
Ustawianie zmiennych
W polu Name wpisz STACKHERO_ENDPOINT. W polu Value wklej endpoint swojej usługi Ruby, który znajdziesz w panelu Stackhero.
Ustawianie 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.
Usuń wygenerowane klucze
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
Konfiguracja workflow GitHub Actions
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ę
Gratulacje, właśnie skonfigurowałeś ciągłe wdrażanie na produkcję z GitHub Actions.
Tworzenie środowiska staging
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.
Dalsze kroki
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.