Azure Artifacts-hírcsatorna használata privát PowerShell-adattárként

Azure DevOps Services

Az Azure Artifacts kényelmes megoldást kínál a PowerShell-szkriptek megosztására. Az Azure Artifacts-hírcsatornák használatával zökkenőmentesen közzéteheti PowerShell-moduljait a parancssorból, és a hírcsatorna-beállításokon keresztül szabályozhatja a hozzájuk való hozzáférést. Ez a cikk végigvezeti az Azure Artifacts-hírcsatorna privát PowerShell-adattárként való beállításán a PowerShell-modulok tárolásához és megosztásához.

Ebből a cikkből megtudhatja, hogyan:

  • Személyes hozzáférési jogkivonat létrehozása
  • PowerShell-modul létrehozása
  • SecretStore-tároló létrehozása és adattár regisztrálása
  • Csomagok közzététele és felhasználása hírcsatornából

Előfeltételek

Feljegyzés

A PSResourceGet nem támogatja az Azure Artifacts hitelesítőadat-szolgáltatót.

Személyes hozzáférési jogkivonat létrehozása

A személyes hozzáférési jogkivonatok digitális identitásként szolgálnak, és alternatív jelszóként szolgálnak az Azure DevOps használatával történő hitelesítéshez.

  1. Navigálás az Azure DevOps-szervezethez https://dev.azure.com/<ORGANIZATION_NAME>/

  2. Válassza a felhasználói beállítások ikont, válassza a Személyes hozzáférési jogkivonatok lehetőséget, majd az Új jogkivonat lehetőséget.

  3. Adja meg a PAT nevét, adja meg a lejárati dátumot, válassza az Egyénileg meghatározott, majd a csomagolás>olvasása, írása és kezelése lehetőséget.

  4. Ha elkészült, válassza a Létrehozás lehetőséget, és győződjön meg arról, hogy a PAT-t biztonságos helyen másolja és tárolja.

    Képernyőkép egy új személyes hozzáférési jogkivonat beállításáról.

PowerShell-modul létrehozása

Ha nem rendelkezik saját modullal, az ebben a szakaszban található utasításokat követve hozzon létre egy PowerShell-mintamodult. Ellenkező esetben ugorjon a következő lépésre:

  1. Hozzon létre egy új mappát PowerShell-Demo. Navigáljon a mappába, és hozzon létre egy új fájlt PowerShell-Demo.psm1 néven.

  2. Illessze be az alábbi szkriptet a PowerShell-Demo.psm1 fájlba:

    Function PowerShell-Demo{
        Write-Host "Hello World!"
    }
    
  3. Hozza létre a moduljegyzéket a következő parancs futtatásával a PowerShell-Demo könyvtárban:

    New-ModuleManifest -Path .\PowerShell-Demo.psd1
    
  4. Nyissa meg a PowerShell-Demo.psd1 fájlt, és keresse meg a változót RootModule . Ez a beállítás megadja a PowerShell által a modul importálásakor betölthető fő szkriptfájlt. Cserélje le az üres sztringet a PowerShell-Demo.psm1 fájl elérési útjára.

    RootModule = 'PowerShell-Demo.psm1'
    
  5. A FunctionsToExport szakasz meghatározza, hogy mely függvények érhetők el a felhasználók számára a modul importálásakor. Adja meg a PowerShell-Demo függvényt:

    FunctionsToExport = @('PowerShell-Demo')
    
  6. Keresse meg azt a FileList szakaszt, amely felsorolja a modul csomagolásakor szereplő fájlokat. Adja hozzá a modulhoz csomagolni kívánt fájlt:

    FileList = @('./PowerShell-Demo.psm1')
    

