Özel PowerShellGet Depoları ile Çalışma
PowerShellGet modülü PowerShell Galerisi dışındaki depoları destekler. Bu cmdlet'ler aşağıdaki senaryoları etkinleştirir:
- Ortamınızda kullanmak için güvenilir, önceden doğrulanmış bir PowerShell modülü kümesini destekleme
- PowerShell modülleri veya betikleri oluşturan CI/CD işlem hattını test etme
- PowerShell betiklerini ve modüllerini İnternet'e erişemez sistemlere teslim etme
- PowerShell betiklerini ve modüllerini yalnızca kuruluşunuza sunma
Bu makalede, yerel bir PowerShell deposunun nasıl ayarlanacağı açıklanır. Makale, PowerShell Galerisi'den edinilebilen OfflinePowerShellGetDeploy modülünü de kapsar. Bu modül, PowerShellGet'in en son sürümünü yerel deponuza yüklemek için cmdlet'ler içerir.
Yerel depo türleri
Yerel PSRepository oluşturmanın iki yolu vardır: NuGet sunucusu veya dosya paylaşımı. Her türün avantajları ve dezavantajları vardır:
NuGet Sunucusu
Avantajlar | Dezavantajlar |
---|---|
PowerShellGallery işlevselliğini yakından taklit eder | Çok katmanlı uygulama için işlem planlama & desteği gerekir |
NuGet, Visual Studio ve diğer araçlarla tümleştirilir | Kimlik doğrulama modeli ve NuGet hesapları yönetimi gerekiyor |
NuGet paketlerde .Nupkg meta verileri destekler |
Yayımlama için API Anahtar yönetimi & bakımı gerekir |
Arama, paket yönetimi vb. sağlar. |
Dosya Paylaşımı
Avantajlar | Dezavantajlar |
---|---|
Kurulumu, yedeklemesi ve bakımı kolay | PowerShellGet tarafından kullanılan meta veriler kullanılamıyor |
Basit güvenlik modeli - paylaşımdaki kullanıcı izinleri | Temel dosya paylaşımının ötesinde kullanıcı arabirimi yok |
Mevcut öğeleri değiştirme gibi bir kısıtlama yoktur | Sınırlı güvenlik ve kimin neyi güncelleştirdiğinde kayıt olmaması |
PowerShellGet her iki türle de çalışır ve sürümlerin ve bağımlılık yüklemenin yerini belirlemeyi destekler. Ancak, PowerShell Galerisi için çalışan bazı özellikler temel NuGet sunucularında veya dosya paylaşımlarında kullanılamaz.
- Her şey bir pakettir; betikler, modüller, DSC kaynakları veya rol özellikleri arasında ayrım yoktur.
- Dosya paylaşım sunucuları, etiketler de dahil olmak üzere paket meta verilerini göremez.
Yerel depo oluşturma
Aşağıdaki makalede kendi NuGet Sunucunuzu ayarlama adımları listelenmiştir.
Paketleri ekleme noktasına kadar olan adımları izleyin. Paket yayımlama adımları bu makalenin devamında ele alınmıştır.
Dosya paylaşımı tabanlı bir depo için, kullanıcılarınızın dosya paylaşımına erişim izinleri olduğundan emin olun.
Yerel depo kaydetme
Bir deponun kullanılabilmesi için önce komutu kullanılarak Register-PSRepository
kaydedilmesi gerekir.
Aşağıdaki örneklerde, kendi deponuza güvendiğiniz varsayımı üzerine InstallationPolicyGüvenilir olarak ayarlanmıştır.
# Register a NuGet-based server
Register-PSRepository -Name LocalPSRepo -SourceLocation http://MyLocalNuget/Api/V2/ -ScriptSourceLocation http://MyLocalNuget/Api/V2 -InstallationPolicy Trusted
# Register a file share on my local machine
Register-PSRepository -Name LocalPSRepo -SourceLocation '\\localhost\PSRepoLocal\' -ScriptSourceLocation '\\localhost\PSRepoLocal\' -InstallationPolicy Trusted
İki komutun ScriptSourceLocation'ı işleme şekli arasındaki farkı not edin. Dosya paylaşımı tabanlı depolar için SourceLocation ve ScriptSourceLocation eşleşmelidir. Web tabanlı bir depo için bunların farklı olması gerekir, bu nedenle bu örnekte SourceLocation'a sondaki bir "/" eklenir.
Yeni oluşturulan PSRepository'nin varsayılan depo olmasını istiyorsanız, diğer tüm PSRepositories kaydını kaldırmanız gerekir. Örnek:
Unregister-PSRepository -Name PSGallery
Not
'PSGallery' depo adı PowerShell Galerisi tarafından kullanılmak üzere ayrılmıştır. PSGallery kaydını silebilirsiniz, ancak psGallery adını başka bir depo için yeniden kullanamazsınız.
PSGallery'yi geri yüklemeniz gerekiyorsa aşağıdaki komutu çalıştırın:
Register-PSRepository -Default
Yerel depoda yayımlama
Yerel PSRepository'yi kaydettikten sonra yerel PSRepository'nizde yayımlayabilirsiniz. İki ana yayımlama senaryosu vardır: kendi modülünüzü yayımlama ve PSGallery'den bir modül yayımlama.
Oluşturduğunuz bir modülü yayımlama
modülünüzü, PowerShell Galerisi olduğu gibi yerel PSRepository'nizde yayımlamak için ve Publish-Script
kullanınPublish-Module
.
- Kodunuzun konumunu belirtin
- API anahtarı sağlama
- Depo adını belirtin. Örneğin,
-PSRepository LocalPSRepo
Not
NuGet sunucusunda bir hesap oluşturmanız ve ardından API anahtarını oluşturup kaydetmek için oturum açmanız gerekir. Dosya paylaşımı için, NuGetApiKey değeri için boş olmayan herhangi bir dize kullanın.
Örnekler:
# Publish to a NuGet Server repository using my NuGetAPI key
Publish-Module -Path 'c:\projects\MyModule' -Repository LocalPsRepo -NuGetApiKey $nuGetApiKey
Önemli
Güvenliği sağlamak için, API anahtarları betiklerde sabit kodlanmamalıdır. Güvenli bir anahtar yönetim sistemi kullanın. Bir komutu el ile yürütürken, günlüğe kaydedilmesini önlemek için API anahtarları düz metin olarak geçirilmemelidir; cmdlet, Read-Host
API anahtarının değerini güvenli bir şekilde geçirmek için kullanılabilir.
# Publish to a file share repo - the NuGet API key must be a non-blank string
Publish-Module -Path 'c:\projects\MyModule' -Repository LocalPsRepo -NuGetApiKey 'AnyStringWillDo'
PSGallery'den modül yayımlama
PSGallery'den yerel PSRepository'nize bir modül yayımlamak için 'Save-Package' cmdlet'ini kullanabilirsiniz.
- Paketin Adını Belirtin
- Sağlayıcı olarak 'NuGet' belirtin
- Kaynak olarak PSGallery konumunu belirtin (https://www.powershellgallery.com/api/v2)
- Yerel Deponuzun yolunu belirtin
Örnek:
# Publish from the PSGallery to your local Repository
Save-Package -Name 'PackageName' -Provider NuGet -Source https://www.powershellgallery.com/api/v2 -Path '\\localhost\PSRepoLocal\'
Yerel PSRepository'niz web tabanlıysa, yayımlamak için nuget.exe kullanan ek bir adım gerektirir.
nuget.exekullanma belgelerine bakın.
PowerShellGet'i bağlantısı kesilmiş bir sisteme yükleme
PowerShellGet'in dağıtılması, sistemlerin İnternet bağlantısının kesilmesini gerektiren ortamlarda zordur. PowerShellGet,ilk kez kullanıldığında en son sürümü yükleyen bir önyükleme işlemine sahiptir. PowerShell Galerisi'daki OfflinePowerShellGetDeploy modülü, bu önyükleme işlemini destekleyen cmdlet'ler sağlar.
Çevrimdışı dağıtımı önyüklemek için şunları yapmanız gerekir:
- OfflinePowerShellGetİstemsiz bağlı sisteminizi ve bağlantısız sistemlerinizi indirin ve yükleyin
- Cmdlet'ini kullanarak
Save-PowerShellGetForOffline
PowerShellGet'i ve İnternet'e bağlı sisteme bağımlılıklarını indirin - PowerShellGet'i ve bağımlılıklarını İnternet'e bağlı sistemden bağlantısı kesilmiş sisteme kopyalayın
Install-PowerShellGetOffline
PowerShellGet'i ve bağımlılıklarını uygun klasörlere yerleştirmek için bağlantısı kesilmiş sistemde öğesini kullanın
Aşağıdaki komutlar, tüm bileşenleri bir klasöre yerleştirmek için kullanılır Save-PowerShellGetForOffline
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'
Bu noktada, içeriğini F:\OfflinePowerShellGet
bağlantısız sistemlerinizin kullanımına sunmalısınız. PowerShellGet'i Install-PowerShellGetOffline
bağlantısı kesilmiş sisteme yüklemek için cmdlet'ini çalıştırın.
Not
Bu komutları çalıştırmadan önce PowerShellGet'i PowerShell oturumunda çalıştırmamanız önemlidir. PowerShellGet oturuma yüklendikten sonra bileşenler güncelleştirilemez. PowerShellGet'i yanlışlıkla başlatırsanız PowerShell'i kapatın ve yeniden başlatın.
Import-Module F:\OfflinePowerShellGetDeploy
Install-PowerShellGetOffline -LocalFolder 'F:\OfflinePowerShellGet'
Bu komutları çalıştırdıktan sonra PowerShellGet'i yerel deponuzda yayımlamaya hazır olursunuz.
# Publish to a NuGet Server repository using my NuGetAPI key
Publish-Module -Path 'F:\OfflinePowershellGet' -Repository LocalPsRepo -NuGetApiKey $nuGetApiKey
Önemli
Güvenliği sağlamak için, API anahtarları betiklerde sabit kodlanmamalıdır. Güvenli bir anahtar yönetim sistemi kullanın. Bir komutu el ile yürütürken, günlüğe kaydedilmesini önlemek için API anahtarları düz metin olarak geçirilmemelidir; cmdlet, Read-Host
API anahtarının değerini güvenli bir şekilde geçirmek için kullanılabilir.
# Publish to a file share repo - the NuGet API key must be a non-blank string
Publish-Module -Path 'F:\OfflinePowerShellGet' -Repository LocalPsRepo -NuGetApiKey 'AnyStringWillDo'
PowerShellGet depolarını barındırmak için Paketleme çözümlerini kullanma
Özel veya genel bir PowerShellGet deposunu barındırmak için Azure Artifacts gibi paketleme çözümlerini de kullanabilirsiniz. Daha fazla bilgi ve yönergeler için Bkz. Azure Artifacts belgeleri.