Bekerja dengan Repositori PowerShellGet Privat

Modul PowerShellGet mendukung repositori selain Galeri PowerShell. Cmdlet ini mengaktifkan skenario berikut:

  • Mendukung serangkaian modul PowerShell tepercaya yang telah divalidasi sebelumnya untuk digunakan di lingkungan Anda
  • Menguji alur CI/CD yang membangun modul atau skrip PowerShell
  • Mengirimkan skrip dan modul PowerShell ke sistem yang tidak dapat mengakses internet
  • Mengirimkan skrip dan modul PowerShell hanya tersedia untuk organisasi Anda

Artikel ini menjelaskan cara menyiapkan repositori PowerShell lokal. Artikel ini juga membahas modul OfflinePowerShellGetDeploy yang tersedia dari Galeri PowerShell. Modul ini berisi cmdlet untuk menginstal versi terbaru PowerShellGet ke repositori lokal Anda.

Jenis repositori lokal

Ada dua cara untuk membuat PSRepository lokal: Server NuGet atau berbagi file. Setiap jenis memiliki kelebihan dan kekurangan:

NuGet Server

Kelebihan Kekurangan
Meniadakan fungsionalitas PowerShellGallery Aplikasi multi-tingkat memerlukan perencanaan operasi & dukungan
NuGet terintegrasi dengan Visual Studio, alat lain Model autentikasi dan manajemen akun NuGet diperlukan
NuGet mendukung metadata dalam .Nupkg paket Penerbitan memerlukan manajemen Kunci API & pemeliharaan
Menyediakan pencarian, administrasi paket, dll.

Berbagi file

Kelebihan Kekurangan
Mudah diatur, dicadangkan, dan dirawat Tidak ada UI di luar berbagi file dasar
Model keamanan sederhana - izin pengguna pada berbagi Keamanan terbatas dan tidak ada perekaman siapa yang memperbarui apa
Tidak ada batasan seperti mengganti item yang ada

PowerShellGet berfungsi dengan jenis dan mendukung penemuan versi dan penginstalan dependensi. Namun, beberapa fitur yang berfungsi untuk Galeri PowerShell tidak tersedia untuk server NuGet dasar atau berbagi file. Tidak ada diferensiasi skrip, modul, sumber daya DSC, atau kemampuan peran.

Membuat repositori NuGet.Server

Artikel berikut ini mencantumkan langkah-langkah untuk menyiapkan NuGet Server Anda sendiri.

Ikuti langkah-langkah hingga titik penambahan paket. Langkah-langkah untuk menerbitkan paket dibahas nanti dalam artikel ini.

Untuk repositori berbasis berbagi file, pastikan pengguna Anda memiliki izin untuk mengakses berbagi file.

Mendaftarkan repositori lokal

Sebelum repositori dapat digunakan, repositori harus didaftarkan menggunakan Register-PSRepository perintah . Dalam contoh di bawah ini, InstallationPolicy diatur ke Trusted, dengan asumsi bahwa Anda mempercayai repositori Anda sendiri.

# Register a NuGet-based server
$registerPSRepositorySplat = @{
    Name = 'LocalPSRepo'
    SourceLocation = 'http://MyLocalNuget/Api/V2/'
    ScriptSourceLocation = 'http://MyLocalNuget/Api/V2'
    InstallationPolicy = 'Trusted'
}
Register-PSRepository @registerPSRepositorySplat

# Register a file share on my local machine
$registerPSRepositorySplat = @{
    Name = 'LocalPSRepo'
    SourceLocation = '\\localhost\PSRepoLocal\'
    ScriptSourceLocation = '\\localhost\PSRepoLocal\'
    InstallationPolicy = 'Trusted'
}
Register-PSRepository @registerPSRepositorySplat

