Ruby: Bereitstellung mit GitHub Actions

Wie Sie Ihren Ruby-Code mit GitHub Actions bereitstellen

👋 Willkommen bei der Stackhero-Dokumentation!

Stackhero bietet eine einsatzbereite Ruby Cloud Lösung, die zahlreiche Vorteile bietet, darunter:

  • Deployen Sie Ihre Anwendung in Sekundenschnelle mit einem einfachen git push.
  • Verwenden Sie Ihren eigenen Domainnamen und profitieren Sie von der automatischen Konfiguration von HTTPS-Zertifikaten für erhöhte Sicherheit.
  • Genießen Sie beruhigende automatische Backups, Ein-Klick-Updates und eine einfache, transparente und vorhersehbare Preisgestaltung.
  • Erhalten Sie optimale Performance und robuste Sicherheit dank einer privaten und dedizierten VM.

Sparen Sie Zeit und vereinfachen Sie Ihr Leben: Es dauert nur 5 Minuten, um die Ruby Cloud Hosting Lösung von Stackhero auszuprobieren!

GitHub Actions ermöglicht es Ihnen, Aufgaben wie das Bereitstellen Ihres Ruby-Codes auf Produktionsservern zu automatisieren.

In diesem Leitfaden lernen Sie, wie Sie GitHub Actions sicher und zuverlässig nutzen, um Ihren Ruby-Code in Staging- und Produktionsumgebungen bereitzustellen.

Dazu werden Sie zwei Branches pflegen: staging und production, wobei der Code, der in diese Branches gepusht wird, automatisch auf der entsprechenden Stackhero-Instanz bereitgestellt wird.

Eine Staging-Instanz ist nicht zwingend erforderlich. Sie können diesem Leitfaden folgen und nur eine Produktionsinstanz haben. Um jedoch reibungslose Bereitstellungen zu gewährleisten und bei der Bereitstellung in der Produktion voll Vertrauen zu haben, wird dringend empfohlen, sowohl eine Staging- als auch eine Produktionsinstanz zu pflegen. Diese Praxis ist ein Industriestandard und eine gute Praxis, die Ihnen hilft, zahlreiche Probleme zu vermeiden.

Um diesem Leitfaden zu folgen, benötigen Sie ein GitHub-Konto mit einem Repository, das Ihren Code hostet.

Gehen Sie zu Ihrem Stackhero-Dashboard und erstellen Sie zwei Stackhero-Dienste, einen für Staging und einen für Produktion. Um Verwirrung zu vermeiden, empfehlen wir, diese Dienste in "Production" und "Staging" umzubenennen.

Haben Sie noch kein Stackhero-Konto? Sie können in nur zwei Minuten kostenlos eines erstellen und dann Ihre Ruby-Cloud-Dienste mit nur wenigen Klicks erstellen.

Beispiel für Produktions- und Staging-DiensteBeispiel für Produktions- und Staging-Dienste

SSH-Schlüssel geben GitHub Actions das Recht, sich mit Ihrem Ruby-Dienst zu verbinden, um Ihren Code bereitzustellen. Dies ist ein wesentlicher Bestandteil der Sicherung Ihrer Stackhero-Dienste.

Erstellen Sie auf Ihrem Computer neue SSH-Schlüssel:

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

Rufen Sie den gerade generierten öffentlichen Schlüssel ab:

cat /tmp/ssh_key.pub

Wählen Sie im Stackhero-Dashboard Ihren "production" Ruby-Dienst aus und klicken Sie auf die Schaltfläche "Konfigurieren". Dienst-Einstellungen abrufenDienst-Einstellungen abrufen

Dann:

  1. Klicken Sie in SSH public keys auf Add a public key.
  2. Setzen Sie in Description GitHub Action.
  3. Fügen Sie in Key den Inhalt des öffentlichen Schlüssels ein, den Sie auf Ihrem Computer haben.

Dienst-Einstellungen abrufenDienst-Einstellungen abrufen

Gehen Sie zur GitHub-Website und wählen Sie Ihr Projekt aus.

Klicken Sie auf Settings/Environments und dann auf New environment. GitHub-Umgebungen konfigurierenGitHub-Umgebungen konfigurieren

Setzen Sie in Name "production" und bestätigen Sie. Umgebung festlegenUmgebung festlegen

Klicken Sie auf die Schaltfläche No restriction und wählen Sie Selected branches and tags. Umgebungsbeschränkungen festlegenUmgebungsbeschränkungen festlegen

Klicken Sie auf Add deployment branch or tag rule, geben Sie "production" in Name pattern ein und klicken Sie auf Add rule. Umgebungsbranch festlegenUmgebungsbranch festlegen Umgebungsbranch festlegenUmgebungsbranch festlegen

