Redis-Service-Container erstellen

Du kannst Service-Container verwenden, um einen Redis-Client in Deinem Workflow zu erstellen. Dieser Leitfaden zeigt Beispiele für die Erstellung eines Redis-Dienstes für Jobs, die in Containern oder direkt auf der Runner-Maschine ausgeführt werden.

Note: GitHub-hosted runners are not currently supported on GitHub Enterprise Server. You can see more information about planned future support on the GitHub public roadmap.

Einführung

Diese Anleitung zeigt Dir Workflow-Beispiele, die einen Service-Container mit dem Docker-Hub-redis-Image konfigurieren. Der Workflow führt ein Skript aus, um einen Redis-Client zu erstellen und den Client mit Daten zu füllen. Um zu testen, ob der Workflow den Redis-Client erstellt und mit Daten füllt, gibt das Skript die Daten des Clients auf der Konsole aus.

Hinweis: Wenn Deine Workflows Docker-Containeraktionen oder Dienstcontainer verwenden, musst Du einen Linux-Läufer verwenden:

  • If you are using GitHub-hosted runners, you must use an Ubuntu runner.
  • Wenn Du selbst gehostete Läufer verwendest, musst Du einen Linux-Rechner als Deinen Läufer verwenden und Docker muss installiert sein.

Vorrausetzungen

Du solltest damit vertraut sein, wie Service-Container mit GitHub Actions arbeiten und die Netzwerkunterschiede kennen zwischen dem Laufen lassen von Aufträgen direkt auf dem Läufer oder in einem Container. Weitere Informationen findest Du unter "Über Service-Container."

Es kannst Dir helfen, wenn Du ein grundlegendes Verständnis von YAML, der Syntax für GitHub Actions und Redis hast. Weitere Informationen findest Du unter:

Jobs in Containern ausführen

Das Konfigurieren von Aufträgen für die Ausführung in einem Container vereinfacht die Netzwerkkonfigurationen zwischen dem Auftrag und den Dienstcontainern. Docker-Container im gleichen benutzerdefinierten Bridge-Netzwerk exponieren gegenseitig alle Ports, sodass Du keinen der Servicecontainer-Ports dem Docker-Host zuordnen musst. Mit der im Workflow konfigurierten Kennzeichnung kannst Du vom Auftrags-Container her auf den Dienst-Container zugreifen.

Du kannst diese Workflow-Datei in das .github/workflows Verzeichnis Deines Repository kopieren und nach Bedarf verändern.

YAML
name: Redis container example
on: push

jobs:
  # Label des Container-Jobs
  container-job:
    # Container muessen in Linux-basierten Betriebssystemen laufen
    runs-on: ubuntu-latest
    # Docker-Hub-Image, in dem der `container-job` laeuft
    container: node:10.18-jessie

    # Service-Container, die mit dem `container-job` laufen
    services:
      # Label zum Zugriff auf den Service-Container
      redis:
        # Docker-Hub-Image
        image: redis
        # Health-Checks so einstellen, dass sie warten, bis redis gestarted ist
        options: >-
          --health-cmd "redis-cli ping"
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5

    steps:
      # Laedt eine Kopie des Codes in Dein Repository herunter, bevor CI tests gestartet werden
      - name: Check out repository code
        uses: actions/checkout@v2

      # Fuehrt eine saubere Installation aller abhaengigkeiten in der Datei `package.json` aus
      # Weitere Informationen findest Du unter https://docs.npmjs.com/cli/ci.html
      - name: Install dependencies
        run: npm ci

      - name: Connect to Redis
        # fuehrt ein Skript aus, das einen Redis-Cient erzeugt,
        # Den Client mit Daten fuellt, und Daten abruft
        run: node client.js
        # Umgebungsvariable, mittels der das Skript `client.js` einen neuen Redis-Client erzeugt.
        env:
          # Der Hostname fuer die Kommunikation mit dem Redis-Service-Container
          REDIS_HOST: redis
          # Standarmaessiger Redis-Port
          REDIS_PORT: 6379

