Azure Pipelines ile NuGet paketlerini yayımlama (YAML/Klasik)

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Azure Pipelines'da, NuGet paketlerinizi işlem hattınızda, Azure Artifacts akışınızda veya nuget.org gibi genel kayıt defterlerinde yayımlamak için klasik düzenleyiciyi veya YAML görevlerini kullanabilirsiniz.

NuGet paketi oluşturma

NuGet paketlerinizi oluşturmanın, NuGet paketlerinizi paketlemek için Visual Studio kullanma gibi çeşitli yolları vardır. Paketlerinizi oluşturmak için zaten MSBuild veya başka bir görev kullanıyorsanız, bu bölümü atlayın ve NuGet paketlerini yayımlama bölümüne atlayın.

NuGet paketi oluşturmak için işlem hattı YAML dosyanıza aşağıdaki kod parçacığını ekleyin. Daha fazla bilgi için bkz . NuGet görevi.

- task: NuGetCommand@2
  inputs:
    command: pack
    packagesToPack: '**/*.csproj'
    packDestination: '$(Build.ArtifactStagingDirectory)'
  • packagesToPack: paketlenmesi gereken csproj dizinlerini aramak için desen
  • packDestination: paketlerin oluşturulduğu dizin

Paket sürümü oluşturma

NuGet paketleri adları ve sürüm numaralarıyla ayırt edilir. Anlamsal Sürüm Oluşturma'nın kullanılması, paket sürümlerini etkili bir şekilde yönetmek için önerilen bir stratejidir. Anlamsal sürümler üç sayısal bileşenden oluşur: Major, Minor ve Patch.

Bir hata düzeltildikten sonra Düzeltme Eki artırılır. Geriye dönük olarak uyumlu yeni bir özellik yayımladığınızda, İkincil sürümü artırır ve Patch sürümünü 0 olarak sıfırlarsınız. Geriye dönük uyumsuz bir değişiklik yaptığınızda, Ana sürümü artırır ve İkincil ve Düzeltme Eki sürümlerini 0 olarak sıfırlarsınız.

Anlamsal Sürüm Oluşturma ile paketlerinizi etiketlemek için yayın öncesi etiketleri de kullanabilirsiniz. Bunu yapmak için bir kısa çizgi ve ardından yayın öncesi etiketinizi girin: örneğin 1.0.0-beta. AnlamSal Sürüm Oluşturma, Azure Pipelines'da desteklenir ve NuGet görevinizde aşağıdaki gibi yapılandırılabilir:

  • Tarih ve saati (Klasik) kullanın: ByPrereleaseNumber (YAML). Paket sürümünüz şu biçimdedir: Major.Minor.Patch-ci-datetime burada Major, Minor ve Patch değerlerini seçme esnekliğine sahipsiniz.

  • Ortam değişkeni (Klasik) kullanın: byEnvVar (YAML). Paket sürümünüz, belirttiğiniz ortam değişkeninin değerine ayarlanır.

  • Derleme numarasını (Klasik) kullanın: byBuildNumber (YAML). Paket sürümünüz derleme numarasına ayarlanır. İşlem hattı Seçeneklerinizin altındaki derleme numarası biçiminizi olarak $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)ayarladığınızdan emin olun. YAML'de biçimi ayarlamak için işlem hattınızın köküne bir özellik name: ekleyin ve biçiminizi ekleyin.

Aşağıdaki örnekte, olarak biçimlendirilmiş SemVer uyumlu bir sürüm oluşturmak için tarih ve saat sürüm oluşturma seçeneğinin nasıl kullanılacağı gösterilmektedir: Major.Minor.Patch-ci-datetime.

variables:
  Major: '1'
  Minor: '0'
  Patch: '0'

steps:
- task: NuGetCommand@2
  inputs:
    command: pack
    versioningScheme: byPrereleaseNumber
    majorVersion: '$(Major)'
    minorVersion: '$(Minor)'
    patchVersion: '$(Patch)'

Not

DotNetCore ve DotNetStandard paketleri System.InvalidCastExceptions önlemek için görevle birlikte DotNetCoreCLI@2 paketlenmelidir. Daha fazla bilgi için bkz . .NET Core CLI görevi.

