Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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
Buat organisasi Azure DevOps dan proyek jika Anda belum melakukannya.
Instal PowerShell 6.0 atau yang lebih baru untuk memastikan Anda memiliki versi PowerShellGet yang diperlukan untuk menginstal PSResourceGet.
Instal PSResourceGet.
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.
Menavigasi ke organisasi Azure DevOps Anda
https://dev.azure.com/<ORGANIZATION_NAME>/Pilih ikon pengaturan pengguna, pilih Token akses pribadi, lalu pilih Token Baru.
Masukkan nama untuk PAT Anda, tetapkan tanggal
Kedaluwarsa , pilihDitentukan secara kustom , lalu pilihPackaging Baca, tulis, & kelola .Pilih Buat setelah selesai, dan pastikan Anda menyalin dan menyimpan PAT Anda di lokasi yang aman.
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:
Buat folder baru PowerShell-Demo. Navigasikan ke folder Anda dan buat file baru PowerShell-Demo.psm1.
Tempelkan skrip berikut ke dalam file PowerShell-Demo.psm1 Anda:
Function PowerShell-Demo{ Write-Host "Hello World!" }Buat manifes modul dengan menjalankan perintah berikut di direktori PowerShell-Demo Anda:
New-ModuleManifest -Path .\PowerShell-Demo.psd1Buka file PowerShell-Demo.psd1 Anda dan temukan variabel .
RootModulePengaturan 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'Bagian
FunctionsToExportmenentukan fungsi mana yang dapat diakses pengguna saat mereka mengimpor modul Anda. Sertakan fungsi PowerShell-Demo Anda:FunctionsToExport = @('PowerShell-Demo')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
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)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')Untuk memverifikasi apakah vault dan rahasia berhasil dibuat, jalankan perintah berikut untuk mencantumkan semua rahasia Anda:
PS > Get-SecretInfo Name Type VaultName ---- ---- --------- MyCredential PSCredential MySecretVaultJalankan perintah berikut untuk mendaftarkan repositori PowerShell Anda. Anda dapat menemukan
SourceLocationlink tersebut dengan menavigasi ke Artifacts>Connect to FeedNuGet.exe, di bawah URL sumber bagian Project setupUmpan 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 $CredentialInfoUmpan 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-PSResourceRepositoryagar tidak muncul peringatan Tidak dapat menemukan sumber paket.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'
Menginstal paket
Untuk mengonfirmasi apakah modul tersedia di repositori Anda, gunakan perintah berikut untuk mencarinya:
Find-PSResource -Name <RESOURCE_NAME> -Repository <REPOSITORY_NAME> -verboseJalankan 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
Buat organisasi Azure DevOps dan proyek jika Anda belum melakukannya.
Instal Windows MSBuild menggunakan salah satu opsi berikut:
- Microsoft Visual Studio
- Build Tools untuk Visual Studio.
- .NET Core SDK.
Instal versi NuGet(.exe) versi 4.8.0.5385 atau yang lebih baru.
Instal runtime
dotnet versi 8.0.x atau yang lebih baru.Instal PowerShell 6.0 atau yang lebih baru untuk memastikan Anda memiliki versi PowerShellGet dan PackageManagement yang sesuai.
Membuat token akses pribadi
Token akses pribadi bertindak sebagai identitas digital Anda dan berfungsi sebagai kata sandi alternatif untuk mengautentikasi Anda dengan Azure DevOps.
Menavigasi ke organisasi Azure DevOps Anda
https://dev.azure.com/<ORGANIZATION_NAME>/Pilih ikon pengaturan pengguna, pilih Token akses pribadi, lalu pilih Token Baru.
Masukkan nama untuk PAT Anda, tetapkan tanggal
Kedaluwarsa , pilihDitentukan secara kustom , lalu pilihPackaging Baca, tulis, & kelola .Pilih Buat setelah selesai, dan pastikan Anda menyalin dan menyimpan PAT Anda di lokasi yang aman.
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:
Buat folder baru Get-Hello. Navigasi ke folder Anda dan buat file baru Get-Hello.psm1.
Tempelkan skrip berikut ke dalam file Get-Hello.psm1 Anda:
Function Get-Hello{ Write-Host "Hello Azure DevOps!" }Buat manifes modul dengan menjalankan perintah berikut di direktori Get-Hello Anda:
New-ModuleManifest -Path .\Get-Hello.psd1Buka file Get-Hello.psd1 Anda dan temukan variabel .
RootModulePengaturan 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'Bagian
FunctionsToExportmenentukan fungsi mana yang dapat diakses pengguna saat mereka mengimpor modul Anda. Sertakan fungsi Get-Hello Anda:FunctionsToExport = @('Get-Hello')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
Buat file nuspec untuk modul Anda. Perintah ini membuat file Get-Hello.nuspec yang berisi metadata yang diperlukan untuk mengemas modul:
nuget spec Get-HelloJalankan perintah berikut untuk mengemas modul Anda:
nuget pack Get-Hello.nuspecJalankan 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>"
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:
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)Daftarkan repositori PowerShell Anda. Anda dapat menemukan
SourceLocationlink tersebut dengan menavigasi ke Artifacts>Connect to FeedNuGet.exe, di bawah URL sumber bagian Project setupUmpan 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 $credsAzureDevopsServicesUmpan 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-PSRepositoryagar tidak muncul peringatan Tidak dapat menemukan sumber paket.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 $credsAzureDevopsServicesUmpan 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.
Untuk memverifikasi apakah repositori berhasil didaftarkan, jalankan perintah berikut untuk mengambil semua repositori terdaftar untuk pengguna saat ini:
Get-PSRepositoryJalankan 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:
Masuk ke organisasi Azure DevOps Anda, lalu navigasikan ke proyek Anda.
Pilih Alur, pilih definisi alur Anda, lalu pilih Edit untuk mengubah alur Anda.
Pilih Variabel di sudut kanan atas, lalu pilih Variabel baru.
Masukkan Nama untuk variabel Anda, lalu tempelkan token akses pribadi Anda ke dalam kotak teks Nilai .
Pastikan Anda memilih kotak centang Simpan rahasia nilai ini. Pilih Ok saat Anda selesai.
Tambahkan variabel kedua untuk userName Anda. Masukkan Nama untuk variabel Anda, lalu masukkan userName Anda di kotak teks Nilai .
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)