Aracılığıyla paylaş


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

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

Azure Pipelines ile NuGet paketlerinizi Azure Artifacts akışınıza, dış akışlarınıza veya nuget.org gibi genel kayıt defterlerine yayımlamak için klasik veya YAML işlem hatlarını kullanabilirsiniz. Bu makalede şunları nasıl yapacağınızı öğreneceksiniz:

  • Azure Pipelines'da NuGet paketi oluşturma
  • Paketleri iç ve dış akışlara yayımlama
  • Paketleri NuGet.org yayımlama

Önkoşullar

  • Bir Azure DevOps kuruluşu. Ücretsiz bir tane oluşturun.

  • Azure DevOps projesi. Henüz bir projeniz yoksa yeni bir proje oluşturun.

  • Azure Artifacts akışı. Ücretsiz bir tane oluşturun.

NuGet paketi oluşturma

NuGet paketlerinizi oluşturmanın dotnet veya nuget.exe CLI kullanarak paketlerinizi paketlemek gibi çeşitli yolları vardır. Paketlerinizi oluşturmak için zaten MSBuild veya başka görevler kullanıyorsanız, bu bölümü atlayabilir ve bir sonrakine geçebilirsiniz.

NuGet paketi oluşturmak için YAML dosyanıza aşağıdaki kod parçacığını ekleyin. Diğer ayrıntılar için bkz . NuGet görevi .

- task: NuGetCommand@2
  inputs:
    command: pack
    packagesToPack: '**/*.csproj'
    packDestination: '$(Build.ArtifactStagingDirectory)'
  • packagesToPack: Görevin paketlenmesi gereken csproj dizinlerini aramak için kullandığı desen.
  • packDestination: paketlerin oluşturulduğu dizin. Boşsa, paketler kaynak kökte oluşturulur.

Paket sürümü oluşturma

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

Düzeltme eki numarası bir hata düzeltildikten sonra artırılır. Geriye dönük olarak uyumlu yeni bir özellik yayınlarken İkincil sürümü artırır ve Patch sürümünü 0 olarak sıfırlarsınız. Buna karşılık, geriye dönük uyumsuz bir değişiklik yaparken Ana sürümü artırır ve hem İkincil hem de Yama sürümlerini 0'a sıfırlarsınız.

Anlamsal Sürüm Oluşturma, paketleri etiketlemek için yayın öncesi etiketlerin kullanımını da destekler. Kısa çizgi ve ardından yayın öncesi etiketinizi eklemeniz yeterlidir, örneğin: 1.0.0-beta.

Azure Pipelines AnlamSal Sürüm Oluşturma'yi destekler ve NuGet görevleri için aşağıdaki yapılandırma seçeneklerini sunar:

  • Tarih ve saati kullanma (Klasik) | byPrereleaseNumber (YAML): Paket sürümünüz şu biçimdedir: Major.Minor.Patch-ci-datetime burada Major, Minor ve Patch değerlerini özelleştirme esnekliğine sahip olursunuz.

  • Ortam değişkeni kullanma (Klasik) | byEnvVar (YAML): Paket sürümünüz belirtilen ortam değişkeninin değerine ayarlanır.

  • Derleme numarasını kullanma (Klasik) | byBuildNumber (YAML): Paket sürümünüz derleme numarasına ayarlanır. İşlem hattı Seçeneklerinizde derleme numarası biçimini olarak $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)tanımladığınızdan emin olun. YAML'de biçimi belirtmek için işlem hattınızın köküne bir name: özellik ekleyin ve biçiminizi tanımlayın.

Aşağıda, SemVer uyumlu bir paket oluşturmak için tarih ve saat sürümünün nasıl kullanılacağını gösteren bir örnek verilmiştir: 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. Diğer ayrıntılar için bkz . .NET Core CLI görevi .

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

Paketleri iç akışlara yayımlama

Not

Azure Pipelines kullanarak paketlerinizi bir akışa yayımlamak için hem Proje Koleksiyonu Derleme Hizmeti'nehem de projenizin Derleme Hizmeti kimliklerine akış ayarlarınızda atanan Akış Yayımcısı (Katkıda Bulunan) rolü verildiğinden emin olun. Daha fazla ayrıntı için bkz . İzinleri yönetme.

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

Paketleri dış akışlara yayımlama

Paketlerinizi diğer Azure DevOps kuruluşlarındaki veya nuget.org akışlar gibi dış NuGet akışlarına veya genel kayıt defterlerine yayımlamak için önce ilgili hizmetle kimlik doğrulaması yapmak için bir hizmet bağlantısı oluşturmanız gerekir:

  1. Azure DevOps projenizden Proje ayarları>Hizmet bağlantıları'na gidin >

  2. Yeni hizmet bağlantısı>NuGet>İleri'yi seçin.

  3. Gerekli alanları doldurun ve işiniz bittiğinde Kaydet'i seçin. Diğer ayrıntılar için bkz . Hizmet bağlantılarını yönetme.

Not

NuGetAuthenticate@1 görevi temel kimlik doğrulamasıyla hizmet bağlantılarını destekler ancak Apikey kimlik doğrulamasını desteklemez. ApiKey kimlik doğrulamasını kullanmak için bunun yerine NuGetCommand@2 görevini kullanmanız gerekir.

NuGet paketlerinizi farklı bir kuruluştaki bir akışta yayımlamak için YAML işlem hattınıza aşağıdaki kod parçacığını ekleyin:

  • Komut satırı görevini ve NuGet.exe kullanma:

      - 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 ve dotnet'i kullanma:

        - 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ışında yayımlarken herhangi bir dizeyi kullanabilirsiniz.

NuGet.org’a yayımlama

  1. nuget.org hesabınızda oturum açın ve 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 ve 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 değerini girin ve bir Hizmet bağlantısı 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üne ihtiyacınız olduğunu unutmayın.

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