{"meta":{"title":"Création de conteneurs de service Redis","intro":"Vous pouvez utiliser les conteneurs de services pour créer un client Redis dans votre workflow. Ce guide présente des exemples de création d’un service Redis pour les travaux qui s’exécutent dans des conteneurs ou directement sur la machine de l’exécuteur.","product":"GitHub Actions","breadcrumbs":[{"href":"/fr/actions","title":"GitHub Actions"},{"href":"/fr/actions/tutorials","title":"Tutoriels"},{"href":"/fr/actions/tutorials/use-containerized-services","title":"Utilisez des services conteneurisés"},{"href":"/fr/actions/tutorials/use-containerized-services/create-redis-service-containers","title":"Créer des conteneurs de service Redis"}],"documentType":"article"},"body":"# Création de conteneurs de service Redis\n\nVous pouvez utiliser les conteneurs de services pour créer un client Redis dans votre workflow. Ce guide présente des exemples de création d’un service Redis pour les travaux qui s’exécutent dans des conteneurs ou directement sur la machine de l’exécuteur.\n\n## Introduction\n\nCe guide vous montre des exemples de flux de travail qui configurent un conteneur de services à l’aide de l’image Docker Hub `redis`. Le workflow exécute un script pour créer un client Redis et renseigner le client avec des données. Pour tester que le workflow crée et renseigne le client Redis, le script affiche les données du client dans la console.\n\n> \\[!NOTE]\n> Si vos flux de travail utilisent des actions de conteneurs Docker, des conteneurs de tâches ou des conteneurs de services, vous devez utiliser un programme d'exécution Linux :\n>\n> * Si vous utilisez des exécuteurs hébergés sur GitHub, vous devez utiliser un exécuteur Ubuntu.\n> * Si vous utilisez des exécuteurs autohébergés, vous devez utiliser une machine Linux en tant qu’exécuteur, et Docker doit être installé.\n\n## Prérequis\n\nVous devez connaître le fonctionnement des conteneurs de service avec GitHub Actions et les différences de réseau entre une exécution directe des travaux sur l’exécuteur ou dans un conteneur. Pour plus d’informations, consultez « [Communication avec les conteneurs de service Docker](/fr/actions/using-containerized-services/about-service-containers) ».\n\nVous pouvez également trouver utile de disposer d’une connaissance élémentaire de YAML, de la syntaxe de GitHub Actions et de Redis. Pour plus d’informations, consultez l’article suivant :\n\n* [Écriture de workflows](/fr/actions/learn-github-actions)\n* « [Bien démarrer avec Redis](https://redis.io/learn/howtos/quick-start) » dans la documentation Redis\n\n## Exécution de travaux dans des conteneurs\n\nLa configuration de travaux à exécuter dans un conteneur simplifie la mise en réseau des configurations entre le travail et les conteneurs de service. Les conteneurs Docker d’un même réseau de pont défini par l’utilisateur exposent tous les ports les uns aux autres. Vous n’avez donc pas besoin de mapper les ports des conteneurs de service à l’hôte Docker. Vous pouvez accéder au conteneur de service à partir du conteneur de travaux à l’aide de l’étiquette que vous configurez dans le workflow.\n\nVous pouvez copier ce fichier de workflow dans le répertoire `.github/workflows` de votre dépôt et le modifier selon vos besoins.\n\n```yaml copy\nname: Redis container example\non: push\n\njobs:\n  # Label of the container job\n  container-job:\n    # Containers must run in Linux based operating systems\n    runs-on: ubuntu-latest\n    # Docker Hub image that `container-job` executes in\n    container: node:20-bookworm-slim\n\n    # Service containers to run with `container-job`\n    services:\n      # Label used to access the service container\n      redis:\n        # Docker Hub image\n        image: redis\n        # Set health checks to wait until redis has started\n        options: >-\n          --health-cmd \"redis-cli ping\"\n          --health-interval 10s\n          --health-timeout 5s\n          --health-retries 5\n\n    steps:\n      # Downloads a copy of the code in your repository before running CI tests\n      - name: Check out repository code\n        uses: actions/checkout@v6\n\n      # Performs a clean installation of all dependencies in the `package.json` file\n      # For more information, see https://docs.npmjs.com/cli/ci.html\n      - name: Install dependencies\n        run: npm ci\n\n      - name: Connect to Redis\n        # Runs a script that creates a Redis client, populates\n        # the client with data, and retrieves data\n        run: node client.js\n        # Environment variable used by the `client.js` script to create a new Redis client.\n        env:\n          # The hostname used to communicate with the Redis service container\n          REDIS_HOST: redis\n          # The default Redis port\n          REDIS_PORT: 6379\n```\n\n### Configuration du travail de conteneur\n\nCe flux de travail configure un travail qui s'exécute dans le conteneur `node:20-bookworm-slim` et utilise l'exécuteur `ubuntu-latest`  GitHub-hosted comme hôte Docker pour le conteneur. Pour plus d’informations sur le conteneur `node:20-bookworm-slim`, consultez l’[image node](https://hub.docker.com/_/node) sur Docker Hub.\n\nLe workflow configure un conteneur de service avec l’étiquette `redis`. Tous les services devant s’exécuter dans un conteneur, chaque service exige que vous spécifiiez le conteneur `image`. Cet exemple utilise l’image conteneur `redis` et inclut des options de vérification de l’intégrité pour s’assurer que le service est en cours d’exécution. Ajoutez une étiquette au nom de l’image qui spécifie une version, par exemple `redis:6`. Pour plus d’informations, consultez [image redis](https://hub.docker.com/_/redis) sur Docker Hub.\n\n```yaml copy\njobs:\n  # Label of the container job\n  container-job:\n    # Containers must run in Linux based operating systems\n    runs-on: ubuntu-latest\n    # Docker Hub image that `container-job` executes in\n    container: node:20-bookworm-slim\n\n    # Service containers to run with `container-job`\n    services:\n      # Label used to access the service container\n      redis:\n        # Docker Hub image\n        image: redis\n        # Set health checks to wait until redis has started\n        options: >-\n          --health-cmd \"redis-cli ping\"\n          --health-interval 10s\n          --health-timeout 5s\n          --health-retries 5\n```\n\n### Configuration des étapes pour le travail de conteneur\n\nLe workflow effectue les étapes suivantes :\n\n1. Il extrait le dépôt sur l’exécuteur.\n2. Il installe des dépendances.\n3. Il exécute un script pour créer un client.\n\n```yaml copy\nsteps:\n  # Downloads a copy of the code in your repository before running CI tests\n  - name: Check out repository code\n    uses: actions/checkout@v6\n\n  # Performs a clean installation of all dependencies in the `package.json` file\n  # For more information, see https://docs.npmjs.com/cli/ci.html\n  - name: Install dependencies\n    run: npm ci\n\n  - name: Connect to Redis\n    # Runs a script that creates a Redis client, populates\n    # the client with data, and retrieves data\n    run: node client.js\n    # Environment variable used by the `client.js` script to create a new Redis client.\n    env:\n      # The hostname used to communicate with the Redis service container\n      REDIS_HOST: redis\n      # The default Redis port\n      REDIS_PORT: 6379\n```\n\nLe script *client.js* recherche les variables d’environnement `REDIS_HOST` et `REDIS_PORT` pour créer le client. Le workflow définit ces deux variables d’environnement dans le cadre de l’étape « Se connecter à Redis » pour les rendre disponibles pour le script *client.js*. Pour plus d’informations sur le script, consultez [Test du conteneur de service Redis](#testing-the-redis-service-container).\n\nLe nom d’hôte du service Redis est l’étiquette que vous avez configurée dans votre workflow ; dans le cas présent, `redis`. Étant donné que les conteneurs Docker se trouvant sur le même réseau de pont défini par l’utilisateur ouvrent tous les ports par défaut, vous pourrez accéder au conteneur de service sur le port Redis par défaut 6379.\n\n## Exécution de travaux directement sur la machine de l’exécuteur\n\nLorsque vous exécutez un travail directement sur la machine de l’exécuteur, vous devez mapper les ports du conteneur de service aux ports sur l’hôte Docker. Vous pouvez accéder aux conteneurs de service à partir de l’hôte Docker à l’aide de `localhost` et du numéro de port de l’hôte Docker.\n\nVous pouvez copier ce fichier de workflow dans le répertoire `.github/workflows` de votre dépôt et le modifier selon vos besoins.\n\n```yaml copy\nname: Redis runner example\non: push\n\njobs:\n  # Label of the runner job\n  runner-job:\n    # You must use a Linux environment when using service containers or container jobs\n    runs-on: ubuntu-latest\n\n    # Service containers to run with `runner-job`\n    services:\n      # Label used to access the service container\n      redis:\n        # Docker Hub image\n        image: redis\n        # Set health checks to wait until redis has started\n        options: >-\n          --health-cmd \"redis-cli ping\"\n          --health-interval 10s\n          --health-timeout 5s\n          --health-retries 5\n        ports:\n          # Maps port 6379 on service container to the host\n          - 6379:6379\n\n    steps:\n      # Downloads a copy of the code in your repository before running CI tests\n      - name: Check out repository code\n        uses: actions/checkout@v6\n\n      # Performs a clean installation of all dependencies in the `package.json` file\n      # For more information, see https://docs.npmjs.com/cli/ci.html\n      - name: Install dependencies\n        run: npm ci\n\n      - name: Connect to Redis\n        # Runs a script that creates a Redis client, populates\n        # the client with data, and retrieves data\n        run: node client.js\n        # Environment variable used by the `client.js` script to create\n        # a new Redis client.\n        env:\n          # The hostname used to communicate with the Redis service container\n          REDIS_HOST: localhost\n          # The default Redis port\n          REDIS_PORT: 6379\n```\n\n### Configuration du travail de l’exécuteur\n\nL'exemple s'appuie sur l'exécuteur `ubuntu-latest`  GitHub-hosted en tant qu'hôte Docker.\n\nLe workflow configure un conteneur de service avec l’étiquette `redis`. Tous les services devant s’exécuter dans un conteneur, chaque service exige que vous spécifiiez le conteneur `image`. Cet exemple utilise l’image conteneur `redis` et inclut des options de vérification de l’intégrité pour s’assurer que le service est en cours d’exécution. Ajoutez une étiquette au nom de l’image qui spécifie une version, par exemple `redis:6`. Pour plus d’informations, consultez [image redis](https://hub.docker.com/_/redis) sur Docker Hub.\n\nLe workflow mappe le port 6379 sur le conteneur de service Redis à l’hôte Docker. Pour plus d’informations sur le mot clé `ports`, consultez « [Communication avec les conteneurs de service Docker](/fr/actions/using-containerized-services/about-service-containers#mapping-docker-host-and-service-container-ports) ».\n\n```yaml copy\njobs:\n  # Label of the runner job\n  runner-job:\n    # You must use a Linux environment when using service containers or container jobs\n    runs-on: ubuntu-latest\n\n    # Service containers to run with `runner-job`\n    services:\n      # Label used to access the service container\n      redis:\n        # Docker Hub image\n        image: redis\n        # Set health checks to wait until redis has started\n        options: >-\n          --health-cmd \"redis-cli ping\"\n          --health-interval 10s\n          --health-timeout 5s\n          --health-retries 5\n        ports:\n          # Maps port 6379 on service container to the host\n          - 6379:6379\n```\n\n### Configuration des étapes pour le travail d’exécuteur\n\nLe workflow effectue les étapes suivantes :\n\n1. Il extrait le dépôt sur l’exécuteur.\n2. Il installe des dépendances.\n3. Il exécute un script pour créer un client.\n\n```yaml copy\nsteps:\n  # Downloads a copy of the code in your repository before running CI tests\n  - name: Check out repository code\n    uses: actions/checkout@v6\n\n  # Performs a clean installation of all dependencies in the `package.json` file\n  # For more information, see https://docs.npmjs.com/cli/ci.html\n  - name: Install dependencies\n    run: npm ci\n\n  - name: Connect to Redis\n    # Runs a script that creates a Redis client, populates\n    # the client with data, and retrieves data\n    run: node client.js\n    # Environment variable used by the `client.js` script to create\n    # a new Redis client.\n    env:\n      # The hostname used to communicate with the Redis service container\n      REDIS_HOST: localhost\n      # The default Redis port\n      REDIS_PORT: 6379\n```\n\nLe script *client.js* recherche les variables d’environnement `REDIS_HOST` et `REDIS_PORT` pour créer le client. Le workflow définit ces deux variables d’environnement dans le cadre de l’étape « Se connecter à Redis » pour les rendre disponibles pour le script *client.js*. Pour plus d’informations sur le script, consultez [Test du conteneur de service Redis](#testing-the-redis-service-container).\n\nLe nom d’hôte est `localhost` ou `127.0.0.1`.\n\n## Test du conteneur de service Redis\n\nVous pouvez tester votre workflow avec le script suivant, qui crée un client Redis et remplit le client avec des données temporaires. Le script affiche ensuite les valeurs stockées dans le client Redis dans le terminal. Votre script peut utiliser n’importe quel langage souhaité, mais cet exemple utilise Node.js et le module npm `redis`. Pour plus d’informations, consultez le [module npm Redis](https://www.npmjs.com/package/redis).\n\nVous pouvez modifier *client.js* pour inclure toutes les opérations Redis nécessaires à votre workflow. Dans cet exemple, le script crée l’instance de client Redis, ajoute des données d’espace réservé, puis récupère les données.\n\nAjoutez un nouveau fichier appelé *client.js* à votre dépôt avec le code suivant.\n\n```javascript copy\nconst redis = require(\"redis\");\n\n// Creates a new Redis client\n// If REDIS_HOST is not set, the default host is localhost\n// If REDIS_PORT is not set, the default port is 6379\nconst redisClient = redis.createClient({\n  url: `redis://${process.env.REDIS_HOST}:${process.env.REDIS_PORT}`\n});\n\nredisClient.on(\"error\", (err) => console.log(\"Error\", err));\n\n(async () => {\n  await redisClient.connect();\n\n  // Sets the key \"octocat\" to a value of \"Mona the octocat\"\n  const setKeyReply = await redisClient.set(\"octocat\", \"Mona the Octocat\");\n  console.log(\"Reply: \" + setKeyReply);\n  // Sets a key to \"species\", field to \"octocat\", and \"value\" to \"Cat and Octopus\"\n  const SetFieldOctocatReply = await redisClient.hSet(\"species\", \"octocat\", \"Cat and Octopus\");\n  console.log(\"Reply: \" + SetFieldOctocatReply);\n  // Sets a key to \"species\", field to \"dinotocat\", and \"value\" to \"Dinosaur and Octopus\"\n  const SetFieldDinotocatReply = await redisClient.hSet(\"species\", \"dinotocat\", \"Dinosaur and Octopus\");\n  console.log(\"Reply: \" + SetFieldDinotocatReply);\n  // Sets a key to \"species\", field to \"robotocat\", and \"value\" to \"Cat and Robot\"\n  const SetFieldRobotocatReply = await redisClient.hSet(\"species\", \"robotocat\", \"Cat and Robot\");\n  console.log(\"Reply: \" + SetFieldRobotocatReply);\n\n  try {\n    // Gets all fields in \"species\" key\n    const replies = await redisClient.hKeys(\"species\");\n    console.log(replies.length + \" replies:\");\n    replies.forEach((reply, i) => {\n        console.log(\"    \" + i + \": \" + reply);\n    });\n    await redisClient.quit();\n  }\n  catch (err) {\n    // statements to handle any exceptions\n  }\n})();\n```\n\nLe script crée un client Redis à l’aide de la méthode `createClient`, qui accepte un paramètre `host` et `port`. Le script utilise les variables d’environnement `REDIS_HOST` et `REDIS_PORT` pour définir l’adresse IP et le port du client. Si `host` et `port` ne sont pas définis, l’hôte par défaut est `localhost` et le port par défaut est 6379.\n\nLe script utilise les méthodes `set` et `hset` pour remplir la base de données avec des clés, des champs et des valeurs. Pour confirmer que le client Redis contient les données, le script imprime le contenu de la base de données dans le journal de la console.\n\nLorsque vous exécutez ce workflow, vous devez voir la sortie suivante dans l’étape « Se connecter à Redis », confirmant que vous avez créé le client Redis et ajouté des données :\n\n```shell\nReply: OK\nReply: 1\nReply: 1\nReply: 1\n3 replies:\n    0: octocat\n    1: dinotocat\n    2: robotocat\n```"}