Perhatikan perbedaan antara bagaimana kedua perintah menangani ScriptSourceLocation. Untuk repositori berbasis berbagi file, SourceLocation dan ScriptSourceLocation harus cocok. Untuk repositori berbasis web, repositori harus berbeda, jadi dalam contoh ini "/" berikutnya ditambahkan ke SourceLocation.

Saat menggunakan protokol berbagi file, seperti NFS atau SMB, pastikan untuk mengikuti panduan yang direkomendasikan untuk mengamankan protokol. Untuk informasi selengkapnya tentang mengamankan SMB di Windows, lihat [Peningkatan keamanan SMB][09].

Jika Anda ingin PSRepository yang baru dibuat menjadi repositori default, Anda harus membatalkan pendaftaran semua PSRepositories lainnya. Contohnya:

Unregister-PSRepository -Name PSGallery

Catatan

Nama repositori 'PSGallery' dicadangkan untuk digunakan oleh Galeri PowerShell. Anda dapat membatalkan pendaftaran PSGallery, tetapi Anda tidak dapat menggunakan kembali nama PSGallery untuk repositori lainnya.

Jika Anda perlu memulihkan PSGallery, jalankan perintah berikut:

Register-PSRepository -Default

Menerbitkan ke repositori lokal

Setelah mendaftarkan PSRepository lokal, Anda dapat menerbitkan ke PSRepository lokal Anda. Ada dua skenario penerbitan utama: menerbitkan modul Anda sendiri dan menerbitkan modul dari PSGallery.

Menerbitkan modul yang Anda tulis

Gunakan Publish-Module dan Publish-Script untuk menerbitkan modul Anda ke PSRepository lokal dengan cara yang sama seperti yang Anda lakukan untuk Galeri PowerShell.

  • Tentukan lokasi untuk kode Anda
  • Menyediakan kunci API
  • Tentukan nama repositori. Contohnya, -PSRepository LocalPSRepo

Catatan

Anda harus membuat akun di server NuGet, lalu masuk untuk menghasilkan dan menyimpan kunci API. Untuk berbagi file, gunakan string yang tidak kosong untuk nilai NuGetApiKey.

Contoh:

# Publish to a NuGet Server repository using my NuGetAPI key
$publishModuleSplat = @{
    Path = 'c:\projects\MyModule'
    Repository = 'LocalPsRepo'
    NuGetApiKey = $nuGetApiKey
}
Publish-Module @publishModuleSplat

Penting

Untuk memastikan keamanan, kunci API tidak boleh dikodekan secara permanen dalam skrip. Gunakan sistem manajemen kunci yang aman. Saat menjalankan perintah secara manual, kunci API tidak boleh diteruskan sebagai teks biasa untuk menghindarinya dicatat, Read-Host cmdlet dapat digunakan untuk meneruskan nilai kunci API dengan aman.

# Publish to a file share repo - the NuGet API key must be a non-blank string
$publishModuleSplat = @{
    Path = 'c:\projects\MyModule'
    Repository = 'LocalPsRepo'
    NuGetApiKey = 'AnyStringWillDo'
}
Publish-Module @publishModuleSplat

Menerbitkan modul dari PSGallery