task: DotNetCoreCLI@2
inputs:
    command: pack
    versioningScheme: byPrereleaseNumber
    majorVersion: '$(Major)'
    minorVersion: '$(Minor)'
    patchVersion: '$(Patch)'

NuGet paketlerini yönetme

İşlem hattınızdan bir Azure Artifacts akışına paket yayımlamak için işlem hattı kimliğinin akışta Akış Yayımcısı (Katkıda Bulunan) rolüne sahip olması gerekir. Daha fazla bilgi için bkz . İşlem hattı izinleri.

steps:
- task: NuGetAuthenticate@1
  displayName: 'NuGet Authenticate'
- task: NuGetCommand@2
  displayName: 'NuGet push'
  inputs:
    command: push
    publishVstsFeed: '<projectName>/<feed>'
    allowPackageConflicts: true

Bir paketi dış NuGet akışına yayımlamak için önce bu akışa bağlanmak için bir hizmet bağlantısı oluşturmanız gerekir. Hizmet bağlantısı oluşturmak için:

  1. Proje ayarları>Hizmet bağlantıları>Yeni hizmet bağlantısı'na gidin.
  2. NuGet'i ve ardından İleri'yi seçin.
  3. Formu doldurun ve işiniz bittiğinde Kaydet'i seçin.

Daha fazla bilgi için bkz . Hizmet bağlantılarını yönetme.

Not

NuGetAuthenticate@1 görevi, temel yineleme kullanarak bir hizmet bağlantısını destekler. Görev NuGet API anahtarı kimlik doğrulamasını desteklemiyor. Hizmet bağlantınız ApiKey kullanıyorsa, NuGetCommand@2 görevini kullanmanız ve bağımsız değişkenler alanında NuGet API anahtarını belirtmeniz gerekir. Daha fazla bilgi için bkz . NuGet görevi.

Bir paketi dış NuGet akışına yayımlamak için YAML işlem hattınıza aşağıdaki kod parçacığını ekleyin.

Komut satırı görevini kullanma (NuGet.exe ile):

  - task: NuGetAuthenticate@1
    inputs:
      nuGetServiceConnections: <NAME_OF_YOUR_SERVICE_CONNECTION>

  - script: |
      nuget push <PACKAGE_PATH> -src https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json -ApiKey <ANY_STRING>
    displayName: "Push"          

Komut satırı görevini kullanma (dotnet ile):

  - task: NuGetAuthenticate@1
    inputs:
      nuGetServiceConnections: <NAME_OF_YOUR_SERVICE_CONNECTION>

  - script: |
      dotnet build <CSPROJ_PATH> --configuration <CONFIGURATION>
      dotnet pack <CSPROJ_PATH> -p:PackageVersion=<YOUR_PACKAGE_VERSION> --output <OUTPUT_DIRECTORY> --configuration <CONFIGURATION>
      dotnet nuget push <PACKAGE_PATH> --source https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json --api-key <ANY_STRING>
    displayName: "Build, pack and push"          

Not

ApiKey gereklidir, ancak Azure Artifacts akışlarına gönderim yaparken herhangi bir rastgele değeri kullanabilirsiniz.

NuGet.org’a yayımlama

  1. Bir API anahtarı oluşturun.

  2. Azure DevOps projenize gidin ve Proje ayarları'nı seçindişli simgesi.

  3. Hizmet Bağlan ions'ı ve ardından Yeni hizmet bağlantısı'nı seçin.

  4. NuGet'i ve ardından İleri'yi seçin.

  5. Kimlik doğrulama yönteminiz olarak ApiKey'i seçin. Akış URL'niz için aşağıdaki URL'yi kullanın: https://api.nuget.org/v3/index.json.

  6. Daha önce oluşturduğunuz ApiKey'i girin ve bir Hizmet bağlantı adı girin.

  7. Tüm işlem hatlarına erişim izni ver'i seçin ve işiniz bittiğinde Kaydet'i seçin. Bu seçeneği seçmek için hizmet bağlantısı Yönetici istrator rolü gerekir.

İşlem hattı tanımınıza aşağıdaki YAML parçacığını ekleyin:

steps:
- task: NuGetCommand@2
  displayName: 'NuGet push'
  inputs:
    command: push
    nuGetFeedType: external
    publishFeedCredentials: nuget.org