Observação: Executores hospedados em GitHub não são atualmente compatíveis com GitHub Enterprise Server. Você pode ver mais informações sobre suporte futuro planejado no Itinerário público do GitHub.
Introdução
Este guia mostra como usar PowerShell para CI. Ele descreve como usar o Pester, instalar dependências, testar seu módulo e publicar na Galeria do PowerShell.
Executores hospedados em GitHub têm um cache de ferramentas com software pré-instalado que inclui PowerShell e Pester.
Para obter uma lista completa do software atualizado e das versões pré-instaladas do PowerShell e Pester, consulte "Especificações para executores hospedados em GitHub".
Pré-requisitos
Você deve estar familiarizado com o YAML e a sintaxe do GitHub Actions. Para obter mais informações, consulte "Aprenda GitHub Actions".
Recomendamos que você tenha um entendimento básico de PowerShell e Pester. Para obter mais informações, consulte:
Usar executores auto-hospedados no GitHub Enterprise Server
Ao usar ações de configuração (como actions/setup-LANGUAGE
) em GitHub Enterprise Server com executores auto-hospedados, você pode precisar configurar o armazenamento de ferramentas em executores que não possuem acesso � internet. Para obter mais informações, consulte "Configurar o cache da ferramenta em executores auto-hospedados sem acesso � internet".
Adicionar um fluxo de trabalho ao Pester
Para automatizar o seu teste com PowerShell e Pester, você pode adicionar um fluxo de trabalho que é executado toda vez que uma alteração é carregada no seu repositório. No exemplo a seguir, Test-Path
é usado para verificar se um arquivo denominado resultsfile.log
está presente.
Este exemplo de arquivo de fluxo de trabalho deve ser adicionado ao diretório .github/workflows/
do repositório:
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@v2
- 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
- Configura o trabalho para usar PowerShell quando executa os comandosexecutar
. -
run: Test-Path resultsfile.log
- Verifica se um arquivo denominadoresultsfile.log
está presente no diretório raiz do repositório. -
Should -Be $true
- Usa o Pester para definir um resultado esperado. Se o resultado for inesperado, GitHub Actions irá sinalizar isso como um teste falho. Por exemplo: -
Invoke-Pester Unit.Tests.ps1 -Passthru
- Usa o Pester para executar testes definidos em um arquivo denominadoUnit.Tests.ps1
. Por exemplo, para realizar o mesmo teste descrito acima, oUnit.Tests.ps1
conterá o seguinte:Describe "Check results file is present" { It "Check results file is present" { Test-Path resultsfile.log | Should -Be $true } }
Locais de módulos do PowerShell
A tabela abaixo descreve os locais para diversos módulos do PowerShell em cada executor hospedado em GitHub.
Ubuntu | macOS | Windows | |
---|---|---|---|
Módulos do sistema do PowerShell | /opt/microsoft/powershell/7/Modules/* | /usr/local/microsoft/powershell/7/Modules/* | C:\program files\powershell\7\Modules\* |
Módulos de complementos do PowerShell | /usr/local/share/powershell/Modules/* | /usr/local/share/powershell/Modules/* | C:\Modules\* |
Módulos instalados pelo usuário | /home/runner/.local/share/powershell/Modules/* | /Users/runner/.local/share/powershell/Modules/* | C:\Users\runneradmin\Documents\PowerShell\Modules\* |
Instalar dependências
Executores hospedados em GitHub têm PowerShell 7 e o Pester instalado. Você pode usar Install-Module
para instalar dependências adicionais da Galeria PowerShell antes de construir e testar o seu código.
Nota: Os pacotes pré-instalados (como o Colester) usados pelos executores hospedados em GitHub são atualizados regularmente e podem introduzir mudanças significativas. Como resultado, recomenda-se que você sempre especifique as versões necessárias dos pacotes usando o Install-Module
com -MaximumVersion
.
Por exemplo, o trabalho a seguir instala os módulos SqlServer
e PSScriptAnalyzer
:
jobs:
install-dependencies:
name: Install dependencies
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install from PSGallery
shell: pwsh
run: |
Set-PSRepository PSGallery -InstallationPolicy Trusted
Install-Module SqlServer, PSScriptAnalyzer
Observação: Por padrão, nenhum repositório é confiável pelo PowerShell. Ao instalar módulos na Galeria do PowerShell, você deve definir explicitamente a política de instalação para PSGallery
como Confiável
.
Testar seu código
Você pode usar os mesmos comandos usados localmente para criar e testar seu código.
Usar PSScriptAnalyzer para código lint
O exemplo a seguir instala PSScriptAnalyzer
e o usa para limpar todos os arquivos ps1
no repositório. Para obter mais informações, consulte PSScriptAnalyzer no GitHub.
lint-with-PSScriptAnalyzer:
name: Install and run PSScriptAnalyzer
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- 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."
}
Empacotar dados do fluxo de trabalho como artefatos
Você pode fazer o upload de artefatos para visualização após a conclusão de um fluxo de trabalho. Por exemplo, é possível que você precise salvar os arquivos de registro, os despejos de núcleo, os resultados de teste ou capturas de tela. Para obter mais informações, consulte "Dados recorrentes do fluxo de trabalho que usam artefatos".
O exemplo a seguir demonstra como você pode usar a ação upload-artifact
para arquivar os resultados de teste recebidos de Invoke-Pester
. Para obter mais informações, consulte a ação <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@v2
- 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@v2
with:
name: ubuntu-Unit-Tests
path: Unit.Tests.xml
if: ${{ always() }}
A função always()
configura o trabalho para continuar processando mesmo se houver falhas no teste. Para obter mais informações, consulte "always".
Publicar na Galeria do PowerShell
Você pode configurar o seu fluxo de trabalho para publicar o seu módulo do PowerShell para a Galeria PowerShell quando o seu teste de passar. Você pode usar segredos para armazenar quaisquer tokens ou credenciais necessárias para publicar seu pacote. Para obter mais informações, consulte "Criando e usando segredos encriptados".
O exemplo a seguir cria um pacote e usa Publish-Module
para publicá-lo na Galeria do PowerShell:
name: Publish PowerShell Module
on:
release:
types: [created]
jobs:
publish-to-gallery:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- 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