Udostępnij za pośrednictwem


Używanie źródła danych usługi Azure Artifacts jako prywatnego repozytorium programu PowerShell

Azure DevOps Services

Usługa Azure Artifacts umożliwia łatwe udostępnianie skryptów programu PowerShell między zespołami w celu promowania współpracy i maksymalizacji skuteczności. Przechowując moduły programu PowerShell w prywatnym repozytorium, możesz dać członkom zespołu możliwość szybkiego pobierania lub aktualizowania tych skryptów przy użyciu wiersza polecenia.

Ten artykuł przeprowadzi Cię przez proces konfigurowania źródła danych usługi Azure Artifacts jako prywatnego repozytorium programu PowerShell do przechowywania i udostępniania modułów programu PowerShell. Dowiesz się, jak:

  • Tworzenie osobistego tokenu dostępu
  • Tworzenie nowego źródła danych do przechowywania modułów programu PowerShell
  • Tworzenie, pakowanie i publikowanie modułów programu PowerShell
  • Połączenie do kanału informacyjnego za pomocą programu PowerShell
  • Używanie prywatnego repozytorium programu PowerShell z usługą Azure Pipelines

Wymagania wstępne

Tworzenie osobistego tokenu dostępu

Użycie osobistego tokenu dostępu (PAT) to doskonały sposób uwierzytelniania za pomocą usługi Azure DevOps bez używania poświadczeń podstawowych. Aby uzyskać więcej informacji, zobacz Używanie osobistych tokenów dostępu.

  1. Przejdź do organizacji usługi Azure DevOps https://dev.azure.com/<ORGANIZATION_NAME>/

  2. Wybierz ikonę ustawień użytkownika, a następnie wybierz pozycję Osobiste tokeny dostępu.

    Zrzut ekranu przedstawiający sposób tworzenia osobistego tokenu dostępu.

  3. Wybieranie nowego tokenu

  4. Wprowadź nazwę identyfikatora pat, a następnie wybierz datę wygaśnięcia .

  5. Wybierz pozycję Zdefiniowane niestandardowe, a następnie wybierz pozycję Pakowanie>odczytu, zapisu i zarządzania.

  6. Po zakończeniu wybierz pozycję Utwórz . Skopiuj i zapisz swój pat w bezpiecznej lokalizacji.

    Zrzut ekranu przedstawiający sposób konfigurowania nowego osobistego tokenu dostępu.

Tworzenie modułu

  1. Utwórz nowy folder Get-Hello. Przejdź do folderu i utwórz nowy plik Get-Hello.psm1.

    |--- Get-Hello               // Parent folder     
        |--- Get-Hello.psm1     // This will become our PowerShell Module
        |--- Get-Hello.psd1    // This will become our module manifest
    
  2. Wklej następujący skrypt do pliku Get-Hello.psm1 :

    Function Get-Hello{
        Write-Host "Hello from my Azure DevOps Services Package."
    }
    
  3. Utwórz manifest modułu, uruchamiając następujące polecenie w ścieżce katalogu Get-Hello .

    New-ModuleManifest -Path .\Get-Hello.psd1
    
  4. Otwórz plik Get-Hello.psd1 i znajdź zmiennąRootModule. Zastąp pusty ciąg ścieżką do pliku Get-Hello.psm1 w następujący sposób:

    RootModule = 'Get-Hello.psm1'
    
  5. Sekcja FunctionsToExport ma na celu zdefiniowanie listy funkcji, które zostaną wyeksportowane z tego modułu. Dodaj funkcję Get-Hello w następujący sposób:

    FunctionsToExport = @('Get-Hello')
    
  6. Znajdź sekcję FileList i dodaj następującą listę plików, które powinny być spakowane przy użyciu modułu.

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

Pakowanie i publikowanie modułu

  1. Utwórz plik nuspec dla modułu. To polecenie spowoduje utworzenie pliku Get-Hello.nuspec zawierającego metadane potrzebne do spakowania modułu.

    nuget spec Get-Hello
    
  2. Uruchom następujące polecenie, aby spakować moduł.

    nuget pack Get-Hello.nuspec
    
  3. Uruchom następujące polecenie, aby dodać adres URL źródła kanału informacyjnego. Pakiet NuGet w wersji 3 nie jest obsługiwany. Upewnij się, że używasz wersji 2 w adresie URL źródła źródła danych.

    • Źródło danych o zakresie organizacji:

      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>"
      
    • Źródło danych o zakresie 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. Opublikuj pakiet w kanale informacyjnym.

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

    Zrzut ekranu przedstawiający opublikowany pakiet.

Ważne

Numer wersji w manifeście modułu (psd1) i plik nuspec musi być zgodny.