Den Container-Job konfigurieren

Dieser Workflow konfiguriert einen Auftrag, der im node:10.18-jessie Container läuft und benutzt den ubuntu-latest GitHub-gehosteten Läufer als Docker-Host für den Container. Weitere Informationen zum node:10.18-jessie Container findest Du unter Knotenabbild auf „Docker Hub".

Der Workflow konfiguriert einen Dienstcontainer mit der Kennzeichnung redis. Alle Dienste müssen in einem Container ausgeführt werden, daher erfordert jeder Dienst, dass Du den Container image angibst. Dieses Beispiel verwendet das redis Containerbild und enthält Optionen für Systemdiagnosen, um sicherzustellen, dass der Dienst läuft. Weitere Informationen findest Du im redis image auf „Docker Hub".

YAML
jobs:
  # Label des Container-Jobs
  container-job:
    # Container muessen in Linux-basierten Betriebssystemen laufen
    runs-on: ubuntu-latest
    # Docker-Hub-Image, in dem der `container-job` laeuft
    container: node:10.18-jessie

    # Service-Container, die mit dem `container-job` laufen
    services:
      # Label zum Zugriff auf den Service-Container
      redis:
        # Docker-Hub-Image
        image: redis
        # Health-Checks so einstellen, dass sie warten, bis redis gestarted ist
        options: >-
          --health-cmd "redis-cli ping"
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5

„Steps“ (Schritte) konfigurieren

Der Workflow führt die folgenden Schritte aus:

  1. Auschecken des Repository auf dem Läufer
  2. Installieren von Abhängigkeiten
  3. Ausführen eines Script, um einen Client zu erstellen
YAML
steps:
  # Laedt eine Kopie des Codes in Dein Repository herunter, bevor CI tests gestartet werden
  - name: Check out repository code
    uses: actions/checkout@v2

  # Fuehrt eine saubere Installation aller abhaengigkeiten in der Datei `package.json` aus
  # Weitere Informationen findest Du unter https://docs.npmjs.com/cli/ci.html
  - name: Install dependencies
    run: npm ci

  - name: Connect to Redis
    # Fuehrt ein Skript aus, das einen Redis-Cient erzeugt,
    # den Client mit Daten fuellt, und Daten abruft
    run: node client.js
    # Umgebungsvariable, mittels der das Skript `client.js` einen neuen Redis-Client erzeugt.
    env:
      # Der Hostname fuer die Kommunikation mit dem Redis-Service-Container
      REDIS_HOST: redis
      # Standarmaessiger Redis-Port
      REDIS_PORT: 6379

Das client.js-Skript sucht nach den REDIS_HOST und REDIS_PORT Umgebungsvariablen, um den Client zu erstellen. Der Workflow setzt diese beiden Umgebungsvariablen als Teil des Schritts "Verbindung zu to Redis", um sie dem client.js-Skript zur Verfügung zu stellen. Weitere Informationen zum Skript findest Du unter "Testen des Redis-Dienstcontainers."

Der Hostname des Redis-Dienstes ist das Label, das Du in Deinem Workflow konfiguriert hast, in diesem Fall redis. Da Docker-Container im selben benutzerdefinierten Bridge-Netzwerk standardmäßig alle Ports öffnen, kannst Du auf den Service-Container über den Standard-Redis-Port 6379 zugreifen.

Jobs direkt auf der Runner-Maschine ausführen

Wenn Du einen Job direkt auf der Runner-Maschine ausführst, musst Du die Ports des Service-Containers den Ports des Docker-Hosts zuordnen. Du kannst über den Docker-Host auf den Service-Container zugreifen, indem Du localhost und die Port-Nummer des Docker-Hosts verwendest.

Du kannst diese Workflow-Datei in das .github/workflows Verzeichnis Deines Repository kopieren und nach Bedarf verändern.

YAML
name: Redis runner example
on: push