Adattár regisztrálása

  1. Az alábbi parancs futtatásával hozzon létre egy hitelesítő objektumot. Cserélje le a helyőrzőket a megfelelő információra.

    $username = "<USER_NAME>"
    $patToken = "<PERSONAL_ACCESS_TOKEN>" | ConvertTo-SecureString -AsPlainText -Force
    
    $credentials = New-Object System.Management.Automation.PSCredential($username, $patToken)
    
  2. Győződjön meg arról, hogy a SecretManagement és a SecretStore telepítve van, majd futtassa a következő parancsot egy tároló létrehozásához és egy titkos kód hozzáadásához:

    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. Annak ellenőrzéséhez, hogy a tároló és a titkos kulcs sikeresen létrejött-e, futtassa a következő parancsot az összes titkos kulcs listázásához:

    PS > Get-SecretInfo
    
    Name            Type         VaultName
    ----            ----         ---------
    MyCredential    PSCredential MySecretVault
    
    
  4. Futtassa a következő parancsot a PowerShell-adattár regisztrálásához. A hivatkozást a SourceLocation menüpontban találja meg, a Projekt beállítás részben a következőn: > URL, amely a NuGet.exe-hez kapcsolódik.

    • Projekt hatókörű hírcsatorna:

      Register-PSResourceRepository -Name "PowershellPSResourceRepository" `
          -Uri "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" `
          -Trusted `
          -CredentialInfo $CredentialInfo
      
    • Szervezeti hatókörű hírfolyam

      Register-PSResourceRepository -Name "PowershellPSResourceRepository" `
          -Uri "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" `
          -Trusted `
          -CredentialInfo $CredentialInfo
      

    Tipp.

    A PowerShell néhány verziójában szükség lehet egy új munkamenet indítására a Register-PSResourceRepository parancsmag futtatása után, hogy elkerüljük a csomagforrás nem található figyelmeztetést.

  5. Annak ellenőrzéséhez, hogy az adattár sikeresen regisztrálva lett-e, futtassa a következő parancsot az aktuális felhasználó összes regisztrált adattárának lekéréséhez:

    Get-PSResourceRepository
    

Feljegyzés

Ha a következő hibaüzenet jelenik meg: A válaszüzenet állapotkódja nem jelzi a sikert: 404 (Nem található)., győződjön meg arról, hogy a forrás URL-címe a nuget/v3/index.json-re mutat ahelyett, hogy a nuget/v2-re.

Csomag közzététele

Futtassa a következő parancsot a csomag hírcsatornában való közzétételéhez. Cserélje le a helyőrzőket a csomag elérési útjára, az adattár nevére, a korábban létrehozott hitelesítő objektumra, és adjon meg bármilyen sztringet az ApiKey számára.

Publish-PSResource -Path <PACKAGE_PATH> -Repository <REPOSITORY_NAME> -Credential $credentials -ApiKey <ANY_STRING>

Példa:

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'

Képernyőkép a hírcsatornában közzétett PowerShell-bemutatócsomagról.

Csomag telepítése

  1. Annak ellenőrzéséhez, hogy a modul elérhető-e az adattárban, a következő paranccsal keressen rá:

    Find-PSResource -Name <RESOURCE_NAME> -Repository <REPOSITORY_NAME> -verbose
    
  2. Futtassa a következő parancsot a modul legújabb stabil verziójának telepítéséhez:

    Install-PSResource <MODULE_NAME>
    

Tipp.

Ha a következő hibaüzenet jelenik meg: kivétel a "WriteObject" hívásakor., indítson el egy új PowerShell-ablakot, és futtassa a következőt: Get-SecretInfo. Adja meg a tároló jelszavát a Find-PSResource és Install-PSResource futtatása előtt, mivel a SecretStore időtúllépési időszaka lejárhat. Az alapértelmezett PasswordTimeout 900 másodperc, de szükség szerint módosíthatja ezt az értéket. További részletekért lásd : A SecretStore használata az automatizálásban .

Ebből a cikkből megtudhatja, hogyan:

  • Személyes hozzáférési jogkivonat létrehozása
  • PowerShell-modul létrehozása, csomagolása és közzététele
  • Csatlakozás a hírcsatornához PowerShell-adattárként
  • PowerShell-modul regisztrálása és telepítése az Azure Pipelines használatával

Előfeltételek

Személyes hozzáférési jogkivonat létrehozása

A személyes hozzáférési jogkivonatok digitális identitásként szolgálnak, és alternatív jelszóként szolgálnak az Azure DevOps használatával történő hitelesítéshez.

  1. Navigálás az Azure DevOps-szervezethez https://dev.azure.com/<ORGANIZATION_NAME>/

  2. Válassza a felhasználói beállítások ikont, válassza a Személyes hozzáférési jogkivonatok lehetőséget, majd az Új jogkivonat lehetőséget.

  3. Adja meg a PAT nevét, adja meg a lejárati dátumot, válassza az Egyénileg meghatározott, majd a csomagolás>olvasása, írása és kezelése lehetőséget.

  4. Ha elkészült, válassza a Létrehozás lehetőséget, és győződjön meg arról, hogy a PAT-t biztonságos helyen másolja és tárolja.

    Képernyőkép egy új személyes hozzáférési jogkivonat beállításáról.

PowerShell-modul létrehozása

Ha nem rendelkezik saját modullal, az ebben a szakaszban található utasításokat követve hozzon létre egy PowerShell-mintamodult. Ellenkező esetben ugorjon a következő lépésre:

  1. Hozzon létre egy új mappát Get-Hello. Lépjen a mappába, és hozzon létre egy új fájlt , a Get-Hello.psm1 fájlt.

  2. Illessze be a következő szkriptet a Get-Hello.psm1 fájlba:

    Function Get-Hello{
        Write-Host "Hello Azure DevOps!"
    }
    
  3. Hozza létre a moduljegyzéket az alábbi parancs futtatásával a Get-Hello könyvtárban:

    New-ModuleManifest -Path .\Get-Hello.psd1
    
  4. Nyissa meg a Get-Hello.psd1 fájlt, és keresse meg a változót RootModule . Ez a beállítás megadja a PowerShell által a modul importálásakor betölthető fő szkriptfájlt. Cserélje le az üres karakterláncot a Get-Hello.psm1 fájl elérési útjára:

    RootModule = 'Get-Hello.psm1'
    
  5. A FunctionsToExport szakasz meghatározza, hogy mely függvények érhetők el a felhasználók számára a modul importálásakor. Adja meg a Get-Hello függvényt:

    FunctionsToExport = @('Get-Hello')
    
  6. Keresse meg a FileList szakaszt, amely meghatározza a modul csomagolásakor szereplő fájlokat. Adja hozzá a modulhoz csomagolni kívánt fájlt:

    FileList = @('./Get-Hello.psm1')
    

Modul csomagolása és közzététele

  1. Nuspec-fájl létrehozása a modulhoz. Ez a parancs létrehoz egy Get-Hello.nuspec fájlt, amely tartalmazza a modul csomagolásához szükséges metaadatokat:

    nuget spec Get-Hello
    
  2. Futtassa a következő parancsot a modul becsomagolásához:

    nuget pack Get-Hello.nuspec
    
  3. Futtassa a következő parancsot a hírcsatorna forrás URL-címének hozzáadásához. Győződjön meg arról, hogy a V2-t használja a hírcsatorna forrás URL-címében, mivel a NuGet V3 nem támogatott.

    • Szervezeti hatókörű hírfolyam

      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>"
      
    • Projekt hatókörű hírcsatorna:

      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. Tegye közzé a csomagot a hírcsatornában:

    nuget push -Source "<FEED_NAME>" -ApiKey "<ANY_STRING>" "<PACKAGE_PATH>"
    

Fontos

A moduljegyzékben (.psd1) szereplő verziószámnak meg kell egyeznie a .nuspec fájl verziószámával.

Csatlakozás a hírcsatornához PowerShell-adattárként

