Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 spotřeba balíčků ze zdroje
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 nepodporuje s modulem PSResourceGet.
Vytvořte osobní přístupový token
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 pro váš PAT, nastavte datum vypršení platnosti, vyberte Vlastní definice, a pak vyberte Balení>Číst, zapisovat a spravovat.
Po dokončení vyberte Vytvořit a ujistěte se, že osobní přístupový token (PAT) zkopírujete a uložíte na bezpečné místo.
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.psd1Otevř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 vašemu souboru PowerShell-Demo.psm1.RootModule = 'PowerShell-Demo.psm1'Část
FunctionsToExporturčuje, které funkce jsou přístupné uživatelům při importu modulu. Zahrňte svoji funkci PowerShell-Demo :FunctionsToExport = @('PowerShell-Demo')FileListVyhledejte 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 MySecretVaultSpuštěním následujícího příkazu zaregistrujte úložiště PowerShellu. Odkaz najdete tak, že přejdete na
SourceLocation>> v oddílu Nastavení projektu pod adresou URL zdroje.Informační kanál v rámci projektu
Register-PSResourceRepository -Name "PowershellPSResourceRepository" ` -Uri "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" ` -Trusted ` -CredentialInfo $CredentialInfoInformační kanál v rámci organizace
Register-PSResourceRepository -Name "PowershellPSResourceRepository" ` -Uri "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" ` -Trusted ` -CredentialInfo $CredentialInfo
Návod
Některé verze PowerShellu mohou po použití
Register-PSResourceRepositorycmdletu vyžadovat spuštění nové relace, aby se zabránilo zobrazení upozornění Nelze vyřešit zdroj balíčku.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 vašeho kanálu. Zástupné symboly nahraďte cestou balíčku, názvem úložiště, objektem přihlašovacích údajů, který jste vytvořili dříve, a zadejte libovolný řetězec pro ApiKey.
Publish-PSResource -Path <PACKAGE_PATH> -Repository <REPOSITORY_NAME> -Credential $credentials -ApiKey <ANY_STRING>
Příklad:
PS C:\AzureDevOps\Demos\PowerShellDemo> Publish-PSResource -Path .\scripts\ -Repository FabrikamFiberFeed -Credential $credentials -ApiKey az -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> -verboseSpuštěním následujícího příkazu nainstalujte nejnovější stabilní verzi modulu:
Install-PSResource <MODULE_NAME>
Návod
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 Find-PSResource a Install-PSResource zadejte heslo trezoru, protože doba platnosti 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řte osobní přístupový token
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 pro váš PAT, nastavte datum vypršení platnosti, vyberte Vlastní definice, a pak vyberte Balení>Číst, zapisovat a spravovat.
Po dokončení vyberte Vytvořit a ujistěte se, že osobní přístupový token (PAT) zkopírujete a uložíte na bezpečné místo.
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.psd1Otevř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 vašemu souboru Get-Hello.psm1:RootModule = 'Get-Hello.psm1'Část
FunctionsToExporturčuje, které funkce jsou přístupné uživatelům při importu modulu. Zahrňte funkci Get-Hello :FunctionsToExport = @('Get-Hello')FileListVyhledejte 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-HelloSpuštěním následujícího příkazu zabalte modul:
nuget pack Get-Hello.nuspecSpuš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 v rámci 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 v rámci 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ěřením zdroje jako úložiště PowerShellu a využíváním modulu z vašeho zdroje:
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 tak, že přejdete na
SourceLocation>> v oddílu Nastavení projektu pod adresou URL zdroje.Informační kanál v rámci 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 $credsAzureDevopsServicesInformační kanál v rámci 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
Návod
Některé verze PowerShellu mohou po použití
Register-PSRepositorycmdletu vyžadovat spuštění nové relace, aby se zabránilo zobrazení upozornění Nelze vyřešit zdroj balíčku.Zaregistrujte zdroj balíčku:
Informační kanál v rámci 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 $credsAzureDevopsServicesInformační kanál v rámci 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-PSRepositorySpuš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.
Instalujte balíček z pipeline
Tento příklad vás provede ověřením pomocí informačního kanálu Azure Artifacts a instalací modulu PowerShell z vašeho pipeline. 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 Ponechat tuto hodnotu v tajnosti. Až to budete hotovi, vyberte OK .
Přidejte druhou proměnnou pro své uživatelské jméno. 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'
V případě podnikových nasazení a rozšířeného zabezpečení nezávisle na pojmenovaných uživatelských účtech je možné použít SYSTEM_ACCESSTOKEN pro přístup k informačnímu kanálu Azure Artifact. Uživatelské jméno není v tomto kontextu povinné a může být libovolný řetězec pro splnění požadavků na parametry.
steps:
- powershell: |
$token = $env:SYSTEM_ACCESSTOKEN | ConvertTo-SecureString -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential('ArbitraryPipelineUser', $token)
Register-PSRepository -Name <REPOSITORY_NAME> -SourceLocation "$(PackageFeedEndpoint)" -InstallationPolicy Trusted -Credential $credential
displayName: 'Register PSRepository'
env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken)