Introduction
Ce guide explique comment utiliser PowerShell pour lâintĂ©gration continue. Il explique comment utiliser Pester, installer des dĂ©pendances, tester votre module et publier dans PowerShell Gallery.
Les exĂ©cuteurs hĂ©bergĂ©s dans GitHub ont un cache dâoutils oĂč sont prĂ©installĂ©s des logiciels, notamment PowerShell et Pester.
Pour obtenir la liste complÚte des logiciels les plus récents et des versions préinstallées de PowerShell et Pester, consultez « Exécuteurs hébergés par GitHub ».
Prérequis
Vous devez ĂȘtre familiarisĂ© avec YAML et la syntaxe GitHub Actions. Pour plus dâinformations, consultez « Ăcriture de workflows ».
Il est recommandé de connaßtre les bases de PowerShell et de Pester. Pour plus d'informations, consultez les pages suivantes :
Ajout dâun workflow pour Pester
Pour automatiser vos tests avec PowerShell et Pester, vous pouvez ajouter un workflow qui sâexĂ©cute chaque fois quâune modification est poussĂ©e vers votre dĂ©pĂŽt. Dans lâexemple suivant, Test-Path
permet de vĂ©rifier la prĂ©sence dâun fichier nommĂ© resultsfile.log
.
Cet exemple de fichier de workflow doit ĂȘtre ajoutĂ© au rĂ©pertoire de votre dĂ©pĂŽt .github/workflows/
:
name: Test PowerShell on Ubuntu
on: push
jobs:
pester-test:
name: Pester test
runs-on: ubuntu-latest
steps:
- name: Check out repository code
uses: actions/checkout@v4
- name: Perform a Pester test from the command-line
shell: pwsh
run: Test-Path resultsfile.log | Should -Be $true
- name: Perform a Pester test from the Tests.ps1 file
shell: pwsh
run: |
Invoke-Pester Unit.Tests.ps1 -Passthru
-
shell: pwsh
- Configure le travail pour quâil utilise PowerShell lors de lâexĂ©cution des commandesrun
. -
run: Test-Path resultsfile.log
- Vérifie si un fichier nomméresultsfile.log
se trouve dans le répertoire racine du dépÎt. -
Should -Be $true
- Utilise Pester pour définir un résultat attendu. Si le résultat est inattendu, GitHub Actions le signale comme un échec de test. Par exemple : -
Invoke-Pester Unit.Tests.ps1 -Passthru
- Utilise Pester pour exécuter des tests définis dans un fichier nomméUnit.Tests.ps1
. Par exemple, pour effectuer le mĂȘme test que celui dĂ©crit ci-dessus,Unit.Tests.ps1
contiendra les éléments suivants :Describe "Check results file is present" { It "Check results file is present" { Test-Path resultsfile.log | Should -Be $true } }
Emplacements des modules PowerShell
Le tableau ci-dessous décrit les emplacements des différents modules PowerShell pour chaque exécuteur hébergé dans GitHub.
Ubuntu | macOS | Windows | |
---|---|---|---|
Modules systĂšme PowerShell | /opt/microsoft/powershell/7/Modules/* | /usr/local/microsoft/powershell/7/Modules/* | C:\program files\powershell\7\Modules\* |
Modules complémentaires PowerShell | /usr/local/share/powershell/Modules/* | /usr/local/share/powershell/Modules/* | C:\Modules\* |
Modules installĂ©s par lâutilisateur | /home/runner/.local/share/powershell/Modules/* | /Users/runner/.local/share/powershell/Modules/* | C:\Users\runneradmin\Documents\PowerShell\Modules\* |
Remarque
Sur les exécuteurs Ubuntu, les modules Azure PowerShell sont stockés dans /usr/share/
au lieu de lâemplacement par dĂ©faut des modules complĂ©mentaires PowerShell (câest-Ă -dire /usr/local/share/powershell/Modules/
).
Installer les dépendances
PowerShell 7 et Pester sont installés sur les exécuteurs hébergés dans GitHub. Vous pouvez utiliser Install-Module
pour installer des dépendances supplémentaires à partir de PowerShell Gallery avant de générer et de tester votre code.
Remarque
Les packages prĂ©installĂ©s (tels que Pester) qui sont utilisĂ©s par les exĂ©cuteurs hĂ©bergĂ©s dans GitHub sont rĂ©guliĂšrement mis Ă jour et peuvent entraĂźner des modifications importantes. Par consĂ©quent, il est recommandĂ© de toujours spĂ©cifier les versions de package nĂ©cessaires Ă lâaide de Install-Module
avec -MaximumVersion
.
Vous pouvez Ă©galement mettre en cache vos dĂ©pendances pour accĂ©lĂ©rer vos exĂ©cutions de workflow. Pour plus dâinformations, consultez « RĂ©fĂ©rence sur la mise en cache des dĂ©pendances ».
Par exemple, le travail suivant installe les modules SqlServer
et PSScriptAnalyzer
:
jobs:
install-dependencies:
name: Install dependencies
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install from PSGallery
shell: pwsh
run: |
Set-PSRepository PSGallery -InstallationPolicy Trusted
Install-Module SqlServer, PSScriptAnalyzer
Remarque
Par dĂ©faut, aucun dĂ©pĂŽt nâest approuvĂ© par PowerShell. Lors de lâinstallation de modules Ă partir de PowerShell Gallery, vous devez dĂ©finir explicitement la stratĂ©gie dâinstallation de PSGallery
sur Trusted
.
Mise en cache des dépendances
Vous pouvez mettre en cache les dĂ©pendances PowerShell Ă lâaide dâune clĂ© unique, ce qui vous permet de restaurer les dĂ©pendances pour les prochains workflows avec lâaction cache
. Pour plus dâinformations, consultez « RĂ©fĂ©rence sur la mise en cache des dĂ©pendances ».
PowerShell met en cache ses dĂ©pendances Ă diffĂ©rents emplacements, selon le systĂšme dâexploitation de lâexĂ©cuteur. Par exemple, lâemplacement path
utilisĂ© dans lâexemple Ubuntu suivant sera diffĂ©rent pour un systĂšme dâexploitation Windows.
steps:
- uses: actions/checkout@v4
- name: Setup PowerShell module cache
id: cacher
uses: actions/cache@v4
with:
path: "~/.local/share/powershell/Modules"
key: ${{ runner.os }}-SqlServer-PSScriptAnalyzer
- name: Install required PowerShell modules
if: steps.cacher.outputs.cache-hit != 'true'
shell: pwsh
run: |
Set-PSRepository PSGallery -InstallationPolicy Trusted
Install-Module SqlServer, PSScriptAnalyzer -ErrorAction Stop
Test de votre code
Vous pouvez utiliser les mĂȘmes commandes que celles que vous utilisez localement pour gĂ©nĂ©rer et tester votre code.
Utilisation de PSScriptAnalyzer pour linter du code
Lâexemple suivant installe PSScriptAnalyzer
, et lâutilise pour effectuer le linting de tous les fichiers ps1
du dĂ©pĂŽt. Pour plus dâinformations, consultez PSScriptAnalyzer sur GitHub.
lint-with-PSScriptAnalyzer:
name: Install and run PSScriptAnalyzer
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install PSScriptAnalyzer module
shell: pwsh
run: |
Set-PSRepository PSGallery -InstallationPolicy Trusted
Install-Module PSScriptAnalyzer -ErrorAction Stop
- name: Lint with PSScriptAnalyzer
shell: pwsh
run: |
Invoke-ScriptAnalyzer -Path *.ps1 -Recurse -Outvariable issues
$errors = $issues.Where({$_.Severity -eq 'Error'})
$warnings = $issues.Where({$_.Severity -eq 'Warning'})
if ($errors) {
Write-Error "There were $($errors.Count) errors and $($warnings.Count) warnings total." -ErrorAction Stop
} else {
Write-Output "There were $($errors.Count) errors and $($warnings.Count) warnings total."
}
Empaquetage des donnĂ©es de workflow en tant quâartefacts
Vous pouvez charger des artefacts Ă afficher une fois un workflow terminĂ©. Par exemple, vous devrez peut-ĂȘtre enregistrer des fichiers journaux, des vidages principaux, des rĂ©sultats de test ou des captures dâĂ©cran. Pour plus dâinformations, consultez « Stocker et partager des donnĂ©es avec les artefacts de workflow ».
Lâexemple suivant montre comment utiliser lâaction upload-artifact
pour archiver les résultats des tests reçus de Invoke-Pester
. Pour plus dâinformations, consultez lâaction upload-artifact
.
name: Upload artifact from Ubuntu
on: [push]
jobs:
upload-pester-results:
name: Run Pester and upload results
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Test with Pester
shell: pwsh
run: Invoke-Pester Unit.Tests.ps1 -Passthru | Export-CliXml -Path Unit.Tests.xml
- name: Upload test results
uses: actions/upload-artifact@v4
with:
name: ubuntu-Unit-Tests
path: Unit.Tests.xml
if: ${{ always() }}
La fonction always()
configure le travail de maniĂšre Ă poursuivre le traitement, mĂȘme en cas dâĂ©chec du test. Pour plus dâinformations, consultez « RĂ©fĂ©rence sur les contextes ».
Publication dans PowerShell Gallery
Vous pouvez configurer votre workflow de maniĂšre Ă publier votre module PowerShell dans PowerShell Gallery lorsque vos tests dâintĂ©gration continue rĂ©ussissent. Vous pouvez utiliser des secrets pour stocker nâimporte quels jetons ou informations dâidentification nĂ©cessaires Ă la publication de votre package. Pour plus dâinformations, consultez « Utilisation de secrets dans GitHub Actions ».
Lâexemple suivant crĂ©e un package et utilise Publish-Module
pour le publier dans PowerShell Gallery :
name: Publish PowerShell Module
on:
release:
types: [created]
jobs:
publish-to-gallery:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build and publish
env:
NUGET_KEY: ${{ secrets.NUGET_KEY }}
shell: pwsh
run: |
./build.ps1 -Path /tmp/samplemodule
Publish-Module -Path /tmp/samplemodule -NuGetApiKey $env:NUGET_KEY -Verbose