jobs:
  # Label des Runner-Jobs
  runner-job:
    # Du brauchst eine Linux-Umgebung fuer Service-Container oder Container-Jobs
    runs-on: ubuntu-latest

    # Service-Container, die mit dem `runner-job` laufen
    services:
      # Label zum Zugriff auf den Service-Container
      redis:
        # Docker-Hub-Image
        image: redis
        # Health-Checks so einstellen, dass sie warten, bis redis gestarted ist
        options: >-
          --health-cmd "redis-cli ping"
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
        ports:
          # Ordnet Port 6379 des Service-Containers dem Host zu
          - 6379:6379

    steps:
      # Laedt eine Kopie des Codes in Dein Repository herunter, bevor CI tests gestartet werden
      - name: Check out repository code
        uses: actions/checkout@v2

      # Fuehrt eine saubere Installation aller abhaengigkeiten in der Datei `package.json` aus
      # Weitere Informationen findest Du unter https://docs.npmjs.com/cli/ci.html
      - name: Install dependencies
        run: npm ci

      - name: Connect to Redis
        # Fuehrt ein Skript aus, das einen Redis-Cient erzeugt,
        # den Client mit Daten fuellt, und Daten abruft
        run: node client.js
        # Umgebungsvariable, mittels der das Skript `client.js` 
        # einen neuen Redis-Client erzeugt.
        env:
          # Der Hostname fuer die Kommunikation mit dem Redis-Service-Container
          REDIS_HOST: localhost
          # Standarmaessiger Redis-Port
          REDIS_PORT: 6379

Runner-Job konfigurieren

Das Beispiel verwendet den ubuntu-latest GitHub-gehosteten Läufer als Docker-Host.

Der Workflow konfiguriert einen Dienstcontainer mit der Kennzeichnung redis. Alle Dienste müssen in einem Container ausgeführt werden, daher erfordert jeder Dienst, dass Du den Container image angibst. Dieses Beispiel verwendet das redis Containerbild und enthält Optionen für Systemdiagnosen, um sicherzustellen, dass der Dienst läuft. Weitere Informationen findest Du im redis image auf „Docker Hub".

Der Workflow ordnet Port 6379 des Redis-Service-Containers dem Docker-Host zu. Weitere Informationen über das Schlüsselwort ports findest Du unter "Informationen über Service-Container."

YAML
jobs:
  # Label des Runner-Jobs
  runner-job:
    # Fuer Service-Containers oder Container-Jobs brauchst Du eine Linux-Umgebung
    runs-on: ubuntu-latest

    # Service-Container, die mit dem `runner-job` laufen
    services:
      # Label zum Zugriff auf den Service-Container
      redis:
        # Docker-Hub-Image
        image: redis
        # Health-Checks so einstellen, dass sie warten, bis redis gestarted ist
        options: >-
          --health-cmd "redis-cli ping"
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
        ports:
          # Ordnet Port 6379 des Service-Containers dem Host zu
          - 6379:6379

„Steps“ (Schritte) konfigurieren

Der Workflow führt die folgenden Schritte aus:

  1. Auschecken des Repository auf dem Läufer
  2. Installieren von Abhängigkeiten
  3. Ausführen eines Script, um einen Client zu erstellen
YAML
steps:
  # Laedt eine Kopie des Codes in Dein Repository herunter, bevor CI tests gestartet werden
  - name: Check out repository code
    uses: actions/checkout@v2

  # Fuehrt eine saubere Installation aller abhaengigkeiten in der Datei `package.json` durch
  # Weitere Informationen findest Du unter https://docs.npmjs.com/cli/ci.html
  - name: Install dependencies
    run: npm ci

  - name: Connect to Redis
    # Fuehrt ein Skript aus, das einen Redis-Cient erzeugt,
    # den Client mit Daten fuellt, und Daten abruft
    run: node client.js
    # Umgebungsvariable, mittels der das Skript `client.js`
    # einen neuen Redis-Client erzeugt.
    env:
      # Der Hostname fuer die Kommunikation mit dem Redis-Service-Container
      REDIS_HOST: localhost
      # Standarmaessiger Redis-Port
      REDIS_PORT: 6379

