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 spotřeba balíčků ze zdroje

Požadavky

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.

  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 pro váš PAT, nastavte datum vypršení platnosti, vyberte Vlastní definice, a pak vyberte Balení>Číst, zapisovat a spravovat.

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

    Snímek obrazovky, který ukazuje, jak nastavit nový osobní přístupový token.

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 vašemu 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 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 $CredentialInfo
      
    • Informač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-PSResourceRepository cmdletu vyžadovat spuštění nové relace, aby se zabránilo zobrazení upozornění Nelze vyřešit zdroj balíčku.

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

Snímek obrazovky zobrazující ukázkový balíček PowerShellu publikovaný do 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>
    

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

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.

  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 pro váš PAT, nastavte datum vypršení platnosti, vyberte Vlastní definice, a pak vyberte Balení>Číst, zapisovat a spravovat.

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

    Snímek obrazovky, který ukazuje, jak nastavit nový osobní přístupový token.

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 vašemu 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 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>"
      
  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ěřením zdroje jako úložiště PowerShellu a využíváním modulu z vašeho zdroje:

  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 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 $credsAzureDevopsServices
      
    • Informač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-PSRepository cmdletu vyžadovat spuštění nové relace, aby se zabránilo zobrazení upozornění Nelze vyřešit zdroj balíčku.

  3. 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 $credsAzureDevopsServices
      
    • Informač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ů.
  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.

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:

  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 Ponechat tuto hodnotu v tajnosti. Až to budete hotovi, vyberte OK .

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

  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'

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)