Połączenie do źródła danych jako repozytorium programu PowerShell

  1. Otwórz okno wiersza polecenia programu PowerShell z podwyższonym poziomem uprawnień.

  2. Skonfiguruj poświadczenia do uwierzytelniania w usłudze Azure Artifacts. Zastąp symbole zastępcze odpowiednimi informacjami.

    $patToken = "<PERSONAL_ACCESS_TOKEN>" | ConvertTo-SecureString -AsPlainText -Force
    
    $credsAzureDevopsServices = New-Object System.Management.Automation.PSCredential("<USER_NAME>", $patToken)
    
  3. Zarejestruj repozytorium programu PowerShell. Link SourceLocation można znaleźć, przechodząc do sekcji Artifacts> Połączenie to Feed>NuGet.exe w obszarze Adres URL źródła konfiguracji projektu.

    • Źródło danych o zakresie projektu:

      Register-PSRepository -Name "PowershellAzureDevopsServices" -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
      
    • Źródło danych o zakresie organizacji:

      Register-PSRepository -Name "PowershellAzureDevopsServices" -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
      

    Jeśli nadal używasz starszych visualstudio.com adresów URL, użyj następującego polecenia:

    • Źródło danych o zakresie projektu:

      Register-PSRepository -Name "PowershellAzureDevopsServices" -SourceLocation "https://<ORGANIZATION_NAME>.pkgs.visualstudio.com/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2" -PublishLocation "https://<ORGANIZATION_NAME>.pkgs.visualstudio.com/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2" -InstallationPolicy Trusted -Credential $credsAzureDevopsServices
      
    • Źródło danych o zakresie organizacji:

      Register-PSRepository -Name "PowershellAzureDevopsServices" -SourceLocation "https://<ORGANIZATION_NAME>.pkgs.visualstudio.com/_packaging/<FEED_NAME>/nuget/v2" -PublishLocation "https://<ORGANIZATION_NAME>.pkgs.visualstudio.com/_packaging/<FEED_NAME>/nuget/v2" -InstallationPolicy Trusted -Credential $credsAzureDevopsServices
      

    Napiwek

    Niektóre wersje programu PowerShell wymagają ponownego uruchomienia nowej sesji po wykonaniu Register-PSRepository polecenia cmdlet, aby uniknąć ostrzeżenia Nie można rozpoznać źródła pakietu.

  4. Zarejestruj źródło pakietu:

    • Źródło danych o zakresie projektu:

      Register-PackageSource -Name "PowershellAzureDevopsServices" -Location "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2" -ProviderName NuGet -Trusted -SkipValidate -Credential $credsAzureDevopsServices
      
    • Źródło danych o zakresie organizacji:

      Register-PackageSource -Name "PowershellAzureDevopsServices" -Location "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -ProviderName NuGet -Trusted -SkipValidate -Credential $credsAzureDevopsServices 
      
  5. Uruchom następujące polecenie, aby potwierdzić, czy repozytorium zostało pomyślnie zarejestrowane. To polecenie pobiera wszystkie zarejestrowane repozytoria dla bieżącego użytkownika:

    Get-PSRepository
    
  6. Uruchom następujące polecenie, jeśli chcesz znaleźć wszystkie moduły w repozytorium.

    Find-Module -Repository PowershellAzureDevopsServices
    
  7. Uruchom następujące polecenie, jeśli chcesz zainstalować moduł Get-Hello .

    Install-Module -Name Get-Hello -Repository PowershellAzureDevopsServices
    

Jeśli polecenie Install-Module zwraca następujący błąd: Nie można rozpoznać źródła pakietu, uruchom Register-PackageSource ponownie polecenie cmdlet z flagą w Trusted następujący sposób:

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

Uwaga

Jeśli twoja organizacja korzysta z zapory lub serwera proxy, upewnij się, że zezwalasz na adresy URL i adresy IP domeny usługi Azure Artifacts.

Rejestrowanie i instalowanie modułu przy użyciu usługi Azure Pipelines

W tym przykładzie przedstawiono proces uwierzytelniania i instalowania modułu programu PowerShell przy użyciu potoku YAML. Aby użyć osobistego tokenu dostępu w potoku, należy uwzględnić go jako zmienną potoku w następujący sposób:

  1. Zaloguj się do organizacji usługi Azure DevOps, a następnie przejdź do projektu.

  2. Wybierz pozycję Potoki, wybierz potok, a następnie wybierz pozycję Edytuj , aby edytować potok.

  3. Wybierz pozycję Zmienne w prawym górnym rogu, a następnie wybierz + znak, aby utworzyć nową zmienną.

  4. Podaj nazwę zmiennej, a następnie wklej osobisty token dostępu w polu tekstowym Wartość.

  5. Upewnij się, że zaznaczono pole wyboru Zachowaj tę wartość wpisów tajnych . Po zakończeniu wybierz przycisk OK . Teraz możesz przystąpić do używania zmiennej w potoku.

trigger:
- main

pool:
  vmImage: 'Windows-latest'

variables:
  PackageFeedEndpoint: 'https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2'  ## For project scoped feeds use: 'https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2'
  PackageFeedEndpointCredential: '{"endpointCredentials": [{"endpoint":"$(PackageFeedEndpoint)", "username":"Admin", "password":"$(AZURE_DEVOPS_PAT)"}]}'

steps:
- powershell: |
    Register-PSRepository -Name "psRepoPipeline" -SourceLocation '$(PackageFeedEndpoint)' -InstallationPolicy Trusted
  displayName: 'Register Azure Artifacts Feed as PSRepository'
  env:
    VSS_NUGET_EXTERNAL_FEED_ENDPOINTS: $(PackageFeedEndpointCredential)

- powershell: |
     echo (Get-PSRepository)
  displayName: 'Get all module repositories'

- powershell: |
    Find-Module -Name "Get-Hello" | Install-Module -Confirm:$false -Force
  displayName: 'Install the Get-Hello PowerShell module'
  env:
    VSS_NUGET_EXTERNAL_FEED_ENDPOINTS: $(PackageFeedEndpointCredential)