Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure DevOps Hizmetleri
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üklemek için gereken PowerShellGet sürümüne sahip olduğunuzdan emin olmak için PowerShell 6.0 veya üzerini yükleyin.
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.psd1PowerShell-Demo.psd1 dosyanızı 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'FunctionsToExportbö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')FileListModü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 MySecretVaultPowerShell deponuzu kaydetmek için aşağıdaki komutu çalıştırın. Yapıtlar
SourceLocationgiderek, Proje kurulumualtı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 $CredentialInfoKuruluş 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-PSResourceRepositorykarşı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.jsoniş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. Yer tutucuları paket yolunuz, depo adı, daha önce oluşturduğunuz kimlik bilgisi nesnesiyle değiştirin ve ApiKey için herhangi bir dize sağlayın.
Publish-PSResource -Path <PACKAGE_PATH> -Repository <REPOSITORY_NAME> -Credential $credentials -ApiKey <ANY_STRING>
Örnek:
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'
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> -verboseModü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'sı.
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.Uygun PowerShellGet ve PackageManagement sürümlerine sahip olduğunuzdan emin olmak için PowerShell 6.0 veya üzerini 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.psd1Get-Hello.psd1 dosyanızı 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'FunctionsToExportbö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')FileListModü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-HelloModülünüzü paketlemek için aşağıdaki komutu çalıştırın:
nuget pack Get-Hello.nuspecAkış 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
SourceLocationgiderek, Proje kurulumualtı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 $credsAzureDevopsServicesKuruluş 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-PSRepositorykarşı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 $credsAzureDevopsServicesKuruluş 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-PSRepositoryGet-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'
Kurumsal dağıtımlar ve gelişmiş güvenlik için, adlandırılmış kullanıcı hesaplarından bağımsız olarak SYSTEM_ACCESSTOKEN Azure Artifact akışına erişmek için kullanılabilir. Bu bağlamda kullanıcı adı gerekli değildir ve parametre gereksinimlerini karşılamak için rastgele bir dize olabilir.
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)