Freigeben über


Schnellstart: Verwenden von GitHub-Aktionen zum Pushen an Azure Artifacts

Azure DevOps Services

Erste Schritte bei der gemeinsamen Verwendung von GitHub-Aktionen und Azure Artifacts. GitHub Actions unterstützt Sie beim Automatisieren Ihrer Softwareentwicklungsworkflows innerhalb von GitHub. Sie können GitHub-Aktionen verwenden, um sie in einem Azure Artifacts-Feed bereitzustellen.

Voraussetzungen

Hinweis

Ein alternativer Ansatz besteht darin, eine Microsoft Entra-Anwendung mit einem Dienstprinzipal und Verbundauthentifizierungsanmeldeinformationen zu verwenden, um Azure DevOps- und GitHub-Aktionen zu verbinden. Weitere Informationen zu diesem Ansatz finden Sie unter Konfigurieren einer App, um einem externen Identitätsanbieter zu vertrauen.

Zuweisen von Berechtigungen zu Ihrer verwalteten Identität in Azure DevOps

Führen Sie die folgenden Schritte aus, um Dem Mitwirkendenteam Ihre verwaltete Identität zuzuweisen:

  1. Melden Sie sich bei Ihrem Projekt (https://dev.azure.com/{Your_Organization/Your_Project}).

  2. Navigieren Sie zu Projekteinstellungen.

  3. Wählen Sie "Allgemeine>Berechtigungen" aus.

  4. Wählen Sie die Gruppe "Mitwirkende" aus.

    Screenshot der Berechtigungsoption

  5. Wählen Sie die Registerkarte "Mitglieder" und dann "Hinzufügen" aus.

  6. Suchen und suchen Sie die verwaltete Identität.

  7. Wählen Sie "Speichern" aus, um der Gruppe "Mitwirkende" die Identität hinzuzufügen.

    Screenshot des Hinzufügens einer verwalteten Identität.

Erstellen von GitHub-Geheimnissen

Sie müssen die Client-ID, Die Mandanten-ID und die Abonnement-ID Ihrer verwalteten Identität für die Anmeldeaktion angeben. Diese Werte werden in GitHub-Geheimschlüsseln gespeichert und in Ihrem Workflow referenziert.

  1. Wechseln Sie in GitHub zu Ihrem Repository.

  2. Gehen Sie im Navigationsmenü auf Einstellungen.

  3. Wählen Sie Security > Secrets and variables > Actions (Sicherheit > Geheimnisse und Variablen > Aktionen) aus.

    Screenshot des Hinzufügens eines Geheimnisses

  4. Wählen Sie New repository secret (Neues Repositorygeheimnis) aus.

  5. Erstellen Sie Geheimnisse für AZURE_CLIENT_ID, AZURE_TENANT_ID und AZURE_SUBSCRIPTION_ID. Verwenden Sie diese Werte aus Ihrer verwalteten Identität für Ihre GitHub-Geheimschlüssel:

    GitHub-Geheimnis Microsoft Entra-Anwendung
    AZURE_CLIENT_ID Anwendungs-ID (Client)
    AZURE_TENANT_ID Verzeichnis-ID (Mandant)
    AZURE_SUBSCRIPTION_ID Abonnement-ID
  6. Speichern Sie jedes Geheimnis, indem Sie Geheimnis hinzufügen auswählen.

Erstellen eines GitHub-Workflows, der ein Artefakt erstellt

GitHub-Workflows sind eine Reihe von Aktionen (z. B. Aufgaben in Azure Pipelines). Dieser Workflow automatisiert den Prozess des Erstellens, Testens, Verpackens und Veröffentlichens eines .NET-Projekts in Azure Artifacts mithilfe einer verwalteten Identität und Verbundauthentifizierung. Der Workflow:

  1. Verwendet die Azure/Login-Aktion , um sich mit einer verwalteten Identität bei Azure anzumelden.
  2. Installiert den Anmeldeinformationsanbieter für Azure Artifacts.
  3. Extrahiert ein Zugriffstoken mithilfe der Azure CLI und konfiguriert den Authentifizierungsanbieter für die Verwendung des Azure DevOps-Tokens.
  4. Richtet eine .NET Core CLI-Umgebung mit der Setup-dotnet-Aktion ein.
  5. Stellt Abhängigkeiten wieder her, erstellt das Projekt und seine Abhängigkeiten in einer Reihe von Binärdateien und führt alle Komponententests aus, die dem Projekt zugeordnet sind.
  6. Packt den Code in ein NuGet-Paket mit der Umgebungsvariablen GitHub Run ID, die in der Versionsnummer enthalten ist.
  7. Veröffentlicht das NuGet-Paket in Azure Artifacts.

Erstellen einer neuen YAML-Datei

  1. Erstellen Sie in Ihrem Repository auf GitHub eine neue YAML-Datei im .github/workflows Verzeichnis.

  2. Kopieren Sie den folgenden Inhalt in Ihre YAML-Datei. Passen Sie die AZURE_ARTIFACTS_FEED_URLWerte und Die DOTNET_VERSION Werte BUILD_CONFIGURATIONan.

    • Legen Sie AZURE_ARTIFACTS_FEED_URL die Registrierungs-URL für Ihren Azure Artifacts-Feed fest.
    • Legen Sie die BUILD_CONFIGURATION fest.
    • Legen Sie DOTNET_VERSION diese Einstellung auf die Version Ihres Projekts fest.
    name: Push a NuGet package to Azure Artifacts with managed identity and federated authentication
    
    on:
      push:
        branches:
          - main
    
    permissions:
      id-token: write # Require write permission to Fetch an federated identity token.
      contents: read # Require read permission to access the repository contents.
    
    env:
      AZURE_ARTIFACTS_FEED_URL: https://pkgs.dev.azure.com/myorg/nuget-artifact/_packaging/Fabrikam_Feed/nuget/v3/index.json    
      BUILD_CONFIGURATION: 'Release'    # set this to the appropriate build configuration
      DOTNET_VERSION: '6.0' 
      NuGetDirectory: ${{ github.workspace}}/nuget
      VSS_NUGET_URI_PREFIXES: https://pkgs.dev.azure.com/myorg/
    
    
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
          # Checkout the repo
          - uses: actions/checkout@v4
            with:
              token: ${{ secrets.GITHUB_TOKEN }}
    
          - name: Azure CLI Login
            uses: azure/login@v2
            with:
              client-id: ${{ secrets.AZURE_CLIENT_ID }}
              tenant-id: ${{ secrets.AZURE_TENANT_ID }}
              subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    
          # Setup .NET Core SDK
          - name: Setup .NET Core
            uses: actions/setup-dotnet@v3
            with:
              dotnet-version: ${{ env.DOTNET_VERSION }}
    
          # Run dotnet build and package
          - name: dotnet build and test
            run: |
              dotnet restore
              dotnet build --configuration '${{ env.BUILD_CONFIGURATION }}'
              dotnet test --configuration '${{ env.BUILD_CONFIGURATION }}'
    
        # Create the NuGet package in the folder from the environment variable NuGetDirectory
          - run: dotnet pack --configuration Release --output ${{ env.NuGetDirectory }}
    
        # Publish the NuGet package as an artifact, so they can be used in the following jobs
          - uses: actions/upload-artifact@v3
            with:
              name: nuget
              if-no-files-found: error
              retention-days: 7
              path: ${{ env.NuGetDirectory }}/*.nupkg
    
      az-artifacts-build-and-deploy:
        needs: build
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v4
            with:
              token: ${{ secrets.GITHUB_TOKEN }}
    
          - name: Azure CLI Login
            uses: azure/login@v2
            with:
              client-id: ${{ secrets.AZURE_CLIENT_ID }}
              tenant-id: ${{ secrets.AZURE_TENANT_ID }}
              subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    
          - uses: actions/download-artifact@v3
            with:
              name: nuget
              path: ${{ env.NuGetDirectory }}
    
          - name: Setup .NET Core
            uses: actions/setup-dotnet@v3
            with:
              dotnet-version: ${{ env.DOTNET_VERSION }}
              source-url: ${{ env.AZURE_ARTIFACTS_FEED_URL }}
            env:
              NUGET_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}
    
          - name: Install credential provider for Azure Artifacts
            run: sh -c "$(curl -fsSL https://aka.ms/install-artifacts-credprovider.sh)"
    
          - name: Extract access token
            run: |
                accessToken=$(az account get-access-token --query accessToken --resource 499b84ac-1321-427f-aa17-267ca6975798 -o tsv)
                echo "::add-mask::$accessToken"
                echo "ACCESS_TOKEN=$accessToken" >> $GITHUB_ENV
    
          - name: Configure authentication provider to use Azure DevOps token
            run: |
              echo "VSS_NUGET_ACCESSTOKEN=$ACCESS_TOKEN" >> $GITHUB_ENV
    
          - name: dotnet build and publish
            run: |
              dotnet restore
              dotnet build --configuration '${{ env.BUILD_CONFIGURATION }}'
              dotnet pack --configuration '${{ env.BUILD_CONFIGURATION }}' --output ./nupkg --version-suffix ${{ github.run_id }}
    
          - name: 'Publish the package to Azure Artifacts'
            run: dotnet nuget push ${{ env.NuGetDirectory }}/*.nupkg --api-key AzureDevOps --source ${{ env.AZURE_ARTIFACTS_FEED_URL }}    
    

Voraussetzungen

Authentifizieren bei Azure Pipelines

Verwenden Sie ein persönliches Zugriffstoken (PAT), um Ihr GitHub-Konto mit Azure DevOps zu verbinden. Sie können ein PAT aus Azure DevOps generieren und dann als GitHub-Geheimnis speichern. Verweisen Sie in Ihrem GitHub-Workflow auf das Geheimnis, damit sich Ihre GitHub-Aktion bei Ihrem Azure DevOps-Projekt authentifizieren kann.

  1. Öffnen Sie Ihr GitHub-Repository, und navigieren Sie zu Einstellungen.

  2. Wählen Sie Security > Secrets and variables > Actions (Sicherheit > Geheimnisse und Variablen > Aktionen) aus.

    Auswahl zum Hinzufügen eines Geheimnisses

  3. Fügen Sie Ihr PAT ein, und geben Sie ihm den Namen AZURE_DEVOPS_TOKEN.

  4. Klicken Sie auf Add secret (Geheimnis hinzufügen).

Erstellen eines GitHub-Workflows, der ein Artefakt erstellt

GitHub-Workflows sind eine Reihe von Aktionen (z. B. Aufgaben in Azure Pipelines). Für diesen Workflow gilt Folgendes:

  1. Richtet eine .NET Core CLI-Umgebung mit der Setup-dotnet-Aktion ein.
  2. Stellt Abhängigkeiten wieder her, erstellt das Projekt und seine Abhängigkeiten in einer Reihe von Binärdateien und führt alle Komponententests aus, die dem Projekt zugeordnet sind.
  3. Packt den Code in ein NuGet-Paket mit der Umgebungsvariablen GitHub Run ID, die in der Versionsnummer enthalten ist.
  4. Veröffentlicht das NuGet-Paket in Azure Artifacts.

Erstellen einer neuen YAML-Datei

  1. Erstellen Sie in Ihrem Repository auf GitHub eine neue YAML-Datei im .github/workflows Verzeichnis.

  2. Kopieren Sie den folgenden Inhalt in Ihre YAML-Datei. Passen Sie die AZURE_ARTIFACTS_FEED_URLWerte und Die DOTNET_VERSION Werte BUILD_CONFIGURATIONan.

    • Legen Sie AZURE_ARTIFACTS_FEED_URL die Registrierungs-URL für Ihren Azure Artifacts-Feed fest.
    • Legen Sie die BUILD_CONFIGURATION fest.
    • Legen Sie DOTNET_VERSION diese Einstellung auf die Version Ihres Projekts fest.
    name: Push a NuGet package to Azure Artifacts
    
    on:
      push:
        branches:
          - main
    
    env:
      AZURE_ARTIFACTS_FEED_URL: https://pkgs.dev.azure.com/myorg/nuget-artifact/_packaging/Fabrikam_Feed/nuget/v3/index.json    
      BUILD_CONFIGURATION: 'Release'    # set this to the appropriate build configuration
      DOTNET_VERSION: '6.x' 
    
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
          # Checkout the repo
          - uses: actions/checkout@v2
    
          # Setup .NET Core SDK
          - name: Setup .NET Core
            uses: actions/setup-dotnet@v1
            with:
              dotnet-version: ${{ env.DOTNET_VERSION }}
    
          # Run dotnet build and package
          - name: dotnet build and test
            run: |
              dotnet restore
              dotnet build --configuration '${{ env.BUILD_CONFIGURATION }}'
              dotnet test --configuration '${{ env.BUILD_CONFIGURATION }}'
    
      az-artifacts-build-and-deploy:
        needs: build
        runs-on: ubuntu-latest
        steps:
          # Checkout the repo
          - uses: actions/checkout@v2
    
          # Setup .NET Core SDK
          - name: Setup .NET Core
            uses: actions/setup-dotnet@v1
            with:
              dotnet-version: ${{ env.DOTNET_VERSION }}
              source-url: ${{ env.AZURE_ARTIFACTS_FEED_URL }}
            env:
              NUGET_AUTH_TOKEN: ${{ secrets.AZURE_DEVOPS_TOKEN }} 
    
          # Run dotnet build and package
          - name: dotnet build and publish
            run: |
              dotnet restore
              dotnet build --configuration '${{ env.BUILD_CONFIGURATION }}'
              dotnet pack -c '${{ env.BUILD_CONFIGURATION }}' --version-suffix $GITHUB_RUN_ID
    
          # Publish the package to Azure Artifacts
          - name: 'dotnet publish'
            run: dotnet nuget push --api-key AzureArtifacts bin/Release/*.nupkg 
    
  3. Wechseln Sie zu Ihrem Azure Artifacts-Feed, um zu überprüfen, ob das von Ihnen pushte Paket angezeigt wird.

    Screenshot der Überprüfung für den neuen Azure Artifacts-Feed.

Bereinigen von Ressourcen

Wenn Sie Ihren GitHub-Workflow künftig nicht mehr verwenden werden, deaktivieren Sie den Workflow.

Nächste Schritte