Skip to main content

Actions Composites

· 5 min read

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.

  1. 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
  1. 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.

warning

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 code echo "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 sortie random-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 script goodbye.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

AllowAction