Ez a szakasz végigvezeti a PowerShell-adattárként tárolt hírcsatornák hitelesítésén és a hírcsatornában üzemeltetett modul felhasználásán:

  1. A PowerShell parancssori ablakában futtassa az alábbi parancsot a hitelesítő adatok beállításához. Cserélje le a helyőrzőket a megfelelő információra.

    $patToken = "<PERSONAL_ACCESS_TOKEN>" | ConvertTo-SecureString -AsPlainText -Force
    
    $credsAzureDevopsServices = New-Object System.Management.Automation.PSCredential("<USER_NAME>", $patToken)
    
  2. Regisztrálja a PowerShell-adattárat. A hivatkozást a SourceLocation menüpontban találja meg, a Projekt beállítás részben a következőn: > URL, amely a NuGet.exe-hez kapcsolódik.

    • Projekt hatókörű hírcsatorna:

      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
      
    • Szervezeti hatókörű hírfolyam

      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
      

    Tipp.

    A PowerShell néhány verziójában szükség lehet egy új munkamenet indítására a Register-PSRepository parancsmag futtatása után, hogy elkerüljük a csomagforrás nem található figyelmeztetést.

  3. A csomag forrásának regisztrálása:

    • Projekt hatókörű hírcsatorna:

      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
      
    • Szervezeti hatókörű hírfolyam

      Register-PackageSource -Name <REPOSITORY_NAME> -Location "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -ProviderName NuGet -Trusted -SkipValidate -Credential $credsAzureDevopsServices 
      

    Feljegyzés

    • Register-PSRepository: PowerShell-adattár regisztrálásához használatos modulok kereséséhez és telepítéséhez.
    • Register-PackageSource: Csomagforrás regisztrálására szolgál a csomagok kereséséhez és közzétételéhez.
  4. Annak ellenőrzéséhez, hogy az adattár sikeresen regisztrálva lett-e, futtassa a következő parancsot az aktuális felhasználó összes regisztrált adattárának lekéréséhez:

    Get-PSRepository
    
  5. Futtassa a következő parancsot a Get-Hello modul telepítéséhez.

    Install-Module -Name <PACKAGE_NAME> -Repository <REPOSITORY_NAME>
    

Feljegyzés

Ha a szervezet tűzfalat vagy proxykiszolgálót használ, győződjön meg arról, hogy engedélyezi az Azure Artifacts-tartomány URL-címeinek és IP-címeinek elérését.

Csomag telepítése a futószalagról

Ez a példa végigvezeti az Azure Artifacts-hírcsatorna hitelesítésén és egy PowerShell-modul folyamatból való telepítésén. A személyes hozzáférési jogkivonat használatához adja hozzá folyamatváltozóként az alábbiak szerint:

  1. Jelentkezzen be az Azure DevOps-szervezetbe, és lépjen a projekthez.

  2. Válassza a Folyamatok lehetőséget, válassza ki a folyamatdefiníciót, majd válassza a Szerkesztés lehetőséget a folyamat módosításához.

  3. Válassza a változókat a jobb felső sarokban, majd válassza az Új változó lehetőséget.

  4. Adja meg a változó nevét, majd illessze be a személyes hozzáférési jogkivonatot az Érték szövegmezőbe.

  5. Győződjön meg arról, hogy bejelöli az Érték titkos kulcs megőrzése jelölőnégyzetet. Ha elkészült, válassza az OK gombot.

  6. Adjon hozzá egy második változót a userName elemhez. Adja meg a változó nevét, majd írja be a userName nevet az Érték szövegmezőbe.

  7. Ha végzett, válassza a Mentés lehetőséget.

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'

A nagyvállalati üzemelő példányok és a nevesített felhasználói fiókoktól független fokozott biztonság érdekében a SYSTEM_ACCESSTOKEN az Azure Artifact-hírcsatorna eléréséhez használható. Ebben a kontextusban nincs szükség felhasználónévre, és tetszőleges sztring is lehet a paraméterkövetelmények teljesítéséhez.

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)