Sdílet prostřednictvím


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

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.

  1. Přejděte do vaší organizace Azure DevOps. https://dev.azure.com/<ORGANIZATION_NAME>/

  2. Vyberte ikonu nastavení uživatele, vyberte Osobní přístupové tokeny a pak vyberte Nový token.

  3. Zadejte název pat, nastavte datum vypršení platnosti, vyberte Vlastní definované a pak vyberte Balení>pro čtení, zápis a správu.

  4. 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í.

    Snímek obrazovky, který ukazuje, jak nastavit nový token patu

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:

  1. Vytvořte novou složku PowerShell-Demo. Přejděte do složky a vytvořte nový soubor PowerShell-Demo.psm1.

  2. Do souboru PowerShell-Demo.psm1 vložte následující skript:

    Function PowerShell-Demo{
        Write-Host "Hello World!"
    }
    
  3. Vygenerujte manifest modulu spuštěním následujícího příkazu v adresáři PowerShell-Demo :

    New-ModuleManifest -Path .\PowerShell-Demo.psd1
    
  4. Otevřete soubor PowerShell-Demo.psd1 a vyhledejte proměnnouRootModule. 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'
    
  5. Čá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')
    
  6. 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ě

  1. 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)
    
  2. 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')
    
  3. 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
    
    
  4. Spuštěním následujícího příkazu zaregistrujte úložiště PowerShellu. Odkaz najdete SourceLocation tak, že přejdete na Artefakty>Connect k informačnímu kanálu>NuGet.exe pod adresou URL zdroje oddílu > Nastavení 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.

  5. 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'

Snímek obrazovky zobrazující ukázkový balíček PowerShellu publikovaný do informačního kanálu

Instalace balíčku

  1. 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
    
  2. 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

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.

  1. Přejděte do vaší organizace Azure DevOps. https://dev.azure.com/<ORGANIZATION_NAME>/

  2. Vyberte ikonu nastavení uživatele, vyberte Osobní přístupové tokeny a pak vyberte Nový token.

  3. Zadejte název pat, nastavte datum vypršení platnosti, vyberte Vlastní definované a pak vyberte Balení>pro čtení, zápis a správu.

  4. 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í.

    Snímek obrazovky, který ukazuje, jak nastavit nový token patu

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:

  1. Vytvořte novou složku Get-Hello. Přejděte do složky a vytvořte nový soubor Get-Hello.psm1.

  2. Do souboru Get-Hello.psm1 vložte následující skript:

    Function Get-Hello{
        Write-Host "Hello Azure DevOps!"
    }
    
  3. Vygenerujte manifest modulu spuštěním následujícího příkazu v adresáři Get-Hello :

    New-ModuleManifest -Path .\Get-Hello.psd1
    
  4. Otevřete soubor Get-Hello.psd1 a vyhledejte proměnnouRootModule. 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'
    
  5. Část FunctionsToExport určuje, které funkce jsou přístupné uživatelům při importu modulu. Zahrňte funkci Get-Hello :

    FunctionsToExport = @('Get-Hello')
    
  6. 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

  1. 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
    
  2. Spuštěním následujícího příkazu zabalte modul:

    nuget pack Get-Hello.nuspec
    
  3. 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>"
      
  4. 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:

  1. 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)
    
  2. Zaregistrujte své úložiště PowerShellu. Odkaz najdete SourceLocation tak, že přejdete na Artefakty>Connect k informačnímu kanálu>NuGet.exe pod adresou URL zdroje oddílu > Nastavení 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.

  3. 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ů.
  4. 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
    
  5. 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:

  1. Přihlaste se ke své organizaci Azure DevOps a přejděte k projektu.

  2. Vyberte Kanály, vyberte definici kanálu a pak vyberte Upravit a upravte kanál.

  3. V pravém horním rohu vyberte Proměnné a pak vyberte Nová proměnná.

  4. Zadejte název proměnné a vložte svůj osobní přístupový token do textového pole Hodnota.

  5. Ujistěte se, že zaškrtnete políčko Zachovat tento tajný kód hodnoty. Až to budete hotovi, vyberte OK .

  6. 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.

  7. 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'