Untuk menerbitkan modul dari PSGallery ke PSRepository lokal, Anda dapat menggunakan Save-Package cmdlet .

  • Tentukan Nama Paket
  • Tentukan 'NuGet' sebagai Penyedia
  • Tentukan lokasi PSGallery sebagai sumber (https://www.powershellgallery.com/api/v2)
  • Tentukan jalur ke Repositori lokal Anda

Contoh:

# Publish from the PSGallery to your local Repository
$savePackageSplat = @{
    Name = 'PackageName'
    ProviderName = 'NuGet'
    Source = 'https://www.powershellgallery.com/api/v2'
    Path = '\\localhost\PSRepoLocal\'
}
Save-Package @savePackageSplat

Jika PSRepository lokal Anda berbasis web, PSRepository memerlukan langkah tambahan yang menggunakan nuget.exe untuk menerbitkan. Lihat dokumentasi untuk menggunakan nuget.exe.

Menginstal PowerShellGet pada sistem yang terputus

Menyebarkan PowerShellGet sulit di lingkungan yang mengharuskan sistem terputus dari internet. PowerShellGet memiliki proses bootstrap yang menginstal versi terbaru saat pertama kali digunakan. Modul OfflinePowerShellGetDeploy di Galeri PowerShell menyediakan cmdlet yang mendukung proses bootstrap ini.

Untuk bootstrap penyebaran offline, Anda perlu:

  • Unduh dan instal OfflinePowerShellGetDeploy sistem anda yang terhubung ke internet dan sistem anda yang terputus
  • Unduh PowerShellGet dan dependensinya pada sistem yang terhubung ke internet menggunakan Save-PowerShellGetForOffline cmdlet
  • Salin PowerShellGet dan dependensinya dari sistem yang terhubung ke internet ke sistem yang terputus
  • Install-PowerShellGetOffline Gunakan pada sistem yang terputus untuk menempatkan PowerShellGet dan dependensinya ke dalam folder yang tepat

Perintah berikut menggunakan Save-PowerShellGetForOffline untuk memasukkan semua komponen ke dalam folder f:\OfflinePowerShellGet

# Requires -RunAsAdministrator
#Download the OfflinePowerShellGetDeploy to a location that can be accessed
# by both the connected and disconnected systems.
Save-Module -Name OfflinePowerShellGetDeploy -Path 'F:\' -Repository PSGallery
Import-Module F:\OfflinePowerShellGetDeploy

# Put PowerShellGet somewhere locally
Save-PowerShellGetForOffline -LocalFolder 'F:\OfflinePowerShellGet'

Pada titik ini, Anda harus membuat konten F:\OfflinePowerShellGet yang tersedia untuk sistem Anda yang terputus. Jalankan Install-PowerShellGetOffline cmdlet untuk menginstal PowerShellGet pada sistem yang terputus.

Catatan

Penting bahwa Anda tidak menjalankan PowerShellGet di sesi PowerShell sebelum menjalankan perintah ini. Setelah PowerShellGet dimuat ke dalam sesi, komponen tidak dapat diperbarui. Jika Anda memulai PowerShellGet secara tidak sengaja, keluar dan mulai ulang PowerShell.

Import-Module F:\OfflinePowerShellGetDeploy
Install-PowerShellGetOffline -LocalFolder 'F:\OfflinePowerShellGet'

Setelah menjalankan perintah ini, Anda siap untuk menerbitkan PowerShellGet ke repositori lokal Anda.

# Publish to a NuGet Server repository using my NuGetAPI key
$publishModuleSplat = @{
    Path = 'F:\OfflinePowershellGet'
    Repository = 'LocalPsRepo'
    NuGetApiKey = $nuGetApiKey
}
Publish-Module @publishModuleSplat

Penting

Untuk memastikan keamanan, kunci API tidak boleh dikodekan secara permanen dalam skrip. Gunakan sistem manajemen kunci yang aman. Saat menjalankan perintah secara manual, kunci API tidak boleh diteruskan sebagai teks biasa untuk menghindarinya dicatat, Read-Host cmdlet dapat digunakan untuk meneruskan nilai kunci API dengan aman.

# Publish to a file share repo - the NuGet API key must be a non-blank string
$publishModuleSplat = @{
    Path = 'F:\OfflinePowerShellGet'
    Repository = 'LocalPsRepo'
    NuGetApiKey = 'AnyStringWillDo'
}
Publish-Module @publishModuleSplat

Menggunakan solusi Pengemasan untuk menghosting repositori PowerShellGet

Anda juga dapat menggunakan solusi pengemasan seperti Azure Artifacts untuk menghosting repositori PowerShellGet privat atau publik. Untuk informasi dan instruksi selengkapnya, lihat dokumentasi Azure Artifacts.