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şturun ve bir depo kaydedin
- Bir akıştan paketleri yayımlama ve tüketme
Önkoşullar
Henüz yapmadıysanız bir Azure DevOps kuruluşu ve proje oluşturun.
Halihazırda bir akışınız yoksa yeni bir tane 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, Son kullanma tarihi ayarlayın, Özel tanımlı seçeneğini belirleyin ve ardından PaketlemeOkuma, yazma ve yönetme seçeneğini belirleyin.
İş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ı açın ve değişkenini bulun. 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 bir giz 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 anahtarın başarıyla oluşturulup oluşturulmadığını doğrulamak için, tüm gizli anahtarlarınızı listelemek üzere aşağıdaki komutu çalıştırın:
PS > Get-SecretInfo Name Type VaultName ---- ---- --------- MyCredential PSCredential MySecretVaultPowerShell deponuzu kaydetmek için aşağıdaki komutu çalıştırın.
SourceLocationbağlantısını, Artifacts>Connect to FeedNuGet.exe yolunu izleyerek, Project setup bölümü altındaki kaynak URL’sinde bulabilirsiniz.Proje kapsamındaki 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ş kapsamındaki 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ıyı göstermiyor: 404 (Bulunamadı)., kaynak URL'nizin nuget/v2 yerine nuget/v3/index.json işaret ettiğinden 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ılırken özel durum oluştu., yeni bir PowerShell penceresi açın ve Get-SecretInfo komutunu çalıştırın. SecretStore zaman aşımı süresi dolabileceğinden, Find-PSResource ve Install-PSResource komutlarını ç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 Otomasyonda SecretStore kullanımı konusuna bakın.
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ğlanın
- 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.
Halihazırda bir akışınız yoksa yeni bir tane 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ı.
dotnet runtime sürümünün 8.0.x veya üzeri bir 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, Son kullanma tarihi ayarlayın, Özel tanımlı seçeneğini belirleyin ve ardından PaketlemeOkuma, yazma ve yönetme seçeneğini belirleyin.
İş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ı açın ve değişkenini bulun. 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ş kapsamındaki 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 kapsamındaki 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ğlanın
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.
SourceLocationbağlantısını, Artifacts>Connect to FeedNuGet.exe yolunu izleyerek, Project setup bölümü altındaki kaynak URL’sinde bulabilirsiniz.Proje kapsamındaki 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ş kapsamındaki 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 kapsamındaki 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ş kapsamındaki 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ğeri gizli tut 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, ardından Değer metin kutusuna userName’inizi 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)