{"meta":{"title":"Personnaliser les conteneurs utilisés par les tâches","intro":"Vous pouvez personnaliser la manière dont votre exécuteur auto-hébergé invoque un conteneur pour un travail.","product":"GitHub Actions","breadcrumbs":[{"href":"/fr/actions","title":"GitHub Actions"},{"href":"/fr/actions/how-tos","title":"Guides pratiques"},{"href":"/fr/actions/how-tos/manage-runners","title":"Gérer les exécuteurs"},{"href":"/fr/actions/how-tos/manage-runners/self-hosted-runners","title":"Exécuteurs auto-hébergés"},{"href":"/fr/actions/how-tos/manage-runners/self-hosted-runners/customize-containers","title":"Personnalisez les conteneurs"}],"documentType":"article"},"body":"# Personnaliser les conteneurs utilisés par les tâches\n\nVous pouvez personnaliser la manière dont votre exécuteur auto-hébergé invoque un conteneur pour un travail.\n\n> \\[!NOTE]\n> Cette fonctionnalité est actuellement en cours préversion publique et peut être modifiée.\n\n## À propos de la personnalisation des conteneurs\n\nGitHub Actions vous permet d’exécuter un travail dans un conteneur à l’aide de l’instruction `container:` dans votre fichier de flux de travail. Pour plus d’informations, consultez « [Exécution de travaux dans un conteneur](/fr/actions/how-tos/write-workflows/choose-where-workflows-run/run-jobs-in-a-container) ». Pour traiter les travaux basés sur des conteneurs, l’exécuteur auto-hébergé crée un conteneur pour chaque travail.\n\nGitHub Actions prend en charge des commandes qui vous permettent de personnaliser la façon dont vos conteneurs sont créés par le runner auto-hébergé. Par exemple, vous pouvez utiliser ces commandes pour gérer les conteneurs via Kubernetes ou Podman, et vous pouvez également personnaliser les commandes `docker run` ou `docker create` utilisées pour invoquer le conteneur. Les commandes de personnalisation sont exécutées par un script, qui se déclenche automatiquement lorsqu’une variable d’environnement spécifique est définie sur l’exécuteur. Pour plus d’informations, consultez [Déclenchement du script de personnalisation](#triggering-the-customization-script) ci-dessous.\n\nCette personnalisation n’est disponible que pour les exécuteurs auto-hébergés sous Linux, et l’accès à l’utilisateur root n’est pas nécessaire.\n\n## Commandes de personnalisation des conteneurs\n\nGitHub Actions inclut les commandes suivantes pour la personnalisation du conteneur :\n\n* [\n  `prepare_job`\n  ](/fr/actions/how-tos/manage-runners/self-hosted-runners/customize-containers#prepare_job) : Appelé lorsqu’une tâche est lancée.\n* [\n  `cleanup_job`\n  ](/fr/actions/how-tos/manage-runners/self-hosted-runners/customize-containers#cleanup_job) : Appelé à la fin d’un travail.\n* [\n  `run_container_step`\n  ](/fr/actions/how-tos/manage-runners/self-hosted-runners/customize-containers#run_container_step): Appelé une fois pour chaque action de conteneur dans le travail.\n* [\n  `run_script_step`\n  ](/fr/actions/how-tos/manage-runners/self-hosted-runners/customize-containers#run_script_step) : Exécute toute étape qui n’est pas une action de conteneur.\n\nChacune de ces commandes de personnalisation doit être définie dans son propre fichier JSON. Le nom du fichier doit correspondre au nom de la commande, avec l’extension `.json`. Par exemple, la commande `prepare_job` est définie dans `prepare_job.json`. Ces fichiers JSON seront ensuite exécutés ensemble sur l’exécuteur auto-hébergé, dans le cadre du script principal `index.js`. Ce processus est décrit plus en détail dans « [Génération du script de personnalisation](#generating-the-customization-script) ».\n\nCes commandes comprennent également des arguments de configuration, expliqués plus en détail ci-dessous.\n\n### `prepare_job`\n\nLa commande `prepare_job` est appelée lorsqu’un travail est lancé.\nGitHub Actions transmet tous les conteneurs de travail ou de service associés au travail. Cette commande sera appelée si vous avez des conteneurs de service ou de travail dans le travail.\n\nGitHub Actions suppose que vous effectuez les tâches suivantes dans la `prepare_job` commande :\n\n* Effacez tout ce qui a été fait lors des travaux précédents, si nécessaire.\n* Créez un réseau, si nécessaire.\n* Tirez les conteneurs de travail et de service.\n* Démarrez le conteneur de travail.\n* Démarrez les conteneurs de service.\n* Écrivez dans le fichier réponse toutes les informations dont GitHub Actions vous aurez besoin :\n  * Requis : Indiquez si le conteneur est un conteneur Linux `alpine` (à l’aide du booléen `isAlpine` ).\n  * Facultatif : Tous les champs de contexte que vous souhaitez définir sur le contexte de travail, sans quoi ils ne seront pas disponibles pour les utilisateurs. Pour plus d’informations, consultez « [Référence des contextes](/fr/actions/reference/workflows-and-actions/contexts#job-context) ».\n* Renvoie `0` lorsque les contrôles d’intégrité ont réussi et que les conteneurs de travaux/services sont démarrés.\n\n#### Arguments pour `prepare_job`\n\n* `jobContainer` : **Facultatif**. Un objet contenant des informations sur le conteneur de travaux spécifié.\n  * `image` : **Obligatoire**. Une chaîne contenant l’image Docker.\n  * `workingDirectory` : **Obligatoire**. Une chaîne contenant le chemin absolu du répertoire de travail.\n  * `createOptions` : **Facultatif**. Les options facultatives *create* spécifiées dans le YAML. Pour plus d’informations, consultez « [Exécution de travaux dans un conteneur](/fr/actions/how-tos/write-workflows/choose-where-workflows-run/run-jobs-in-a-container#example-running-a-job-within-a-container) ».\n  * `environmentVariables` : **Facultatif**. Définit une carte des variables d’environnement clés.\n  * `userMountVolumes` : **Facultatif**. Un tableau de volumes de montage utilisateur définis dans le YAML. Pour plus d’informations, consultez « [Exécution de travaux dans un conteneur](/fr/actions/how-tos/write-workflows/choose-where-workflows-run/run-jobs-in-a-container#example-running-a-job-within-a-container) ».\n    * `sourceVolumePath` : **Obligatoire**. Le chemin source au volume qui sera monté dans le conteneur Docker.\n    * `targetVolumePath` : **Obligatoire**. Le chemin cible du volume qui sera monté dans le conteneur Docker.\n    * `readOnly` : **Obligatoire**. Détermine si le montage doit être en lecture seule ou non.\n  * `systemMountVolumes` : **Obligatoire**. Un tableau de montages à monter dans le conteneur, mêmes champs que ci-dessus.\n    * `sourceVolumePath` : **Obligatoire**. Le chemin source au volume qui sera monté dans le conteneur Docker.\n    * `targetVolumePath` : **Obligatoire**. Le chemin cible du volume qui sera monté dans le conteneur Docker.\n    * `readOnly` : **Obligatoire**. Détermine si le montage doit être en lecture seule ou non.\n  * `registry`\n    **Facultatif**. Les informations d’identification du registre Docker pour un registre de conteneurs privé.\n    * `username` : **Facultatif**. Le nom d’utilisateur du compte du registre.\n    * `password` : **Facultatif**. Le mot de passe du compte du registre.\n    * `serverUrl` : **Facultatif**. L’URL du registre.\n  * `portMappings` : **Facultatif**. Un hachage clé-valeur des ports *source:cible* à mapper dans le conteneur.\n* `services` : **Facultatif**. Un ensemble de conteneurs de services à démarrer.\n  * `contextName` : **Obligatoire**. Le nom du service dans le contexte du travail.\n  * `image` : **Obligatoire**. Une chaîne contenant l’image Docker.\n  * `createOptions` : **Facultatif**. Les options facultatives *create* spécifiées dans le YAML. Pour plus d’informations, consultez « [Exécution de travaux dans un conteneur](/fr/actions/how-tos/write-workflows/choose-where-workflows-run/run-jobs-in-a-container#example-running-a-job-within-a-container) ».\n  * `environmentVariables` : **Facultatif**. Définit une carte des variables d’environnement clés.\n  * `userMountVolumes` : **Facultatif**. Un tableau de montages à monter dans le conteneur, mêmes champs que ci-dessus.\n    * `sourceVolumePath` : **Obligatoire**. Le chemin source au volume qui sera monté dans le conteneur Docker.\n    * `targetVolumePath` : **Obligatoire**. Le chemin cible du volume qui sera monté dans le conteneur Docker.\n    * `readOnly` : **Obligatoire**. Détermine si le montage doit être en lecture seule ou non.\n  * `registry`\n    **Facultatif**. Les informations d’identification du registre Docker pour le registre de conteneurs privé.\n    * `username` : **Facultatif**. Le nom d’utilisateur du compte du registre.\n    * `password` : **Facultatif**. Le mot de passe du compte du registre.\n    * `serverUrl` : **Facultatif**. L’URL du registre.\n  * `portMappings` : **Facultatif**. Un hachage clé-valeur des ports *source:cible* à mapper dans le conteneur.\n\n#### Exemple d’entrée pour `prepare_job`\n\n```json copy\n{\n  \"command\": \"prepare_job\",\n  \"responseFile\": \"/users/octocat/runner/_work/{guid}.json\",\n  \"state\": {},\n  \"args\": {\n    \"jobContainer\": {\n      \"image\": \"node:18\"\n      \"workingDirectory\": \"/__w/octocat-test2/octocat-test2\",\n      \"createOptions\": \"--cpus 1\",\n      \"environmentVariables\": {\n        \"NODE_ENV\": \"development\"\n      },\n      \"userMountVolumes\": [\n        {\n          \"sourceVolumePath\": \"my_docker_volume\",\n          \"targetVolumePath\": \"/volume_mount\",\n          \"readOnly\": false\n        }\n      ],\n      \"systemMountVolumes\": [\n        {\n          \"sourceVolumePath\": \"/home/octocat/git/runner/_layout/_work\",\n          \"targetVolumePath\": \"/__w\",\n          \"readOnly\": false\n        },\n        {\n          \"sourceVolumePath\": \"/home/octocat/git/runner/_layout/externals\",\n          \"targetVolumePath\": \"/__e\",\n          \"readOnly\": true\n        },\n        {\n          \"sourceVolumePath\": \"/home/octocat/git/runner/_layout/_work/_temp\",\n          \"targetVolumePath\": \"/__w/_temp\",\n          \"readOnly\": false\n        },\n        {\n          \"sourceVolumePath\": \"/home/octocat/git/runner/_layout/_work/_actions\",\n          \"targetVolumePath\": \"/__w/_actions\",\n          \"readOnly\": false\n        },\n        {\n          \"sourceVolumePath\": \"/home/octocat/git/runner/_layout/_work/_tool\",\n          \"targetVolumePath\": \"/__w/_tool\",\n          \"readOnly\": false\n        },\n        {\n          \"sourceVolumePath\": \"/home/octocat/git/runner/_layout/_work/_temp/_github_home\",\n          \"targetVolumePath\": \"/github/home\",\n          \"readOnly\": false\n        },\n        {\n          \"sourceVolumePath\": \"/home/octocat/git/runner/_layout/_work/_temp/_github_workflow\",\n          \"targetVolumePath\": \"/github/workflow\",\n          \"readOnly\": false\n        }\n      ],\n      \"registry\": {\n        \"username\": \"octocat\",\n        \"password\": \"examplePassword\",\n        \"serverUrl\": \"https://index.docker.io/v1\"\n      },\n      \"portMappings\": { \"80\": \"801\" }\n    },\n    \"services\": [\n      {\n        \"contextName\": \"redis\",\n        \"image\": \"redis\",\n        \"createOptions\": \"--cpus 1\",\n        \"environmentVariables\": {},\n        \"userMountVolumes\": [],\n        \"portMappings\": { \"80\": \"801\" },\n        \"registry\": {\n          \"username\": \"octocat\",\n          \"password\": \"examplePassword\",\n          \"serverUrl\": \"https://index.docker.io/v1\"\n        }\n      }\n    ]\n  }\n}\n```\n\n#### Exemple de sortie pour `prepare_job`\n\nCet exemple de sortie est le contenu du `responseFile` défini dans l’entrée ci-dessus.\n\n```json copy\n{\n  \"state\": {\n    \"network\": \"example_network_53269bd575972817b43f7733536b200c\",\n    \"jobContainer\": \"82e8219701fe096a35941d869cf3d71af1d943b5d8bdd718857fb87ac3042480\",\n    \"serviceContainers\": {\n      \"redis\": \"60972d9aa486605e66b0dad4abb678dc3d9116f536579e418176eedb8abb9105\"\n    }\n  },\n  \"context\": {\n    \"container\": {\n      \"id\": \"82e8219701fe096a35941d869cf3d71af1d943b5d8bdd718857fb87ac3042480\",\n      \"network\": \"example_network_53269bd575972817b43f7733536b200c\"\n    },\n    \"services\": {\n      \"redis\": {\n        \"id\": \"60972d9aa486605e66b0dad4abb678dc3d9116f536579e418176eedb8abb9105\",\n        \"ports\": {\n          \"8080\": \"8080\"\n        },\n        \"network\": \"example_network_53269bd575972817b43f7733536b200c\"\n      }\n    },\n    \"isAlpine\": true\n  }\n}\n```\n\n### `cleanup_job`\n\nLa commande `cleanup_job` est appelée à la fin d’un travail.\nGitHub Actions suppose que vous effectuez les tâches suivantes dans la `cleanup_job` commande :\n\n* Arrêtez tous les conteneurs de services ou de travaux en cours d’exécution (ou le pod équivalent).\n* Arrêtez le réseau (s’il existe).\n* Supprimez tous les conteneurs de travaux ou de services (ou le pod équivalent).\n* Supprimez le réseau (s’il existe).\n* Nettoyez tout ce qui a été créé pour ce travail.\n\n#### Arguments pour `cleanup_job`\n\nAucun argument n’est fourni pour `cleanup_job`.\n\n#### Exemple d’entrée pour `cleanup_job`\n\n```json copy\n{\n  \"command\": \"cleanup_job\",\n  \"responseFile\": null,\n  \"state\": {\n    \"network\": \"example_network_53269bd575972817b43f7733536b200c\",\n    \"jobContainer\": \"82e8219701fe096a35941d869cf3d71af1d943b5d8bdd718857fb87ac3042480\",\n    \"serviceContainers\": {\n      \"redis\": \"60972d9aa486605e66b0dad4abb678dc3d9116f536579e418176eedb8abb9105\"\n    }\n  },\n  \"args\": {}\n}\n```\n\n#### Exemple de sortie pour `cleanup_job`\n\nAucune sortie n’est attendue pour `cleanup_job`.\n\n### `run_container_step`\n\nLa commande `run_container_step` est appelée une fois pour chaque action de conteneur dans votre travail.\nGitHub Actions suppose que vous effectuez les tâches suivantes dans la `run_container_step` commande :\n\n* Tirez ou générez le conteneur requis (un échec se produit si vous ne pouvez pas).\n* Exécutez l’action du conteneur et renvoyez le code de sortie du conteneur.\n* Diffusez en continu la sortie des journaux d’étapes vers stdout et stderr.\n* Nettoyez le conteneur après son exécution.\n\n#### Arguments pour `run_container_step`\n\n* `image` : **Facultatif**. Une chaîne contenant l’image Docker. Sinon, un dockerfile doit être fourni.\n* `dockerfile` : **Facultatif**. Une chaîne contenant le chemin vers le Dockerfile, sinon une image doit être fournie.\n* `entryPointArgs` : **Facultatif**. Une liste contenant les arguments du point d’entrée.\n* `entryPoint` : **Facultatif**. Le point d’entrée du conteneur à utiliser si le point d’entrée par défaut de l’image doit être remplacé.\n* `workingDirectory` : **Obligatoire**. Une chaîne contenant le chemin absolu du répertoire de travail.\n* `createOptions` : **Facultatif**. Les options facultatives *create* spécifiées dans le YAML. Pour plus d’informations, consultez « [Exécution de travaux dans un conteneur](/fr/actions/how-tos/write-workflows/choose-where-workflows-run/run-jobs-in-a-container#example-running-a-job-within-a-container) ».\n* `environmentVariables` : **Facultatif**. Définit une carte des variables d’environnement clés.\n* `prependPath` : **Facultatif**. Un tableau de chemins supplémentaires à ajouter à la variable `$PATH`.\n* `userMountVolumes` : **Facultatif**. Un tableau de volumes de montage utilisateur définis dans un fichier YAML. Pour plus d’informations, consultez « [Exécution de travaux dans un conteneur](/fr/actions/how-tos/write-workflows/choose-where-workflows-run/run-jobs-in-a-container#example-running-a-job-within-a-container) ».\n  * `sourceVolumePath` : **Obligatoire**. Le chemin source au volume qui sera monté dans le conteneur Docker.\n  * `targetVolumePath` : **Obligatoire**. Le chemin cible du volume qui sera monté dans le conteneur Docker.\n  * `readOnly` : **Obligatoire**. Détermine si le montage doit être en lecture seule ou non.\n* `systemMountVolumes` : **Obligatoire**. Un tableau de montages à monter dans le conteneur, avec les mêmes champs que ci-dessus.\n  * `sourceVolumePath` : **Obligatoire**. Le chemin source au volume qui sera monté dans le conteneur Docker.\n  * `targetVolumePath` : **Obligatoire**. Le chemin cible du volume qui sera monté dans le conteneur Docker.\n  * `readOnly` : **Obligatoire**. Détermine si le montage doit être en lecture seule ou non.\n* `registry`\n  **Facultatif**. Les informations d’identification du registre Docker pour un registre de conteneurs privé.\n  * `username` : **Facultatif**. Le nom d’utilisateur du compte du registre.\n  * `password` : **Facultatif**. Le mot de passe du compte du registre.\n  * `serverUrl` : **Facultatif**. L’URL du registre.\n* `portMappings` : **Facultatif**. Un hachage clé-valeur des ports *source:cible* à mapper dans le conteneur.\n\n#### Exemple de saisie d’une image\n\nSi vous utilisez une image Docker, vous pouvez spécifier le nom de l’image dans le paramètre `\"image\":`.\n\n```json copy\n{\n  \"command\": \"run_container_step\",\n  \"responseFile\": null,\n  \"state\": {\n    \"network\": \"example_network_53269bd575972817b43f7733536b200c\",\n    \"jobContainer\": \"82e8219701fe096a35941d869cf3d71af1d943b5d8bdd718857fb87ac3042480\",\n    \"serviceContainers\": {\n      \"redis\": \"60972d9aa486605e66b0dad4abb678dc3d9116f536579e418176eedb8abb9105\"\n    }\n  },\n  \"args\": {\n    \"image\": \"node:18\",\n    \"dockerfile\": null,\n    \"entryPointArgs\": [\"-f\", \"/dev/null\"],\n    \"entryPoint\": \"tail\",\n    \"workingDirectory\": \"/__w/octocat-test2/octocat-test2\",\n    \"createOptions\": \"--cpus 1\",\n    \"environmentVariables\": {\n      \"NODE_ENV\": \"development\"\n    },\n    \"prependPath\": [\"/foo/bar\", \"bar/foo\"],\n    \"userMountVolumes\": [\n      {\n        \"sourceVolumePath\": \"my_docker_volume\",\n        \"targetVolumePath\": \"/volume_mount\",\n        \"readOnly\": false\n      }\n    ],\n    \"systemMountVolumes\": [\n      {\n        \"sourceVolumePath\": \"/home/octocat/git/runner/_layout/_work\",\n        \"targetVolumePath\": \"/__w\",\n        \"readOnly\": false\n      },\n      {\n        \"sourceVolumePath\": \"/home/octocat/git/runner/_layout/externals\",\n        \"targetVolumePath\": \"/__e\",\n        \"readOnly\": true\n      },\n      {\n        \"sourceVolumePath\": \"/home/octocat/git/runner/_layout/_work/_temp\",\n        \"targetVolumePath\": \"/__w/_temp\",\n        \"readOnly\": false\n      },\n      {\n        \"sourceVolumePath\": \"/home/octocat/git/runner/_layout/_work/_actions\",\n        \"targetVolumePath\": \"/__w/_actions\",\n        \"readOnly\": false\n      },\n      {\n        \"sourceVolumePath\": \"/home/octocat/git/runner/_layout/_work/_tool\",\n        \"targetVolumePath\": \"/__w/_tool\",\n        \"readOnly\": false\n      },\n      {\n        \"sourceVolumePath\": \"/home/octocat/git/runner/_layout/_work/_temp/_github_home\",\n        \"targetVolumePath\": \"/github/home\",\n        \"readOnly\": false\n      },\n      {\n        \"sourceVolumePath\": \"/home/octocat/git/runner/_layout/_work/_temp/_github_workflow\",\n        \"targetVolumePath\": \"/github/workflow\",\n        \"readOnly\": false\n      }\n    ],\n    \"registry\": null,\n    \"portMappings\": { \"80\": \"801\" }\n  }\n}\n```\n\n#### Exemple d’entrée pour un Dockerfile\n\nSi votre conteneur est défini par un Dockerfile, cet exemple montre comment spécifier le chemin d’accès à un `Dockerfile` dans votre entrée, en utilisant le paramètre `\"dockerfile\":`.\n\n```json copy\n{\n  \"command\": \"run_container_step\",\n  \"responseFile\": null,\n  \"state\": {\n    \"network\": \"example_network_53269bd575972817b43f7733536b200c\",\n    \"jobContainer\": \"82e8219701fe096a35941d869cf3d71af1d943b5d8bdd718857fb87ac3042480\",\n    \"services\": {\n      \"redis\": \"60972d9aa486605e66b0dad4abb678dc3d9116f536579e418176eedb8abb9105\"\n    }\n  },\n  \"args\": {\n    \"image\": null,\n    \"dockerfile\": \"/__w/_actions/foo/dockerfile\",\n    \"entryPointArgs\": [\"hello world\"],\n    \"entryPoint\": \"echo\",\n    \"workingDirectory\": \"/__w/octocat-test2/octocat-test2\",\n    \"createOptions\": \"--cpus 1\",\n    \"environmentVariables\": {\n      \"NODE_ENV\": \"development\"\n    },\n    \"prependPath\": [\"/foo/bar\", \"bar/foo\"],\n    \"userMountVolumes\": [\n      {\n        \"sourceVolumePath\": \"my_docker_volume\",\n        \"targetVolumePath\": \"/volume_mount\",\n        \"readOnly\": false\n      }\n    ],\n    \"systemMountVolumes\": [\n      {\n        \"sourceVolumePath\": \"/home/octocat/git/runner/_layout/_work\",\n        \"targetVolumePath\": \"/__w\",\n        \"readOnly\": false\n      },\n      {\n        \"sourceVolumePath\": \"/home/octocat/git/runner/_layout/externals\",\n        \"targetVolumePath\": \"/__e\",\n        \"readOnly\": true\n      },\n      {\n        \"sourceVolumePath\": \"/home/octocat/git/runner/_layout/_work/_temp\",\n        \"targetVolumePath\": \"/__w/_temp\",\n        \"readOnly\": false\n      },\n      {\n        \"sourceVolumePath\": \"/home/octocat/git/runner/_layout/_work/_actions\",\n        \"targetVolumePath\": \"/__w/_actions\",\n        \"readOnly\": false\n      },\n      {\n        \"sourceVolumePath\": \"/home/octocat/git/runner/_layout/_work/_tool\",\n        \"targetVolumePath\": \"/__w/_tool\",\n        \"readOnly\": false\n      },\n      {\n        \"sourceVolumePath\": \"/home/octocat/git/runner/_layout/_work/_temp/_github_home\",\n        \"targetVolumePath\": \"/github/home\",\n        \"readOnly\": false\n      },\n      {\n        \"sourceVolumePath\": \"/home/octocat/git/runner/_layout/_work/_temp/_github_workflow\",\n        \"targetVolumePath\": \"/github/workflow\",\n        \"readOnly\": false\n      }\n    ],\n    \"registry\": null,\n    \"portMappings\": { \"80\": \"801\" }\n  }\n}\n```\n\n#### Exemple de sortie pour `run_container_step`\n\nAucune sortie n’est attendue pour `run_container_step`.\n\n### `run_script_step`\n\nGitHub Actions suppose que vous effectuez les tâches suivantes :\n\n* Invoque le script fourni à l’intérieur du conteneur de travail et renvoie le code de sortie.\n* Diffusez en continu la sortie du journal des étapes vers stdout et stderr.\n\n#### Arguments pour `run_script_step`\n\n* `entryPointArgs` : **Facultatif**. Une liste contenant les arguments du point d’entrée.\n* `entryPoint` : **Facultatif**. Le point d’entrée du conteneur à utiliser si le point d’entrée par défaut de l’image doit être remplacé.\n* `prependPath` : **Facultatif**. Un tableau de chemins supplémentaires à ajouter à la variable `$PATH`.\n* `workingDirectory` : **Obligatoire**. Une chaîne contenant le chemin absolu du répertoire de travail.\n* `environmentVariables` : **Facultatif**. Définit une carte des variables d’environnement clés.\n\n#### Exemple d’entrée pour `run_script_step`\n\n```json copy\n{\n  \"command\": \"run_script_step\",\n  \"responseFile\": null,\n  \"state\": {\n    \"network\": \"example_network_53269bd575972817b43f7733536b200c\",\n    \"jobContainer\": \"82e8219701fe096a35941d869cf3d71af1d943b5d8bdd718857fb87ac3042480\",\n    \"serviceContainers\": {\n      \"redis\": \"60972d9aa486605e66b0dad4abb678dc3d9116f536579e418176eedb8abb9105\"\n    }\n  },\n  \"args\": {\n    \"entryPointArgs\": [\"-e\", \"/runner/temp/example.sh\"],\n    \"entryPoint\": \"bash\",\n    \"environmentVariables\": {\n      \"NODE_ENV\": \"development\"\n    },\n    \"prependPath\": [\"/foo/bar\", \"bar/foo\"],\n    \"workingDirectory\": \"/__w/octocat-test2/octocat-test2\"\n  }\n}\n```\n\n#### Exemple de sortie pour `run_script_step`\n\nAucune sortie n’est attendue pour `run_script_step`.\n\n## Génération du script de personnalisation\n\nGitHub a créé un exemple de référentiel qui montre comment générer des scripts de personnalisation pour Docker et Kubernetes.\n\n> \\[!NOTE]\n> Les scripts qui en résultent sont disponibles à des fins de test, et vous devrez déterminer s’ils sont adaptés à vos besoins.\n\n1. Clonez le référentiel [actions/runner-container-hooks](https://github.com/actions/runner-container-hooks) sur votre runner auto-hébergé.\n\n2. Le répertoire `examples/` contient quelques commandes de personnalisation existantes, chacune avec son propre fichier JSON. Vous pouvez examiner ces exemples et les utiliser comme point de départ pour vos propres commandes de personnalisation.\n\n   * `prepare_job.json`\n   * `run_script_step.json`\n   * `run_container_step.json`\n\n3. Générez les packages npm. Ces commandes génèrent les fichiers `index.js` dans `packages/docker/dist` et `packages/k8s/dist`.\n\n   ```shell\n   npm install && npm run bootstrap && npm run build-all\n   ```\n\nLorsque le résultat `index.js` est déclenché par GitHub Actions, il exécute les commandes de personnalisation définies dans les fichiers JSON. Pour déclencher le programme `index.js`, vous devrez l’ajouter à votre variable d’environnement `ACTIONS_RUNNER_REQUIRE_JOB_CONTAINER`, comme décrit dans la section suivante.\n\n## Déclenchement du script de personnalisation\n\nLe script personnalisé doit être situé sur l’exécuteur, mais ne doit pas être stocké dans le répertoire d'application d’exécuteur auto-hébergé (c'est-à-dire le répertoire dans lequel vous avez téléchargé et décompressé le logiciel de l’exécuteur). Les scripts sont exécutés dans le contexte de sécurité du compte de service qui exécute le service runner.\n\n> \\[!NOTE]\n> Le script déclenché est traité de manière synchrone, il bloquera donc l’exécution du travail en cours.\n\nLes scripts sont exécutés automatiquement lorsque l’exécuteur possède la variable d’environnement suivante contenant un chemin absolu vers le script :\n\n* `ACTIONS_RUNNER_CONTAINER_HOOKS` : le script défini dans cette variable d’environnement est déclenché quand un travail a été affecté à un exécuteur, mais avant l’exécution du travail.\n\nPour définir cette variable d’environnement, vous pouvez l’ajouter au système d’exploitation ou à un fichier nommé `.env` dans le répertoire d’application d’exécuteur auto-hébergé. Par exemple, l’entrée `.env` suivante permettra à l’exécuteur de lancer automatiquement le script sur `/Users/octocat/runner/index.js` avant l’exécution de chaque série de travaux basés sur un conteneur :\n\n```bash\nACTIONS_RUNNER_CONTAINER_HOOKS=/Users/octocat/runner/index.js\n```\n\nSi vous voulez vous assurer que votre tâche s’exécute toujours à l’intérieur d’un conteneur et que, par conséquent, les personnalisations du conteneur sont toujours appliquées, vous pouvez définir la variable `ACTIONS_RUNNER_REQUIRE_JOB_CONTAINER` sur l’exécuteur auto-hébergé sur `true`. Cela fera échouer les travaux qui ne spécifient pas un conteneur de travaux.\n\n## Dépannage\n\n### Pas de paramètre de délai d’attente\n\nIl n’existe actuellement aucun paramètre de délai d’attente disponible pour le script exécutés par `ACTIONS_RUNNER_CONTAINER_HOOKS`. Par conséquent, vous pouvez envisager d’ajouter la gestion des délais d’expiration à votre script.\n\n### Examen du journal d’exécution du workflow\n\nPour vérifier si vos scripts s’exécutent, vous pouvez passer en revue les journaux pour ce travail. Pour plus de détails sur la vérification des journaux d’activité, consultez [Utilisation des journaux d’exécution de flux de travail](/fr/actions/how-tos/monitor-workflows/use-workflow-run-logs#viewing-logs-to-diagnose-failures)."}