Das client.js-Skript sucht nach den REDIS_HOST und REDIS_PORT Umgebungsvariablen, um den Client zu erstellen. Der Workflow setzt diese beiden Umgebungsvariablen als Teil des Schritts "Verbindung zu to Redis", um sie dem client.js-Skript zur Verfügung zu stellen. Weitere Informationen zum Skript findest Du unter "Testen des Redis-Dienstcontainers."

Der Hostname ist localhost oder 127.0.0.1.

Redis-Sercive-Container testen

Du kannst Deinen Workflow mit dem folgenden Skript testen, das einen Redis-Client erstellt und den Client mit Platzhalter-Daten füllt. Das Skript gibt dann die im Redis-Client gespeicherten Werte auf dem Terminal aus. Dein Skript kann jede beliebige Sprache verwenden, aber dieses Beispiel verwendet Node.js und das redis-npm-Modul. Weitere Informationen findest Du unter npm-Redis-Modul.

Du kannst client.js anpassen, um alle Redis-Operationen abzudecken, die Dein Workflow braucht. In diesem Beispiel erstellt das Skript die Redis-Client-Instanz, fügt Platzhalter-Daten hinzu und ruft dann die Daten ab.

Füge Deinem Repository eine neue Datei namens client.js hinzu mit dem folgenden Code.

JavaScript
const redis = require("redis");

// Erzeugt einen neuen Redis-Client
// Falls REDIS_HOST nicht definiert ist, ist der Host standarmaessig localhost
// Falls REDIS_PORT nicht definiert ist, ist der Standard-Port 6379
const redisClient = redis.createClient({
  host: process.env.REDIS_HOST,
  port: process.env.REDIS_PORT  
});

redisClient.on("error", function(err) {
    console.log("Error " + err);
});

// Setzt den Schluessel "octocat" auf den Wert "Mona the octocat"
redisClient.set("octocat", "Mona the Octocat", redis.print);
// Setzt einen Schluessel auf "octocat", Feld auf "species", und "value" auf "Cat and Octopus"
redisClient.hset("species", "octocat", "Cat and Octopus", redis.print);
// Setzt einen Schluessel auf "octocat", Feld auf "species", und "value" auf "Dinosaur and Octopus"
redisClient.hset("species", "dinotocat", "Dinosaur and Octopus", redis.print);
// Setzt einen Schluessel auf "octocat", Feld auf "species", und "value" auf "Cat and Robot"
redisClient.hset(["species", "robotocat", "Cat and Robot"], redis.print);
// Holt alle Felder vom Schluessel "species"

redisClient.hkeys("species", function (err, replies) {
    console.log(replies.length + " replies:");
    replies.forEach(function (reply, i) {
        console.log("    " + i + ": " + reply);
    });
    redisClient.quit();
});

Das Skript erstellt einen neuen Redis-Client mit der Methode createClient, welche die Parameter host und port akzeptiert. Das Skript verwendet die Umgebungsvariablen REDIS_HOST und REDIS_PORT, um die IP-Adresse und den Port des Clients festzulegen. Wenn host und port nicht definiert sind, ist der Standard-Host localhost und der Standard-Port 6379.

Das Skript verwendet die Methoden set und hset, um die Datenbank mit einigen Schlüsseln, Feldern und Werten zu füllen. Um zu bestätigen, dass der Redis-Client die Daten enthält, gibt das Skript den Inhalt der Datenbank in das Konsolen-Log aus.

Wenn Du diesen Workflow ausführst, solltest Du im Schritt „Mit Redis verbinden“ die folgende Ausgabe sehen, welche zeigt, dass Du den Redis-Client erstellt und Daten hinzugefügt hast:

Reply: OK
Reply: 1
Reply: 1
Reply: 1  
3 replies:
    0: octocat
    1: dinotocat
    2: robotocat

Did this doc help you?

Privacy policy

Help us make these docs great!

All GitHub docs are open source. See something that's wrong or unclear? Submit a pull request.

Make a contribution

Oder, learn how to contribute.