Klicken Sie in Environment secrets auf Add secret. Secret hinzufügenSecret hinzufügen

Rufen Sie den zuvor auf Ihrem Computer generierten privaten Schlüssel ab:

cat /tmp/ssh_key

Setzen Sie in Name STACKHERO_SSH_PRIVATE_KEY. In Value fügen Sie Ihren privaten Schlüssel ein. SSH-Privatschlüssel-Secret festlegenSSH-Privatschlüssel-Secret festlegen

Klicken Sie in Environment variables auf Add variable. Variablen festlegenVariablen festlegen

Setzen Sie in Name STACKHERO_ENDPOINT. In Value fügen Sie Ihren Ruby-Dienst-Endpunkt ein. Sie finden ihn in Ihrem Stackhero-Dashboard. Endpunktvariable festlegenEndpunktvariable festlegen

Wenn Sie den Domainnamen Ihres Dienstes angepasst haben, verwenden Sie die angepasste Version anstelle von xxxxxx.stackhero-network.com.

Da Sie die zuvor generierten SSH-Schlüssel nicht mehr benötigen, können Sie sie aus Sicherheitsgründen von Ihrem Computer löschen:

rm /tmp/ssh_key /tmp/ssh_key.pub

Erstellen Sie in Ihrem Git-Repository auf Ihrem Computer ein Verzeichnis namens .github/workflows. Erstellen Sie in diesem Verzeichnis eine Datei namens deploy-to-stackhero.yml.

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

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

on:
  push:
    # Liste der Branches, die die Bereitstellungsaktion nach einem Git-Push auslösen.
    # Vergessen Sie nicht, eine Umgebung zu erstellen, die dem Branch-Namen in GitHub entspricht (in "Settings"/"Environments").
    # Fügen Sie dann das entsprechende Secret "STACKHERO_SSH_PRIVATE_KEY" und die Variable "STACKHERO_ENDPOINT" in dieser Umgebung hinzu.
    branches: [ "production", "staging" ]

jobs:
  Deploy:
    environment: ${{ github.ref_name }}
    runs-on: ubuntu-latest
    steps:
    - uses: stackhero-io/github-actions-deploy-to-stackhero@v1
      with:
        # Das Secret "STACKHERO_SSH_PRIVATE_KEY" und die Variable "STACKHERO_ENDPOINT" sollten in der entsprechenden Branch-Umgebung auf GitHub unter "Settings"/"Environments" definiert sein.
        ssh_private_key: ${{ secrets.STACKHERO_SSH_PRIVATE_KEY }}
        endpoint: ${{ vars.STACKHERO_ENDPOINT }}

Committen Sie Ihre Änderungen:

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

Erstellen Sie dann einen Produktionsbranch:

git checkout -b production

Schließlich pushen Sie Ihre Änderungen zu GitHub:

git push --set-upstream origin production

Dieser letzte git push-Befehl wird den Code von Ihrem Computer zum GitHub-Branch production pushen. GitHub Actions wird automatisch ausgeführt und diesen Code auf Ihrer Stackhero-Instanz bereitstellen.

Um diese Aktion zu überprüfen, gehen Sie zur GitHub-Website, wählen Sie Ihr Projekt aus und klicken Sie auf Actions. GitHub Actions, die in die Produktion bereitgestellt wurdenGitHub Actions, die in die Produktion bereitgestellt wurden

Herzlichen Glückwunsch, Sie können jetzt Ihren Code automatisch über GitHub Actions in der Produktion bereitstellen!

Das Erstellen der Staging-Umgebung ist ähnlich wie das Einrichten der Produktionsumgebung. Um sie zu erstellen, wiederholen Sie die Schritte aus den vorherigen Abschnitten dieses Leitfadens, indem Sie einfach production durch staging ersetzen.

Erstellen Sie dann einen Staging-Branch:

git checkout -b staging

Schließlich pushen Sie Ihre Änderungen zu GitHub:

git push --set-upstream origin staging

GitHub Actions wird Ihren Staging-Branch automatisch auf der für Staging vorgesehenen Ruby-Instanz bereitstellen.

Eine gute Praxis ist es, die Branches production und staging zu schützen, um direkte Pushes zu verhindern. In diesem Fall muss ein Pull-Request für den staging-Branch erstellt und dann von Personen mit den Rechten, Code auf Staging zu pushen, zusammengeführt werden. Sobald er auf der Staging-Plattform validiert ist, kann der Pull-Request von denselben Personen, die die Rechte haben, in den production-Branch zusammengeführt werden.

Dieser Ansatz gewährleistet Sicherheit (nur autorisierte Personen können auf staging und production pushen) und Zuverlässigkeit (neue Funktionen werden zuerst auf einer staging-Plattform getestet, bevor sie auf den production-Branch gepusht werden).