Menggunakan umpan Azure Artifacts sebagai repositori PowerShell privat

Azure DevOps Services

Azure Artifacts menyediakan solusi yang nyaman untuk berbagi skrip PowerShell. Dengan menggunakan umpan Azure Artifacts, Anda dapat menerbitkan modul PowerShell dengan mulus dari baris perintah dan mengontrol akses ke sana melalui pengaturan umpan Anda. Artikel ini memandu Anda menyiapkan umpan Azure Artifacts sebagai repositori PowerShell privat untuk menyimpan dan berbagi modul PowerShell Anda.

Dalam artikel ini, Anda akan mempelajari cara:

  • Membuat Token Akses Pribadi
  • Membuat modul PowerShell
  • Membuat vault SecretStore dan mendaftarkan repositori
  • Menerbitkan dan menggunakan paket dari umpan

Prasyarat

Catatan

Penyedia Kredensial Azure Artifacts tidak didukung dengan PSResourceGet.

Membuat token akses pribadi

Token akses pribadi bertindak sebagai identitas digital Anda dan berfungsi sebagai kata sandi alternatif untuk mengautentikasi Anda dengan Azure DevOps.

  1. Menavigasi ke organisasi Azure DevOps Anda https://dev.azure.com/<ORGANIZATION_NAME>/

  2. Pilih ikon pengaturan pengguna, pilih Token akses pribadi, lalu pilih Token Baru.

  3. Masukkan nama untuk PAT Anda, tetapkan tanggal Kedaluwarsa, pilih Ditentukan secara kustom, lalu pilih PackagingBaca, tulis, & kelola.

  4. Pilih Buat setelah selesai, dan pastikan Anda menyalin dan menyimpan PAT Anda di lokasi yang aman.

    Cuplikan layar memperlihatkan cara menyiapkan token akses pribadi baru.

Membuat modul PowerShell

Jika Anda tidak memiliki modul Anda sendiri, ikuti instruksi di bagian ini untuk membuat sampel modul PowerShell. Jika tidak, lewati ke langkah berikutnya:

  1. Buat folder baru PowerShell-Demo. Navigasikan ke folder Anda dan buat file baru PowerShell-Demo.psm1.

  2. Tempelkan skrip berikut ke dalam file PowerShell-Demo.psm1 Anda:

    Function PowerShell-Demo{
        Write-Host "Hello World!"
    }
    
  3. Buat manifes modul dengan menjalankan perintah berikut di direktori PowerShell-Demo Anda:

    New-ModuleManifest -Path .\PowerShell-Demo.psd1
    
  4. Buka file PowerShell-Demo.psd1 Anda dan temukan variabel .RootModule Pengaturan ini menentukan file skrip utama yang dimuat PowerShell saat modul diimpor. Ganti string kosong dengan jalur ke file PowerShell-Demo.psm1 Anda:

    RootModule = 'PowerShell-Demo.psm1'
    
  5. Bagian FunctionsToExport menentukan fungsi mana yang dapat diakses pengguna saat mereka mengimpor modul Anda. Sertakan fungsi PowerShell-Demo Anda:

    FunctionsToExport = @('PowerShell-Demo')
    
  6. Temukan bagian FileList , yang mencantumkan file yang disertakan saat mengemas modul. Tambahkan file yang ingin Anda kemas dengan modul Anda:

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

Mendaftarkan repositori

  1. Jalankan perintah berikut untuk membuat objek kredensial. Ganti placeholder dengan informasi yang sesuai.

    $username = "<USER_NAME>"
    $patToken = "<PERSONAL_ACCESS_TOKEN>" | ConvertTo-SecureString -AsPlainText -Force
    
    $credentials = New-Object System.Management.Automation.PSCredential($username, $patToken)
    
  2. Pastikan SecretManagement dan SecretStore diinstal, lalu jalankan perintah berikut untuk membuat vault dan menambahkan rahasia:

    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. Untuk memverifikasi apakah vault dan rahasia berhasil dibuat, jalankan perintah berikut untuk mencantumkan semua rahasia Anda:

    PS > Get-SecretInfo
    
    Name            Type         VaultName
    ----            ----         ---------
    MyCredential    PSCredential MySecretVault
    
    
  4. Jalankan perintah berikut untuk mendaftarkan repositori PowerShell Anda. Anda dapat menemukan SourceLocation link tersebut dengan menavigasi ke Artifacts>Connect to FeedNuGet.exe, di bawah URL sumber bagian Project setup

    • Umpan cakupan proyek:

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

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

    Petunjuk / Saran

    Beberapa versi PowerShell mungkin mengharuskan Anda memulai sesi baru setelah menjalankan cmdlet Register-PSResourceRepository agar tidak muncul peringatan Tidak dapat menemukan sumber paket.

  5. Untuk memverifikasi apakah repositori berhasil didaftarkan, jalankan perintah berikut untuk mengambil semua repositori terdaftar untuk pengguna saat ini:

    Get-PSResourceRepository
    

