Skip to main content
Nous publions des mises à jour fréquentes de notre documentation, et la traduction de cette page peut encore être en cours. Pour obtenir les informations les plus actuelles, consultez la documentation anglaise.

Cette version de GitHub Enterprise ne sera plus disponible le 2023-03-15. Aucune publication de correctifs n’est effectuée, même pour les problèmes de sécurité critiques. Pour de meilleures performances, une sécurité améliorée et de nouvelles fonctionnalités, effectuez une mise à niveau vers la dernière version de GitHub Enterprise. Pour obtenir de l’aide sur la mise à niveau, contactez le support GitHub Enterprise.

Creating a Docker container action

Ce guide vous montre les étapes minimales nécessaires pour générer une action de conteneur Docker.

Remarque : Les exécuteurs hébergés sur GitHub ne sont pas pris en charge sur GitHub Enterprise Server. Vous pouvez voir plus d’informations sur le support futur planifié dans la GitHub public roadmap.

Introduction

Dans ce guide, vous allez découvrir les composants de base qui sont nécessaires pour créer et utiliser une action de conteneur Docker empaquetée. Afin de nous concentrer sur les composants nécessaires à l’empaquetage de l’action, nous avons réduit la fonctionnalité du code de l’action à son strict minimum. L’action affiche « Hello World » dans les journaux ou « Hello [who-to-greet] » si vous fournissez un nom personnalisé.

Une fois que vous aurez terminé ce projet, vous saurez comment créer votre propre action de conteneur Docker et la tester dans un workflow.

Les exécuteurs autohébergés doivent utiliser un système d’exploitation Linux et disposer de Docker pour exécuter les actions de conteneur Docker. Pour plus d’informations sur les impératifs des exécuteurs autohébergés, consultez « À propos des exécuteurs autohébergés ».

Avertissement : Au moment de la création de workflows et d’actions, vous devez toujours déterminer si votre code peut exécuter une entrée non fiable provenant d’attaquants potentiels. Certains contextes doivent être traités comme des entrées non fiables, car un attaquant peut insérer son propre contenu malveillant. Pour plus d’informations, consultez « Présentation du risque d’injections de scripts ».

Prérequis

Une compréhension de base des variables d’environnement GitHub Actions et du système de fichiers conteneur Docker pourra vous être utile :

Avant de commencer, vous devez créer un dépôt GitHub.

  1. Créez un nouveau référentiel dans votre instance GitHub Enterprise Server. Vous pouvez choisir n’importe quel nom de dépôt ou utiliser « hello-world-docker-action » comme dans cet exemple. Pour en savoir plus, consultez « Créer un dépôt ».

  2. Clonez votre dépôt sur votre ordinateur. Pour plus d’informations, consultez « Clonage d’un dépôt ».

  3. À partir de votre terminal, remplacez les répertoires par votre nouveau dépôt.

    Shell
    cd hello-world-docker-action

Création d’un Dockerfile

Dans le nouveau répertoire hello-world-docker-action, créez un fichier Dockerfile. Vérifiez que le nom de votre fichier est bien en majuscules (utilisez un D majuscule et non un f majuscule) si vous rencontrez des problèmes. Pour plus d’informations, consultez « Prise en charge de Dockerfile pour GitHub Actions ».

Dockerfile

Dockerfile
# Container image that runs your code
FROM alpine:3.10

# Copies your code file from your action repository to the filesystem path `/` of the container
COPY entrypoint.sh /entrypoint.sh

# Code file to execute when the docker container starts up (`entrypoint.sh`)
ENTRYPOINT ["/entrypoint.sh"]

Création d’un fichier de métadonnées d’action

Créez un fichier action.yml dans le répertoire hello-world-docker-action que vous avez créé ci-dessus. Pour plus d’informations, consultez « Syntaxe des métadonnées pour GitHub Actions ».

action.yml

YAML
# action.yml
name: 'Hello World'
description: 'Greet someone and record the time'
inputs:
  who-to-greet:  # id of input
    description: 'Who to greet'
    required: true
    default: 'World'
outputs:
  time: # id of output
    description: 'The time we greeted you'
runs:
  using: 'docker'
  image: 'Dockerfile'
  args:
    - ${{ inputs.who-to-greet }}

Ces métadonnées définissent une entrée who-to-greet et un paramètre de sortie time. Pour passer des entrées au conteneur Docker, vous devez déclarer les entrées à l’aide de inputs et les passer dans le mot clé args. Tout ce que vous incluez dans args est passé au conteneur. Toutefois, pour que les utilisateurs puissent mieux découvrir votre action, nous vous recommandons d’utiliser des entrées.

GitHub crée une image à partir de votre Dockerfileet exécute les commandes dans un nouveau conteneur à l’aide de cette image.

Écriture du code d’action

Vous pouvez choisir n’importe quelle image Docker de base et, donc, n’importe quel langage pour votre action. L’exemple de script shell suivant utilise la variable d’entrée who-to-greet pour afficher « Hello [who-to-greet] » dans le fichier journal.

