Aracılığıyla paylaş


Azure Artifacts akışını özel powershell deposu olarak kullanma

Azure DevOps Services

Azure Artifacts, PowerShell betiklerini paylaşmak için kullanışlı bir çözüm sağlar. Azure Artifacts akışlarını kullanarak PowerShell modüllerinizi komut satırından sorunsuz bir şekilde yayımlayabilir ve akış ayarlarınız aracılığıyla bunlara erişimi denetleyebilirsiniz. Bu makale, Azure Artifacts akışınızı PowerShell modüllerinizi depolamak ve paylaşmak için özel bir PowerShell deposu olarak ayarlama işleminde size yol gösterir.

Bu makalede şunları yapmayı öğreneceksiniz:

  • Kişisel Erişim Belirteci Oluşturma
  • PowerShell modülü oluşturma
  • SecretStore kasası oluşturma ve depo kaydetme
  • Bir akıştan paketleri yayımlama ve kullanma

Önkoşullar

Not

Azure Artifacts Kimlik Bilgisi Sağlayıcısı PSResourceGet ile desteklenmez.

Kişisel erişim belirteci oluşturma

Kişisel erişim belirteci, dijital kimliğiniz olarak görev yapar ve Azure DevOps ile kimliğinizi doğrulamak için alternatif bir parola görevi görür.

  1. Azure DevOps kuruluşunuza gidin https://dev.azure.com/<ORGANIZATION_NAME>/

  2. Kullanıcı ayarları simgesini seçin, Kişisel erişim belirteçleri'ni ve ardından Yeni Belirteç'i seçin.

  3. PAT'niz için bir ad girin, Süre sonu tarihi ayarlayın, Özel tanımlı'yı seçin ve ardından Paketleme>

  4. İşiniz bittiğinde Oluştur'u seçin ve PAT'nizi kopyalayıp güvenli bir konumda depoladığınızdan emin olun.

    Yeni bir kişisel erişim belirtecinin nasıl ayarlandığını gösteren ekran görüntüsü.

PowerShell modülü oluşturma

Kendi modülünüz yoksa, örnek bir PowerShell modülü oluşturmak için bu bölümdeki yönergeleri izleyin. Aksi takdirde, sonraki adıma geçin:

  1. PowerShell-Demo adlı yeni bir klasör oluşturun. Klasörünüzde gezinin ve yeni bir PowerShell-Demo.psm1 dosyası oluşturun.

  2. Aşağıdaki betiği PowerShell-Demo.psm1 dosyanıza yapıştırın:

    Function PowerShell-Demo{
        Write-Host "Hello World!"
    }
    
  3. PowerShell-Demo dizininizde aşağıdaki komutu çalıştırarak modül bildirimini oluşturun:

    New-ModuleManifest -Path .\PowerShell-Demo.psd1
    
  4. PowerShell-Demo.psd1 dosyanızı RootModule Bu ayar, modül içeri aktarıldığında PowerShell'in yüklendiği ana betik dosyasını belirtir. Boş dizeyi PowerShell-Demo.psm1 dosyanızın yoluyla değiştirin:

    RootModule = 'PowerShell-Demo.psm1'
    
  5. FunctionsToExport bölümünde, modülünüzü içeri aktaran kullanıcılara hangi işlevlerin erişebileceği belirtiliyor. PowerShell-Demo işlevinizi ekleyin:

    FunctionsToExport = @('PowerShell-Demo')
    
  6. FileList Modülü paketleme sırasında dahil edilen dosyaların listelendiği bölümü bulun. Modülünüzle birlikte paketlemek istediğiniz dosyayı ekleyin:

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

Depo kaydetme

  1. Bir kimlik bilgisi nesnesi oluşturmak için aşağıdaki komutu çalıştırın. Yer tutucuları doğru bilgilerle değiştirin.

    $username = "<USER_NAME>"
    $patToken = "<PERSONAL_ACCESS_TOKEN>" | ConvertTo-SecureString -AsPlainText -Force
    
    $credentials = New-Object System.Management.Automation.PSCredential($username, $patToken)
    
  2. SecretManagement ve SecretStore'un yüklü olduğundan emin olun, ardından bir kasa oluşturmak ve gizli dizi eklemek için aşağıdaki komutu çalıştırın:

    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. Kasanın ve gizli dizinin başarıyla oluşturulup oluşturulmadığını doğrulamak için aşağıdaki komutu çalıştırarak tüm gizli dizilerinizi listeleyin:

    PS > Get-SecretInfo
    
    Name            Type         VaultName
    ----            ----         ---------
    MyCredential    PSCredential MySecretVault
    
    
  4. PowerShell deponuzu kaydetmek için aşağıdaki komutu çalıştırın. Yapıtlar> giderek, Proje kurulumu bölümü kaynak URL'si altında bağlantıyı bulabilirsiniz.>

    • Proje kapsamlı akış:

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

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

    İpucu

    Bazı PowerShell sürümleri, paket kaynağı çözümlenemiyor uyarısıyla Register-PSResourceRepository karşılaşmamak için cmdlet'i çalıştırdıktan sonra yeni bir oturum başlatmayı gerektirebilir.

  5. Deponun başarıyla kaydedilip kaydedilmediğini doğrulamak için, geçerli kullanıcının tüm kayıtlı depolarını almak üzere aşağıdaki komutu çalıştırın:

    Get-PSResourceRepository
    

