Použití informačního kanálu Azure Artifacts jako privátního úložiště PowerShellu
Služby Azure DevOps
Azure Artifacts poskytuje pohodlné řešení pro sdílení skriptů PowerShellu. Pomocí informačních kanálů Azure Artifacts můžete bez problémů publikovat moduly PowerShellu z příkazového řádku a řídit přístup k nim prostřednictvím nastavení informačního kanálu. Tento článek vás provede nastavením informačního kanálu Azure Artifacts jako privátního úložiště PowerShellu pro ukládání a sdílení modulů PowerShellu.
V tomto článku se naučíte:
- Vytvoření osobního přístupového tokenu
- Vytvoření modulu PowerShellu
- Vytvoření trezoru SecretStore a registrace úložiště
- Publikování a využívání balíčků z informačního kanálu
Požadavky
Pokud jste to ještě neudělali, vytvořte organizaci Azure DevOps a projekt.
Pokud ho ještě nemáte, vytvořte nový informační kanál .
Nainstalujte PowerShell 6.0 nebo novější, abyste měli jistotu, že máte požadovanou verzi PowerShellGet potřebnou k instalaci PSResourceGet.
Nainstalujte soubor PSResourceGet.
Poznámka:
Poskytovatel přihlašovacích údajů Azure Artifacts se u modulu PSResourceGet nepodporuje.
Vytvoření osobního přístupového tokenu (PAT)
Osobní přístupový token funguje jako vaše digitální identita a slouží jako alternativní heslo k ověření v Azure DevOps.
Přejděte do vaší organizace Azure DevOps.
https://dev.azure.com/<ORGANIZATION_NAME>/
Vyberte ikonu nastavení uživatele, vyberte Osobní přístupové tokeny a pak vyberte Nový token.
Zadejte název pat, nastavte datum vypršení platnosti, vyberte Vlastní definované a pak vyberte Balení>pro čtení, zápis a správu.
Po dokončení vyberte Vytvořit a ujistěte se, že pat kopírujete a ukládáte do bezpečného umístění.
Vytvoření modulu PowerShellu
Pokud nemáte vlastní modul, postupujte podle pokynů v této části a vytvořte ukázkový modul PowerShellu. V opačném případě přejděte k dalšímu kroku:
Vytvořte novou složku PowerShell-Demo. Přejděte do složky a vytvořte nový soubor PowerShell-Demo.psm1.
Do souboru PowerShell-Demo.psm1 vložte následující skript:
Function PowerShell-Demo{ Write-Host "Hello World!" }
Vygenerujte manifest modulu spuštěním následujícího příkazu v adresáři PowerShell-Demo :
New-ModuleManifest -Path .\PowerShell-Demo.psd1
Otevřete soubor PowerShell-Demo.psd1 a vyhledejte proměnnou
RootModule
. Toto nastavení určuje hlavní soubor skriptu, který PowerShell načte při importu modulu. Nahraďte prázdný řetězec cestou k souboru PowerShell-Demo.psm1 :RootModule = 'PowerShell-Demo.psm1'
Část
FunctionsToExport
určuje, které funkce jsou přístupné uživatelům při importu modulu. Zahrňte svoji funkci PowerShell-Demo :FunctionsToExport = @('PowerShell-Demo')
FileList
Vyhledejte oddíl, který obsahuje soubory zahrnuté při balení modulu. Přidejte soubor, který chcete zabalit do modulu:FileList = @('./PowerShell-Demo.psm1')
Registrace úložiště
Spuštěním následujícího příkazu vytvořte objekt přihlašovacích údajů. Zástupné symboly nahraďte správnými informacemi.
$username = "<USER_NAME>" $patToken = "<PERSONAL_ACCESS_TOKEN>" | ConvertTo-SecureString -AsPlainText -Force $credentials = New-Object System.Management.Automation.PSCredential($username, $patToken)
Ujistěte se, že jsou nainstalované SecretManagement a SecretStore , a pak spuštěním následujícího příkazu vytvořte trezor a přidejte tajný klíč:
Register-SecretVault -Name "MySecretVault" -ModuleName Microsoft.PowerShell.SecretStore -DefaultVault Set-Secret -Name "MyCredential" -Secret $credentials -Vault "MySecretVault" $CredentialInfo = [Microsoft.PowerShell.PSResourceGet.UtilClasses.PSCredentialInfo]::new('MySecretVault', 'MyCredential')
Pokud chcete ověřit, jestli se trezor a tajný klíč úspěšně vytvořily, spusťte následující příkaz, který zobrazí seznam všech tajných kódů:
PS > Get-SecretInfo Name Type VaultName ---- ---- --------- MyCredential PSCredential MySecretVault
Spuštěním následujícího příkazu zaregistrujte úložiště PowerShellu. Odkaz najdete
SourceLocation
tak, že přejdete na >> pod adresou URL zdroje oddílu projektu.Informační kanál s oborem projektu:
Register-PSResourceRepository -Name "PowershellPSResourceRepository" ` -Uri "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" ` -Trusted ` -CredentialInfo $CredentialInfo
Informační kanál s oborem organizace:
Register-PSResourceRepository -Name "PowershellPSResourceRepository" ` -Uri "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" ` -Trusted ` -CredentialInfo $CredentialInfo
Tip
Některé verze PowerShellu můžou po spuštění
Register-PSResourceRepository
rutiny vyžadovat spuštění nové relace, aby se zabránilo zobrazení upozornění Na zdroj balíčku nejde vyřešit.Pokud chcete ověřit, jestli se úložiště úspěšně zaregistrovalo, spusťte následující příkaz, který načte všechna registrovaná úložiště pro aktuálního uživatele:
Get-PSResourceRepository
Poznámka:
Pokud dojde k chybě: Stavový kód odpovědi nehlásí úspěch: 404 (Nenalezena)., ujistěte se, že zdrojová adresa URL odkazuje nuget/v3/index.json
místo nuget/v2
.
Publikování balíčku
Spuštěním následujícího příkazu publikujte balíček do informačního kanálu:
Publish-PSResource -Path <PACKAGE_PATH> -Repository <REPOSITORY_NAME> -ApiKey (Get-Secret <SECRET_NAME>)
Příklad:
PS C:\AzureDevOps\Demos\PowerShellDemo> Publish-PSResource -Path .\scripts\ -Repository FabrikamFiberFeed -ApiKey (Get-Secret MyNewCredential) -verbose
VERBOSE: Performing the operation "Publish-PSResource" on target "Publish resource
'C:\AzureDevOps\Demos\PowerShellDemo\scripts\' from the machine".
VERBOSE: The newly created nuspec is:
C:\Users\xxxx\AppData\Local\Temp\xxxxxxxxx\PowerShell-Demo.nuspec
VERBOSE: credential successfully read from vault and set for repository: FabrikamFiberFeed
VERBOSE: Successfully packed the resource into a .nupkg
VERBOSE: Successfully published the resource to
'https://pkgs.dev.azure.com/ramiMSFTDevOps/DemoProject/_packaging/FabrikamFiberFeed/nuget/v3/index.json'
VERBOSE: Deleting temporary directory 'C:\Users\xxxx\AppData\Local\Temp\xxxxxxx'
Instalace balíčku
Pokud chcete ověřit, jestli je modul ve vašem úložišti dostupný, vyhledejte ho pomocí následujícího příkazu:
Find-PSResource -Name <RESOURCE_NAME> -Repository <REPOSITORY_NAME> -verbose
Spuštěním následujícího příkazu nainstalujte nejnovější stabilní verzi modulu:
Install-PSResource <MODULE_NAME>
Tip
Pokud dojde k chybě: Výjimka volání WriteObject., spusťte nové okno PowerShellu a spusťte Get-SecretInfo
. Před spuštěním příkazu Find-PSResource a Install-PSResource zadejte heslo trezoru, protože vypršení časového limitu secretStore může vypršet. Výchozí hodnota PasswordTimeout je 900 sekund, ale tuto hodnotu můžete podle potřeby upravit. Další podrobnosti najdete v tématu Použití secretStore v automatizaci .
V tomto článku se naučíte:
- Vytvoření osobního přístupového tokenu
- Vytvoření, zabalení a publikování modulu PowerShellu
- Připojení k informačnímu kanálu jako úložiště PowerShellu
- Registrace a instalace modulu PowerShellu pomocí Azure Pipelines
Požadavky
Pokud jste to ještě neudělali, vytvořte organizaci Azure DevOps a projekt.
Pokud ho ještě nemáte, vytvořte nový informační kanál .
Nainstalujte zprostředkovatele přihlašovacích údajů Azure Artifacts.
Nainstalujte nástroj Windows MSBuild pomocí jedné z následujících možností:
Nainstalujte NuGet(.exe) verze 4.8.0.5385 nebo novější.
Nainstalujte modul runtime dotnet verze 8.0.x nebo novější.
Nainstalujte PowerShell 6.0 nebo novější, abyste měli jistotu, že máte odpovídající PowerShellGet a verze PackageManagement.
Vytvoření osobního přístupového tokenu (PAT)
Osobní přístupový token funguje jako vaše digitální identita a slouží jako alternativní heslo k ověření v Azure DevOps.
Přejděte do vaší organizace Azure DevOps.
https://dev.azure.com/<ORGANIZATION_NAME>/
Vyberte ikonu nastavení uživatele, vyberte Osobní přístupové tokeny a pak vyberte Nový token.
Zadejte název pat, nastavte datum vypršení platnosti, vyberte Vlastní definované a pak vyberte Balení>pro čtení, zápis a správu.
Po dokončení vyberte Vytvořit a ujistěte se, že pat kopírujete a ukládáte do bezpečného umístění.
Vytvoření modulu PowerShellu
Pokud nemáte vlastní modul, postupujte podle pokynů v této části a vytvořte ukázkový modul PowerShellu. V opačném případě přejděte k dalšímu kroku:
Vytvořte novou složku Get-Hello. Přejděte do složky a vytvořte nový soubor Get-Hello.psm1.
Do souboru Get-Hello.psm1 vložte následující skript:
Function Get-Hello{ Write-Host "Hello Azure DevOps!" }
Vygenerujte manifest modulu spuštěním následujícího příkazu v adresáři Get-Hello :
New-ModuleManifest -Path .\Get-Hello.psd1
Otevřete soubor Get-Hello.psd1 a vyhledejte proměnnou
RootModule
. Toto nastavení určuje hlavní soubor skriptu, který PowerShell načte při importu modulu. Nahraďte prázdný řetězec cestou k souboru Get-Hello.psm1 :RootModule = 'Get-Hello.psm1'
Část
FunctionsToExport
určuje, které funkce jsou přístupné uživatelům při importu modulu. Zahrňte funkci Get-Hello :FunctionsToExport = @('Get-Hello')
FileList
Vyhledejte oddíl, který určuje soubory zahrnuté při balení modulu. Přidejte soubor, který chcete zabalit do modulu:FileList = @('./Get-Hello.psm1')
Zabalení a publikování modulu
Vygenerujte soubor nuspec pro váš modul. Tento příkaz vytvoří soubor Get-Hello.nuspec obsahující potřebná metadata pro zabalení modulu:
nuget spec Get-Hello
Spuštěním následujícího příkazu zabalte modul:
nuget pack Get-Hello.nuspec
Spuštěním následujícího příkazu přidejte adresu URL zdroje informačního kanálu. Ujistěte se, že ve zdrojové adrese URL zdroje informačního kanálu používáte V2, protože NuGet V3 se nepodporuje.
Informační kanál s oborem organizace:
nuget sources Add -Name "<FEED_NAME>" -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -username "<USER_NAME>" -password "<PERSONAL_ACCESS_TOKEN>"
Informační kanál s oborem projektu:
nuget sources Add -Name "<FEED_NAME>" -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2" -username "<USER_NAME>" -password "<PERSONAL_ACCESS_TOKEN>"
Publikujte balíček do informačního kanálu:
nuget push -Source "<FEED_NAME>" -ApiKey "<ANY_STRING>" "<PACKAGE_PATH>"
Důležité
Číslo verze v manifestu modulu (.psd1) musí být stejné jako číslo verze v souboru .nuspec .
Připojení k informačnímu kanálu jako úložiště PowerShellu
Tato část vás provede ověřováním v informačním kanálu jako úložištěm PowerShellu a využíváním modulu hostovaného ve vašem informačním kanálu:
V okně příkazového řádku PowerShellu spusťte následující příkaz, který nastaví vaše přihlašovací údaje. Zástupné symboly nahraďte příslušnými informacemi.
$patToken = "<PERSONAL_ACCESS_TOKEN>" | ConvertTo-SecureString -AsPlainText -Force $credsAzureDevopsServices = New-Object System.Management.Automation.PSCredential("<USER_NAME>", $patToken)
Zaregistrujte své úložiště PowerShellu. Odkaz najdete
SourceLocation
tak, že přejdete na >> pod adresou URL zdroje oddílu projektu.Informační kanál s oborem projektu:
Register-PSRepository -Name <REPOSITORY_NAME> -SourceLocation "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2" -PublishLocation "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2" -InstallationPolicy Trusted -Credential $credsAzureDevopsServices
Informační kanál s oborem organizace:
Register-PSRepository -Name <REPOSITORY_NAME> -SourceLocation "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -PublishLocation "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -InstallationPolicy Trusted -Credential $credsAzureDevopsServices
Tip
Některé verze PowerShellu můžou po spuštění
Register-PSRepository
rutiny vyžadovat spuštění nové relace, aby se zabránilo zobrazení upozornění Na zdroj balíčku nejde vyřešit.Zaregistrujte zdroj balíčku:
Informační kanál s oborem projektu:
Register-PackageSource -Name <REPOSITORY_NAME> -Location "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2" -ProviderName NuGet -Trusted -SkipValidate -Credential $credsAzureDevopsServices
Informační kanál s oborem organizace:
Register-PackageSource -Name <REPOSITORY_NAME> -Location "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -ProviderName NuGet -Trusted -SkipValidate -Credential $credsAzureDevopsServices
Poznámka:
- Register-PSRepository: Slouží k registraci úložiště PowerShellu k vyhledání a instalaci modulů.
- Register-PackageSource: Slouží k registraci zdroje balíčku pro hledání a publikování balíčků.
Pokud chcete ověřit, jestli se úložiště úspěšně zaregistrovalo, spusťte následující příkaz, který načte všechna registrovaná úložiště pro aktuálního uživatele:
Get-PSRepository
Spuštěním následujícího příkazu nainstalujte modul Get-Hello .
Install-Module -Name <PACKAGE_NAME> -Repository <REPOSITORY_NAME>
Poznámka:
Pokud vaše organizace používá bránu firewall nebo proxy server, ujistěte se, že povolíte přístup k adresám URL a IP adresám domény Azure Artifacts.
Instalace balíčku z kanálu
Tento příklad vás provede ověřením pomocí informačního kanálu Azure Artifacts a instalací modulu PowerShellu z kanálu. Pokud chcete použít osobní přístupový token, přidejte ho jako proměnnou kanálu, jak je znázorněno níže:
Přihlaste se ke své organizaci Azure DevOps a přejděte k projektu.
Vyberte Kanály, vyberte definici kanálu a pak vyberte Upravit a upravte kanál.
V pravém horním rohu vyberte Proměnné a pak vyberte Nová proměnná.
Zadejte název proměnné a vložte svůj osobní přístupový token do textového pole Hodnota.
Ujistěte se, že zaškrtnete políčko Zachovat tento tajný kód hodnoty. Až to budete hotovi, vyberte OK .
Přidejte druhou proměnnou pro název uživatele. Zadejte název proměnné a do textového pole Hodnota zadejte název uživatele.
Až budete hotovi, zvolte tlačítko Uložit.
trigger:
- main
pool:
vmImage: 'Windows-latest'
variables:
PackageFeedEndpoint: 'https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2' ## For organization scoped feeds use'https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2'
steps:
- powershell: |
$pat = ConvertTo-SecureString ${env:pat_token} -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential("${env:userName}", $pat)
Register-PSRepository -Name <REPOSITORY_NAME> -SourceLocation "$(PackageFeedEndpoint)" -InstallationPolicy Trusted -Credential $credential
displayName: 'Register PSRepository'
env:
pat_token: $patToken
userName: $userName
- powershell: |
nuget install <PACKAGE_NAME> -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json"
displayName: 'Install module'