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
Henüz yapmadıysanız bir Azure DevOps kuruluşu ve proje oluşturun.
Henüz yoksa yeni bir akış oluşturun.
PSResourceGet'i yükleyin.
SecretManagement ve SecretStore modüllerini yükleyin.
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.
Azure DevOps kuruluşunuza gidin
https://dev.azure.com/<ORGANIZATION_NAME>/
Kullanıcı ayarları simgesini seçin, Kişisel erişim belirteçleri'ni ve ardından Yeni Belirteç'i seçin.
PAT'niz için bir ad girin, Süre sonu tarihi ayarlayın, Özel tanımlı'yı seçin ve ardından Paketleme>
İşiniz bittiğinde Oluştur'u seçin ve PAT'nizi kopyalayıp güvenli bir konumda depoladığınızdan emin olun.
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:
PowerShell-Demo adlı yeni bir klasör oluşturun. Klasörünüzde gezinin ve yeni bir PowerShell-Demo.psm1 dosyası oluşturun.
Aşağıdaki betiği PowerShell-Demo.psm1 dosyanıza yapıştırın:
Function PowerShell-Demo{ Write-Host "Hello World!" }
PowerShell-Demo dizininizde aşağıdaki komutu çalıştırarak modül bildirimini oluşturun:
New-ModuleManifest -Path .\PowerShell-Demo.psd1
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'
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')
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
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)
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')
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
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.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.json
iş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'
Paketi yükleme
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
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.
Windows MSBuild'i aşağıdaki seçeneklerden birini kullanarak yükleyin:
- Microsoft Visual Studio
- Visual Studioiçin Derleme Araçları.
- .NET Core SDK.
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.
Azure DevOps kuruluşunuza gidin
https://dev.azure.com/<ORGANIZATION_NAME>/
Kullanıcı ayarları simgesini seçin, Kişisel erişim belirteçleri'ni ve ardından Yeni Belirteç'i seçin.
PAT'niz için bir ad girin, Süre sonu tarihi ayarlayın, Özel tanımlı'yı seçin ve ardından Paketleme>
İşiniz bittiğinde Oluştur'u seçin ve PAT'nizi kopyalayıp güvenli bir konumda depoladığınızdan emin olun.
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:
Get-Hello adlı yeni bir klasör oluşturun. Klasörünüzde gezinin ve yeni bir Get-Hello.psm1 dosyası oluşturun.
Aşağıdaki betiği Get-Hello.psm1 dosyanıza yapıştırın:
Function Get-Hello{ Write-Host "Hello Azure DevOps!" }
Get-Hello dizininizde aşağıdaki komutu çalıştırarak modül bildirimini oluşturun:
New-ModuleManifest -Path .\Get-Hello.psd1
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'
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')
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
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
Modülünüzü paketlemek için aşağıdaki komutu çalıştırın:
nuget pack Get-Hello.nuspec
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>"
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:
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)
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.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.
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
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:
Azure DevOps kuruluşunuzda oturum açın ve projenize gidin.
İş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.
Sağ üst köşedeki Değişkenler'i ve ardından Yeni değişken'i seçin.
Değişkeniniz için bir Ad girin ve kişisel erişim belirtecinizi Değer metin kutusuna yapıştırın.
Bu değer gizli dizisini koru onay kutusunu seçtiğinizden emin olun. İşiniz bittiğinde Tamam'ı seçin.
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.
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'