Not

Şu hatayla karşılaşırsanız: Yanıt durum kodu başarılı olduğunu göstermiyor: 404 (Bulunamadı)., kaynak URL'nizin yerine nuget/v3/index.jsonişaret nuget/v2 olduğundan emin olun.

Bir paket yayımlayın

Paketi akışınızda yayımlamak için aşağıdaki komutu çalıştırın:

Publish-PSResource -Path <PACKAGE_PATH> -Repository <REPOSITORY_NAME> -ApiKey (Get-Secret <SECRET_NAME>) 

Örnek:

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'

Akışta yayımlanan PowerShell tanıtım paketini gösteren ekran görüntüsü.

Paketi yükleme

  1. Modülün deponuzda kullanılabilir olup olmadığını onaylamak için aşağıdaki komutu kullanarak bu modülü arayın:

    Find-PSResource -Name <RESOURCE_NAME> -Repository <REPOSITORY_NAME> -verbose
    
  2. Modülünüzün en son kararlı sürümünü yüklemek için aşağıdaki komutu çalıştırın:

    Install-PSResource <MODULE_NAME>
    

İpucu

Şu hatayla karşılaşırsanız: "WriteObject" çağrısı özel durumu. Yeni bir PowerShell penceresi başlatın ve komutunu çalıştırın Get-SecretInfo. Gizli Depo zaman aşımı süresi dolana kadar Find-PSResource ve Install-PSResource'u çalıştırmadan önce kasa parolanızı girin. Varsayılan PasswordTimeout 900 saniyedir, ancak bu değeri gerektiği gibi değiştirebilirsiniz. Daha fazla ayrıntı için bkz . Otomasyonda SecretStore kullanma.

Bu makalede şunları yapmayı öğreneceksiniz:

  • Kişisel Erişim Belirteci Oluşturma
  • PowerShell modülü oluşturma, paketleme ve yayımlama
  • Bir akışa PowerShell deposu olarak bağlanma
  • Azure Pipelines kullanarak PowerShell modülü kaydetme ve yükleme

Önkoşullar

  • Henüz yapmadıysanız bir Azure DevOps kuruluşu ve proje oluşturun.

  • Henüz yoksa yeni bir akış oluşturun.

  • Azure Artifacts Kimlik Bilgisi Sağlayıcısı'nı yükleyin.

  • Windows MSBuild'i aşağıdaki seçeneklerden birini kullanarak yükleyin:

  • Yükleyin NuGet(.exe) sürümünün 4.8.0.5385 veya daha yeni olanını.

  • 8.0.x veya sonraki dotnet runtime sürümünü yükleyin.

Kişisel erişim belirteci oluşturma

Kişisel erişim belirteci, dijital kimliğiniz olarak görev yapar ve Azure DevOps ile kimliğinizi doğrulamak için alternatif bir parola görevi görür.

  1. Azure DevOps kuruluşunuza gidin https://dev.azure.com/<ORGANIZATION_NAME>/

  2. Kullanıcı ayarları simgesini seçin, Kişisel erişim belirteçleri'ni ve ardından Yeni Belirteç'i seçin.

  3. PAT'niz için bir ad girin, Süre sonu tarihi ayarlayın, Özel tanımlı'yı seçin ve ardından Paketleme>

  4. İşiniz bittiğinde Oluştur'u seçin ve PAT'nizi kopyalayıp güvenli bir konumda depoladığınızdan emin olun.

    Yeni bir kişisel erişim belirtecinin nasıl ayarlandığını gösteren ekran görüntüsü.

PowerShell modülü oluşturma

Kendi modülünüz yoksa, örnek bir PowerShell modülü oluşturmak için bu bölümdeki yönergeleri izleyin. Aksi takdirde, sonraki adıma geçin:

  1. Get-Hello adlı yeni bir klasör oluşturun. Klasörünüzde gezinin ve yeni bir Get-Hello.psm1 dosyası oluşturun.

  2. Aşağıdaki betiği Get-Hello.psm1 dosyanıza yapıştırın:

    Function Get-Hello{
        Write-Host "Hello Azure DevOps!"
    }
    
  3. Get-Hello dizininizde aşağıdaki komutu çalıştırarak modül bildirimini oluşturun:

    New-ModuleManifest -Path .\Get-Hello.psd1
    
  4. Get-Hello.psd1 dosyanızı RootModule Bu ayar, modül içeri aktarıldığında PowerShell'in yüklendiği ana betik dosyasını belirtir. Boş dizeyi Get-Hello.psm1 dosyanızın yoluyla değiştirin:

    RootModule = 'Get-Hello.psm1'
    
  5. FunctionsToExport bölümünde, modülünüzü içeri aktaran kullanıcılara hangi işlevlerin erişebileceği belirtiliyor. Get-Hello işlevinizi ekleyin:

    FunctionsToExport = @('Get-Hello')
    
  6. FileList Modülü paketlerken dahil edilen dosyaları belirten bölümü bulun. Modülünüzle birlikte paketlemek istediğiniz dosyayı ekleyin:

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

