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 composite 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 », puis « Goodbye ». Si vous fournissez un nom personnalisé, elle affichera « Hello [who-to-greet] », puis « Goodbye ». L’action mappe également un nombre aléatoire à la variable de sortie random-number
et exécute un script nommé goodbye.sh
.
Une fois que vous aurez terminé ce projet, vous saurez comment créer votre propre action composite et la tester dans un workflow.
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 « Durcissement de la sécurité pour GitHub Actions ».
Actions composites et flux de travail réutilisables
Les actions composites vous permettent de collecter une série d’étapes de tâche de flux de travail en une seule action que vous pouvez ensuite exécuter en tant qu’étape de tâche unique dans plusieurs flux de travail. Les flux de travail réutilisables offrent un autre moyen d’éviter la duplication, en vous permettant d’exécuter un flux de travail complet à partir d’autres flux de travail. Pour plus d’informations, consultez « Prévention de la duplication ».
Prérequis
Avant de commencer, vous allez créer un référentiel sur votre instance GitHub Enterprise Server.
-
Créez un nouveau référentiel public dans votre instance GitHub Enterprise Server. Vous pouvez choisir n’importe quel nom de dépôt ou utiliser l’exemple
hello-world-composite-action
suivant. Vous pouvez ajouter ces fichiers une fois que votre projet a été poussé vers GitHub Enterprise Server. Pour plus d’informations, consultez « Création d’un dépôt ». -
Clonez votre dépôt sur votre ordinateur. Pour plus d’informations, consultez « Clonage d’un dépôt ».
-
À partir de votre terminal, remplacez les répertoires par votre nouveau dépôt.
Shell cd hello-world-composite-action
cd hello-world-composite-action
-
Dans le dépôt
hello-world-composite-action
, créez un fichier nommégoodbye.sh
avec l’exemple de code :Shell echo "echo Goodbye" > goodbye.sh
echo "echo Goodbye" > goodbye.sh
-
À partir de votre terminal, rendez
goodbye.sh
exécutable.Shell chmod +x goodbye.sh
chmod +x goodbye.sh
chmod +x goodbye.sh
chmod +x goodbye.sh
git add --chmod=+x -- goodbye.sh
git add --chmod=+x -- goodbye.sh
-
À partir de votre terminal, effectuez le check-in de votre fichier
goodbye.sh
.Shell git add goodbye.sh git commit -m "Add goodbye script" git push
git add goodbye.sh git commit -m "Add goodbye script" git push
git add goodbye.sh git commit -m "Add goodbye script" git push
git add goodbye.sh
git commit -m "Add goodbye script"
git push
git commit -m "Add goodbye script" git push
git commit -m "Add goodbye script"
git push
Création d’un fichier de métadonnées d’action
-
Dans le dépôt
hello-world-composite-action
, créez un fichier nomméaction.yml
et ajoutez l’exemple de code suivant. Pour plus d’informations sur cette syntaxe, consultez « Metadata syntax for GitHub Actions ».YAML name: 'Hello World' description: 'Greet someone' inputs: who-to-greet: # id of input description: 'Who to greet' required: true default: 'World' outputs: random-number: description: "Random number" value: ${{ steps.random-number-generator.outputs.random-number }} runs: using: "composite" steps: - name: Set Greeting run: echo "Hello $INPUT_WHO_TO_GREET." shell: bash env: INPUT_WHO_TO_GREET: ${{ inputs.who-to-greet }} - name: Random Number Generator id: random-number-generator run: echo "random-number=$(echo $RANDOM)" >> $GITHUB_OUTPUT shell: bash - name: Set GitHub Path run: echo "$GITHUB_ACTION_PATH" >> $GITHUB_PATH shell: bash env: GITHUB_ACTION_PATH: ${{ github.action_path }} - name: Run goodbye.sh run: goodbye.sh shell: bash
name: 'Hello World' description: 'Greet someone' inputs: who-to-greet: # id of input description: 'Who to greet' required: true default: 'World' outputs: random-number: description: "Random number" value: ${{ steps.random-number-generator.outputs.random-number }} runs: using: "composite" steps: - name: Set Greeting run: echo "Hello $INPUT_WHO_TO_GREET." shell: bash env: INPUT_WHO_TO_GREET: ${{ inputs.who-to-greet }} - name: Random Number Generator id: random-number-generator run: echo "random-number=$(echo $RANDOM)" >> $GITHUB_OUTPUT shell: bash - name: Set GitHub Path run: echo "$GITHUB_ACTION_PATH" >> $GITHUB_PATH shell: bash env: GITHUB_ACTION_PATH: ${{ github.action_path }} - name: Run goodbye.sh run: goodbye.sh shell: bash
Ce fichier définit l’entrée
who-to-greet
, mappe le nombre généré aléatoirement à la variable de sortierandom-number
, ajoute le chemin d’accès de l’action au chemin d’accès du système de l’exécuteur (pour localiser le scriptgoodbye.sh
pendant l’exécution ) et exécute le scriptgoodbye.sh
.Pour plus d’informations sur la gestion des sorties, consultez « Metadata syntax for GitHub Actions ».
Pour plus d’informations sur l’utilisation de
github.action_path
, consultez « Contextes ». -
À partir de votre terminal, effectuez le check-in de votre fichier
action.yml
.Shell git add action.yml git commit -m "Add action" git push
git add action.yml git commit -m "Add action" git push
-
À partir de votre terminal, ajoutez une étiquette. Cet exemple utilise une étiquette nommée
v1
. Pour plus d’informations, consultez « À propos des actions personnalisées ».Shell git tag -a -m "Description of this release" v1 git push --follow-tags
git tag -a -m "Description of this release" v1 git push --follow-tags
Tester votre action dans un workflow
Le code de workflow suivant utilise l’action Hello World terminée que vous avez effectuée dans « Création d’une action composite ».
Copiez le code de workflow dans un fichier .github/workflows/main.yml
d’un autre dépôt, mais remplacez actions/hello-world-composite-action@v1
par le dépôt et l’étiquette que vous avez créés. Vous pouvez également remplacer l’entrée who-to-greet
par votre nom.
on: [push] jobs: hello_world_job: runs-on: ubuntu-latest name: A job to say hello steps: - uses: actions/checkout@v4 - id: foo uses: actions/hello-world-composite-action@v1 with: who-to-greet: 'Mona the Octocat' - run: echo random-number "$RANDOM_NUMBER" shell: bash env: RANDOM_NUMBER: ${{ steps.foo.outputs.random-number }}
on: [push]
jobs:
hello_world_job:
runs-on: ubuntu-latest
name: A job to say hello
steps:
- uses: actions/checkout@v4
- id: foo
uses: actions/hello-world-composite-action@v1
with:
who-to-greet: 'Mona the Octocat'
- run: echo random-number "$RANDOM_NUMBER"
shell: bash
env:
RANDOM_NUMBER: ${{ steps.foo.outputs.random-number }}
Dans votre dépôt, cliquez sur l’onglet Actions, puis sélectionnez la dernière exécution du workflow. La sortie doit inclure : « Hello Mona the Octocat », le résultat de l’exécution du script « Goodbye » et un nombre aléatoire.
Exemples d’actions composites sur GitHub.com
Vous pouvez trouver de nombreux exemples d’actions composites sur GitHub.com.