Ensuite, le script obtient l’heure actuelle et la définit comme une variable de sortie que pourront utiliser les prochaines actions d’un travail. Pour que GitHub reconnaisse les variables de sortie, vous devez utiliser une commande de workflow dans une syntaxe spécifique : echo "::set-output name=<output name>::<value>". Pour plus d’informations, consultez « Syntaxe des commandes pour GitHub Actions ».

  1. Dans le répertoire hello-world-docker-action, créez un fichier entrypoint.sh.

  2. Ajoutez le code suivant à votre fichier entrypoint.sh.

    entrypoint.sh

    Shell
    #!/bin/sh -l
    
    echo "Hello $1"
    time=$(date)
    echo "::set-output name=time::$time"

    Si entrypoint.sh s’exécute sans erreur, l’état de l’action est défini sur success. Pour indiquer l’état d’une action, vous pouvez définir explicitement des codes de sortie dans le code de l’action. Pour plus d’informations, consultez « Définition de codes de sortie pour les actions ».

  3. Rendez votre fichier entrypoint.sh exécutable. Git permet de modifier explicitement le mode d’autorisation d’un fichier afin qu’il ne soit pas réinitialisé chaque fois qu’il existe un clone/une duplication.

    Shell
    $ git add entrypoint.sh
    $ git update-index --chmod=+x entrypoint.sh
  4. Si vous le souhaitez, pour vérifier le mode d’autorisation du fichier dans l’index git, exécutez la commande suivante.

    Shell
    $ git ls-files --stage entrypoint.sh

    Une sortie comme 100755 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 entrypoint.sh signifie que le fichier dispose de l’autorisation exécutable. Dans cet exemple, 755 indique l’autorisation exécutable.

Création d’un fichier README

Pour expliquer aux utilisateurs comment utiliser votre action, vous pouvez créer un fichier README. Un fichier README est très utile si vous prévoyez de partager votre action publiquement, mais c’est aussi un excellent moyen de vous rappeler comment utiliser l’action.

Dans votre répertoire hello-world-docker-action, créez un fichier README.md qui spécifie les informations suivantes :

  • Une description détaillée de ce que fait l’action.
  • Les arguments d’entrée et de sortie obligatoires.
  • Les arguments d’entrée et de sortie facultatifs.
  • Les secrets utilisés par l’action.
  • Les variables d’environnement utilisées par l’action.
  • Un exemple d’utilisation de votre action dans un workflow.

README.md

markdown
# Hello world docker action

This action prints "Hello World" or "Hello" + the name of a person to greet to the log.

## Inputs

## `who-to-greet`

**Required** The name of the person to greet. Default `"World"`.

## Outputs

## `time`

The time we greeted you.

## Example usage

uses: actions/hello-world-docker-action@v1
with:
  who-to-greet: 'Mona the Octocat'

Commiter, étiqueter et pousser votre action vers GitHub Enterprise Server

À partir de votre terminal, commitez vos fichiers action.yml, entrypoint.sh, Dockerfile et README.md.

Il est recommandé d’ajouter également une étiquette de version pour les versions de votre action. Pour plus d’informations sur le versioning de votre action, consultez « À propos des actions ».

Shell
git add action.yml entrypoint.sh Dockerfile README.md
git commit -m "My first action is ready"
git tag -a -m "My first action release" v1
git push --follow-tags

Tester votre action dans un workflow

Vous êtes maintenant prêt à tester votre action dans un workflow.

  • Lorsqu’une action se trouve dans un référentiel privé, l’action ne peut être utilisée que dans les workflows du même référentiel. - Lorsqu’une action se trouve dans un référentiel interne, l’action ne peut être utilisée que dans les workflows du même référentiel.
  • Les actions publiques peuvent être utilisées par les workflows dans n’importe quel dépôt.

Remarque : GitHub Actions sur votre instance GitHub Enterprise Server peut avoir un accès limité aux actions sur GitHub.com ou GitHub Marketplace. Pour plus d’informations, consultez « Gestion de l’accès aux actions à partir de GitHub.com» et contactez votre administrateur de site GitHub Enterprise.

Exemple utilisant une action publique

Le code du workflow suivant utilise l’action hello world terminée dans le dépôt public actions/hello-world-docker-action. Copiez l’exemple de code de workflow suivant dans un fichier .github/workflows/main.yml, en remplaçant actions/hello-world-docker-action par le nom de votre dépôt et le nom de votre action. Vous pouvez également remplacer l’entrée who-to-greet par votre nom.

.github/workflows/main.yml

YAML
on: [push]

jobs:
  hello_world_job:
    runs-on: ubuntu-latest
    name: A job to say hello
    steps:
      - name: Hello world action step
        id: hello
        uses: actions/hello-world-docker-action@v1
        with:
          who-to-greet: 'Mona the Octocat'
      # Use the output from the `hello` step
      - name: Get the output time
        run: echo "The time was ${{ steps.hello.outputs.time }}"

Exemple utilisant une action privée

Copiez le code de l’exemple de workflow suivant dans un fichier .github/workflows/main.yml du dépôt de votre action. Vous pouvez également remplacer l’entrée who-to-greet par votre nom.

.github/workflows/main.yml

YAML
on: [push]

jobs:
  hello_world_job:
    runs-on: ubuntu-latest
    name: A job to say hello
    steps:
      # To use this repository's private action,
      # you must check out the repository
      - name: Checkout
        uses: actions/checkout@v2
      - name: Hello world action step
        uses: ./ # Uses an action in the root directory
        id: hello
        with:
          who-to-greet: 'Mona the Octocat'
      # Use the output from the `hello` step
      - name: Get the output time
        run: echo "The time was ${{ steps.hello.outputs.time }}"

Dans votre dépôt, cliquez sur l’onglet Actions, puis sélectionnez la dernière exécution du workflow. Sous Travaux ou dans le graphe de visualisation, cliquez sur A job to say hello. Vous devez voir « Hello Mona the Octocat » ou le nom que vous avez utilisé pour l’entrée who-to-greet, ainsi que l’horodatage affiché dans le journal.

Capture d’écran de l’utilisation de votre action dans un workflow