Modülü paketleme ve yayımlama

  1. Modülünüz için bir nuspec dosyası oluşturun. Bu komut, modülü paketlemek için gerekli meta verileri içeren bir Get-Hello.nuspec dosyası oluşturur:

    nuget spec Get-Hello
    
  2. Modülünüzü paketlemek için aşağıdaki komutu çalıştırın:

    nuget pack Get-Hello.nuspec
    
  3. Akış kaynağı URL'nizi eklemek için aşağıdaki komutu çalıştırın. NuGet V3 desteklenmediğinden, akış kaynağı URL'nizde V2 kullandığınızdan emin olun.

    • Kuruluş kapsamlı akış:

      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>"
      
    • Proje kapsamlı akış:

      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. Paketi akışınızda yayımlayın:

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

Önemli

Modül Bildiriminizdeki (.psd1) sürüm numarası, .nuspec dosyanızdaki sürüm numarasıyla aynı olmalıdır.

Bir akışa PowerShell deposu olarak bağlanma

Bu bölüm, bir akışla PowerShell deposu olarak kimlik doğrulaması gerçekleştirme ve akışınızda barındırılan bir modülü kullanma konusunda size yol gösterir:

  1. Bir PowerShell istemi penceresinde, kimlik bilgilerinizi ayarlamak için aşağıdaki komutu çalıştırın. Yer tutucuları uygun bilgilerle değiştirin.

    $patToken = "<PERSONAL_ACCESS_TOKEN>" | ConvertTo-SecureString -AsPlainText -Force
    
    $credsAzureDevopsServices = New-Object System.Management.Automation.PSCredential("<USER_NAME>", $patToken)
    
  2. PowerShell deponuzu kaydedin. Yapıtlar> giderek, Proje kurulumu bölümü kaynak URL'si altında bağlantıyı bulabilirsiniz.>

    • Proje kapsamlı akış:

      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
      
    • Kuruluş kapsamlı akış:

      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
      

    İpucu

    Bazı PowerShell sürümleri, paket kaynağı çözümlenemiyor uyarısıyla Register-PSRepository karşılaşmamak için cmdlet'i çalıştırdıktan sonra yeni bir oturum başlatmayı gerektirebilir.

  3. Paket kaynağınızı kaydedin:

    • Proje kapsamlı akış:

      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
      
    • Kuruluş kapsamlı akış:

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

    Not

    • Register-PSRepository: Modülleri bulmak ve yüklemek için PowerShell deposunu kaydetmek için kullanılır.
    • Register-PackageSource: Paketleri bulmak ve yayımlamak üzere bir paket kaynağını kaydetmek için kullanılır.
  4. Deponun başarıyla kaydedilip kaydedilmediğini doğrulamak için, geçerli kullanıcının tüm kayıtlı depolarını almak üzere aşağıdaki komutu çalıştırın:

    Get-PSRepository
    
  5. Get-Hello modülünü yüklemek için aşağıdaki komutu çalıştırın.

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

Not

Kuruluşunuz bir güvenlik duvarı veya ara sunucu kullanıyorsa Azure Artifacts Etki Alanı URL'lerine ve IP adreslerine erişime izin verdiğinizden emin olun.

İşlem hattınızdan paket yükleme

Bu örnek, Azure Artifacts akışıyla kimlik doğrulaması gerçekleştirme ve işlem hattınızdan bir PowerShell modülü yükleme konusunda size yol gösterir. Kişisel erişim belirtecinizi kullanmak için aşağıda gösterildiği gibi bir işlem hattı değişkeni olarak ekleyin:

  1. Azure DevOps kuruluşunuzda oturum açın ve projenize gidin.

  2. İşlem hatları'na tıklayın, işlem hattı tanımınızı seçin ve ardından düzenle'yi seçerek işlem hattınızı değiştirin.

  3. Sağ üst köşedeki Değişkenler'i ve ardından Yeni değişken'i seçin.

  4. Değişkeniniz için bir Ad girin ve kişisel erişim belirtecinizi Değer metin kutusuna yapıştırın.

  5. Bu değer gizli dizisini koru onay kutusunu seçtiğinizden emin olun. İşiniz bittiğinde Tamam'ı seçin.

  6. userName'iniz için ikinci bir değişken ekleyin. Değişkeniniz için bir Ad girin ve ardından Değer metin kutusuna userName girin.

  7. Bitirdiğinizde Kaydet'i seçin.

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'