Catatan

Jika Anda mengalami kesalahan: Kode status respons tidak menunjukkan keberhasilan: 404 (Tidak Ditemukan)., pastikan URL sumber Anda menunjuk ke nuget/v3/index.json bukan nuget/v2.

Publikasikan paket

Jalankan perintah berikut untuk menerbitkan paket ke umpan Anda. Ganti tempat penampung dengan jalur paket Anda, nama repositori, objek kredensial yang Anda buat sebelumnya, dan berikan string apa pun untuk ApiKey.

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

Contoh:

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'

Cuplikan layar memperlihatkan paket demo PowerShell yang diterbitkan ke umpan.

Menginstal paket

  1. Untuk mengonfirmasi apakah modul tersedia di repositori Anda, gunakan perintah berikut untuk mencarinya:

    Find-PSResource -Name <RESOURCE_NAME> -Repository <REPOSITORY_NAME> -verbose
    
  2. Jalankan perintah berikut untuk menginstal versi stabil terbaru modul Anda:

    Install-PSResource <MODULE_NAME>
    

Petunjuk / Saran

Jika Anda mengalami kesalahan: Pengecualian memanggil "WriteObject"., mulai jendela PowerShell baru dan jalankan Get-SecretInfo. Masukkan kata sandi vault Anda sebelum menjalankan Find-PSResource dan Install-PSResource, karena periode batas waktu SecretStore dapat kedaluwarsa. PasswordTimeout default adalah 900 detik, tetapi Anda dapat mengubah nilai ini sesuai kebutuhan. Lihat Menggunakan SecretStore dalam otomatisasi untuk detail selengkapnya.

Dalam artikel ini, Anda akan mempelajari cara:

  • Membuat Token Akses Pribadi
  • Membuat, mengemas, dan menerbitkan modul PowerShell
  • Sambungkan ke feed sebagai repositori PowerShell
  • Mendaftarkan dan menginstal modul PowerShell menggunakan Azure Pipelines

Prasyarat

Membuat token akses pribadi

Token akses pribadi bertindak sebagai identitas digital Anda dan berfungsi sebagai kata sandi alternatif untuk mengautentikasi Anda dengan Azure DevOps.

  1. Menavigasi ke organisasi Azure DevOps Anda https://dev.azure.com/<ORGANIZATION_NAME>/

  2. Pilih ikon pengaturan pengguna, pilih Token akses pribadi, lalu pilih Token Baru.

  3. Masukkan nama untuk PAT Anda, tetapkan tanggal Kedaluwarsa, pilih Ditentukan secara kustom, lalu pilih PackagingBaca, tulis, & kelola.

  4. Pilih Buat setelah selesai, dan pastikan Anda menyalin dan menyimpan PAT Anda di lokasi yang aman.

    Cuplikan layar memperlihatkan cara menyiapkan token akses pribadi baru.

Membuat modul PowerShell

Jika Anda tidak memiliki modul Anda sendiri, ikuti instruksi di bagian ini untuk membuat sampel modul PowerShell. Jika tidak, lewati ke langkah berikutnya:

  1. Buat folder baru Get-Hello. Navigasi ke folder Anda dan buat file baru Get-Hello.psm1.

  2. Tempelkan skrip berikut ke dalam file Get-Hello.psm1 Anda:

    Function Get-Hello{
        Write-Host "Hello Azure DevOps!"
    }
    
  3. Buat manifes modul dengan menjalankan perintah berikut di direktori Get-Hello Anda:

    New-ModuleManifest -Path .\Get-Hello.psd1
    
  4. Buka file Get-Hello.psd1 Anda dan temukan variabel .RootModule Pengaturan ini menentukan file skrip utama yang dimuat PowerShell saat modul diimpor. Ganti string kosong dengan jalur ke file Get-Hello.psm1 Anda:

    RootModule = 'Get-Hello.psm1'
    
  5. Bagian FunctionsToExport menentukan fungsi mana yang dapat diakses pengguna saat mereka mengimpor modul Anda. Sertakan fungsi Get-Hello Anda:

    FunctionsToExport = @('Get-Hello')
    
  6. Temukan bagian FileList , yang menentukan file yang disertakan saat mengemas modul. Tambahkan file yang ingin Anda kemas dengan modul Anda:

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

