Actions Composites
Exemple de création et d'utilisation d'une action GitHub
Voici un exemple de création et d'utilisation d'une action GitHub pour automatiser le déploiement d'une application Node.js.
- Créez un fichier
action.yml
dans le répertoire.github/actions/deploy
de votre dépôt avec le contenu suivant :
name: 'Deploy Node.js App'
description: 'Deploy a Node.js application to a remote server'
inputs:
server:
description: 'The remote server to deploy to'
required: true
username:
description: 'The username to use for the deployment'
required: true
password:
description: 'The password to use for the deployment'
required: true
runs:
using: 'composite'
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install dependencies
run: npm install
- name: Build application
run: npm run build
- name: Deploy application
run: |
sshpass -p ${{ inputs.password }} ssh ${{ inputs.username }}@${{ inputs.server }} 'mkdir -p /var/www/myapp'
sshpass -p ${{ inputs.password }} scp -r ./build/* ${{ inputs.username }}@${{ inputs.server }}:/var/www/myapp
- Créez un fichier
deploy.yml
dans le répertoire.github/workflows
de votre dépôt avec le contenu suivant :
name: Deploy Node.js App
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Deploy application
uses: ./.github/actions/deploy
with:
server: ${{ secrets.DEPLOY_SERVER }}
username: ${{ secrets.DEPLOY_USERNAME }}
password: ${{ secrets.DEPLOY_PASSWORD }}
Dans cet exemple, l'action Deploy Node.js App
est utilisée pour déployer une application Node.js sur un serveur distant. L'action est déclenchée à chaque fois qu'un push est effectué sur la branche main
. Les informations de déploiement (serveur, nom d'utilisateur et mot de passe) sont stockées dans les secrets du dépôt pour des raisons de sécurité.
Les actions GitHub permettent d'automatiser, personnaliser et exécuter un flux de travail directement depuis votre dépôt. Avec les actions GitHub, il est possible de créer des tâches personnalisées pour automatiser un flux de travail, partager et découvrir des actions pour effectuer des tâches spécifiques.
Comment créer ses propres actions
Documentation complète : https://docs.github.com/fr/actions/creating-actions
La création d'actions personnalisées offre la possibilité de concevoir du code spécifique qui interagit avec le dépôt selon les besoins. Ces actions peuvent s'intégrer aux API de GitHub ou à toute API tierce accessible publiquement. Par exemple, une action pourrait être configurée pour publier des modules npm, envoyer des alertes par SMS en cas de création de problèmes urgents, ou encore déployer du code prêt pour la production. Ce guide expose les éléments fondamentaux requis pour la création et l'utilisation d'une action composite empaquetée.
Lors de la création de flux de travail et d'actions, il est impératif d'évaluer constamment la possibilité d'exécution d'une entrée non fiable provenant de sources potentiellement malveillantes. Certains contextes doivent être traités comme des entrées non fiables, car un attaquant pourrait insérer son propre contenu malveillant. Pour de plus amples informations, veuillez consulter la section « Durcissement de la sécurité pour GitHub Actions ».
Création d’une action
Un dépôt doit être créé sur GitHub.com.
- Créez un nouveau dépôt sur GitHub, en choisissant n'importe quel nom de dépôt ou en utilisant l'exemple suivant :
hello-world-composite-action
. Les fichiers peuvent être ajoutés une fois que le projet est poussé sur GitHub. Pour plus d'informations, veuillez vous référer à la section Création d'un dépôt. - Dans le dépôt
hello-world-composite-action
, créez un fichier nommégoodbye.sh
et ajoutez le codeecho "Goodbye
- Rendez
goodbye.sh
exécutable depuis votre terminal. - Dans le dépôt
hello-world-composite-action
, créez un fichier nomméaction.yml
et ajoutez le code suivant en exemple. Pour plus d'informations sur cette syntaxe, consultez la section Syntaxe des métadonnées pour les actions GitHub .
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:
- run: echo Hello ${{ inputs.who-to-greet }}.
shell: bash
- id: random-number-generator
run: echo "random-number=$(echo $RANDOM)" >> $GITHUB_OUTPUT
shell: bash
- run: echo "${{ github.action_path }}" >> $GITHUB_PATH
shell: bash
- 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
lors de l'exécution) et exécute le script . - Effectuez le commit de votre fichier
action.yml
depuis votre terminal.
git add action.yml
git commit -m "Add action"
git push
- Ajoutez une étiquette depuis votre terminal. Cet exemple utilise une étiquette nommée
v1
.
git tag -a -m "Description of this release" v1
git push --follow-tags
Tester l’action dans un workflow
Copiez le code de workflow dans un fichier .github/workflows/main.yml
d'un autre dépôt
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 ${{ steps.foo.outputs.random-number }}
shell: bash
Action dans un workflow privé
Dans les paramètres des actions, il est nécessaire de la partager à l’organisation