- GitHub
- GitHub Actions
Lorsque vous implémentez l’intégration continue et le déploiement continue dans vos projets, si vous utilisez la même technologie, vous avez probablement remarqué que les workflows sont similaires ou identiques, et comme vous le savez, la duplication n’est pas du tout une bonne chose !
Pourquoi essayons-nous de mutualiser les workflows ?
La question est donc de savoir comment réutiliser vos workflows et être plus efficace entre vos projets au lieu de dupliquer vos workflows ?
Supposons que vous ayez un workflow pour builder un projet dotnet
appelé DemoReusableTemplates
. Ce projet a besoin d’une version spécifique de dotnet
pour être compilé. Le workflow ressemblera donc à ceci :
name: Main
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
build_dotnet:
runs-on: ubuntu-latest
steps:
- name: Checkout the code
uses: actions/checkout@v2
- name: Setup dotnet
uses: actions/setup-dotnet@v1
with:
dotnet-version: '5.0.x'
- run: dotnet restore src/DemoReusableTemplates.csproj
- run: dotnet build src/DemoReusableTemplates.csproj
Ce type de workflow peut être facilement réutilisé entre vos projets dotnet
, si vous pouvez passer ces entrées en paramètres :
dotnet
à utiliserC’est là qu’interviennent les actions composite
!
Créons une action réutilisable en utilisant les actions composite
pour builder notre application dotnet
.
Dans un nouveau répertoire GitHub créons un dossier appelé dotnet-build
et ajoutons dedans un fichier appelé action.yml
. Le nom du fichier doit être action.yml
ou action.yaml
. Si votre fichier ne respecte pas cette convention, votre action GitHub ne fonctionnera pas.
name: "Build dotnet"
description: "Build dotnet..."
inputs:
dotnet-version:
description: 'The dotnet version to use'
default: '2.1.x'
required: false
project-path:
description: 'The path to the project'
required: true
runs:
using: "composite"
steps:
- name: Setup dotnet
uses: actions/setup-dotnet@v1
with:
dotnet-version: ${{ inputs.dotnet-version }}
- run: dotnet restore ${{ inputs.project-path }}
shell: bash
- run: dotnet build ${{ inputs.project-path }}
shell: bash
Comme vous pouvez le voir ci-dessus, le chemin du projet et la version dotnet
sont définis comme paramètres d’entrée. Nous les transmettons en utilisant $
et $
. Ensuite, nous utilisons le mot-clé composite
pour pouvoir réutiliser cette action et nous ajoutons la liste de toutes les précédentes commandes à la suite.
Comme il s’agit d’une action composite, nous ne spécifions pas de
runner
, nous devons donc ajouter le paramètre shell à chaque actionrun
. Si vous ne le faites pas, vous aurez ce type de message d’erreur : Required property is missing: shell.
Comme vous l’avez probablement déjà remarqué, la dotnet-version
a une valeur par défaut définie sur 2.1.x
donc ce n’est pas obligatoire de l’allimenter.
Pour référencer un composite
dans vos différents workflows et projets, il doit être enregistré dans un répertoire spécifique. Ce répertoire commun contiendra différents composites
avec différentes versions :
Vous pouvez avoir un projet référençant l’action composite
dans sa version v0.0.1
et un autre référençant la version v0.0.2
.
Dans cet esprit, commitons et poussons cette action composite
dans un repository dédié. Ajoutez ensuite un tag
par exemple : v0.0.1
.
L’idée est maintenant de mettre à jour notre premier workflow avec notre nouvelle action :
name: Main
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
build_dotnet:
runs-on: ubuntu-latest
steps:
- name: Checkout the code
uses: actions/checkout@v2
- name: Build dotnet
uses: damienaicheh/demo-action-composite/dotnet-build@v0.0.1
with:
dotnet-version: 5.0.x
project-path: src/DemoReusableTemplates.csproj
Comme vous pouvez le voir ci-dessus, nous référençons l’action dotnet-build
en utilisant le nom du référentiel avec le chemin complet vers le dossier qui contient le action.yml
. Aussi, pour spécifier la version de cette action composite
que nous voulons utiliser, nous ajoutons le numéro de la balise à la fin. Ici, c’est @v0.0.1
.
Comme vous l’avez vu, il est très facile de réutiliser vos workflows entre vos projets et d’éviter les doublons. N’hésitez pas à créer vos propres répositories d’action composite
! Vous trouverez les deux référentiels GitHub de cet article disponibles ici :
Happy coding!