Mengemas dan menerbitkan modul

  1. Buat file nuspec untuk modul Anda. Perintah ini membuat file Get-Hello.nuspec yang berisi metadata yang diperlukan untuk mengemas modul:

    nuget spec Get-Hello
    
  2. Jalankan perintah berikut untuk mengemas modul Anda:

    nuget pack Get-Hello.nuspec
    
  3. Jalankan perintah berikut untuk menambahkan URL sumber umpan Anda. Pastikan Anda menggunakan V2 di URL sumber umpan, karena NuGet V3 tidak didukung.

    • Umpan dengan cakupan organisasi:

      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>"
      
    • Umpan cakupan proyek:

      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. Publikasikan paket ke umpan Anda:

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

Penting

Nomor versi dalam Manifes Modul (.psd1) Anda harus identik dengan nomor versi dalam file .nuspec Anda.

Sambungkan ke feed sebagai repositori PowerShell

Bagian ini memandu Anda melakukan autentikasi ke umpan sebagai repositori PowerShell dan menggunakan modul yang dihosting di umpan Anda:

  1. Di jendela prompt PowerShell, jalankan perintah berikut untuk menyiapkan kredensial Anda. Ganti placeholder dengan informasi yang sesuai.

    $patToken = "<PERSONAL_ACCESS_TOKEN>" | ConvertTo-SecureString -AsPlainText -Force
    
    $credsAzureDevopsServices = New-Object System.Management.Automation.PSCredential("<USER_NAME>", $patToken)
    
  2. Daftarkan repositori PowerShell Anda. Anda dapat menemukan SourceLocation link tersebut dengan menavigasi ke Artifacts>Connect to FeedNuGet.exe, di bawah URL sumber bagian Project setup

    • Umpan cakupan proyek:

      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
      
    • Umpan dengan cakupan organisasi:

      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
      

    Petunjuk / Saran

    Beberapa versi PowerShell mungkin mengharuskan Anda memulai sesi baru setelah menjalankan cmdlet Register-PSRepository agar tidak muncul peringatan Tidak dapat menemukan sumber paket.

  3. Daftarkan sumber paket Anda:

    • Umpan cakupan proyek:

      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
      
    • Umpan dengan cakupan organisasi:

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

    Catatan

    • Register-PSRepository: Digunakan untuk mendaftarkan repositori PowerShell untuk menemukan dan menginstal modul.
    • Register-PackageSource: Digunakan untuk mendaftarkan sumber paket untuk menemukan dan menerbitkan paket.
  4. Untuk memverifikasi apakah repositori berhasil didaftarkan, jalankan perintah berikut untuk mengambil semua repositori terdaftar untuk pengguna saat ini:

    Get-PSRepository
    
  5. Jalankan perintah berikut untuk menginstal modul Get-Hello .

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

Catatan

Jika organisasi Anda menggunakan firewall atau server proksi, pastikan Anda mengizinkan akses ke URL domain Azure Artifacts dan alamat IP.

Instal paket dari pipeline Anda

Contoh ini memandu Anda untuk melakukan autentikasi ke umpan Azure Artifacts dan menginstal modul PowerShell dari pipeline Anda. Untuk menggunakan token akses pribadi Anda, tambahkan sebagai variabel alur, seperti yang ditunjukkan di bawah ini:

  1. Masuk ke organisasi Azure DevOps Anda, lalu navigasikan ke proyek Anda.

  2. Pilih Alur, pilih definisi alur Anda, lalu pilih Edit untuk mengubah alur Anda.

  3. Pilih Variabel di sudut kanan atas, lalu pilih Variabel baru.

  4. Masukkan Nama untuk variabel Anda, lalu tempelkan token akses pribadi Anda ke dalam kotak teks Nilai .

  5. Pastikan Anda memilih kotak centang Simpan rahasia nilai ini. Pilih Ok saat Anda selesai.

  6. Tambahkan variabel kedua untuk userName Anda. Masukkan Nama untuk variabel Anda, lalu masukkan userName Anda di kotak teks Nilai .

  7. Pilih Simpan saat Anda selesai.

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'

Untuk penyebaran perusahaan dan keamanan yang ditingkatkan, independen dari akun pengguna bernama, SYSTEM_ACCESSTOKEN dapat digunakan untuk mengakses umpan Azure Artifact. Nama pengguna tidak diperlukan dalam konteks ini dan dapat berupa string arbitrer apa pun untuk memenuhi persyaratan parameter.

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)