Udostępnij za pośrednictwem


Szybki start: wypychanie do usługi Azure Artifacts przy użyciu funkcji GitHub Actions

Azure DevOps Services

Rozpocznij pracę przy użyciu funkcji GitHub Actions i usługi Azure Artifacts razem. Funkcja GitHub Actions ułatwia automatyzowanie przepływów pracy tworzenia oprogramowania z poziomu usługi GitHub. Do wdrożenia do kanału usługi Azure Artifacts można użyć GitHub Actions.

Możesz uwierzytelnić się przy użyciu tożsamości zarządzanej lub osobistego tokenu dostępu (PAT). Pat to token generowany przez użytkownika, który udziela dostępu do zasobów usługi Azure DevOps. Tożsamość zarządzana to typ jednostki usługi, którą platforma Azure zarządza automatycznie, aby umożliwić uwierzytelnianie bez hasła między usługami platformy Azure i usługą Azure DevOps. Tożsamość zarządzana to bezpieczniejsza opcja uwierzytelniania.

Wymagania wstępne

Uwaga

Alternatywną metodą jest zastosowanie aplikacji Microsoft Entra z principałem usługi oraz poświadczeniem uwierzytelniania federacyjnego do połączenia Azure DevOps z GitHub Actions. Aby dowiedzieć się więcej na temat tego podejścia, zobacz Konfigurowanie aplikacji do zaufania zewnętrznemu dostawcy tożsamości.

Przypisywanie uprawnień do tożsamości zarządzanej w usłudze Azure DevOps

Aby przypisać tożsamość zarządzaną do zespołu Współtwórca, wykonaj następujące kroki:

  1. Zaloguj się do projektu (https://dev.azure.com/{Your_Organization/Your_Project}).

  2. Przejdź do ustawień projektu.

  3. Wybierz pozycję Uprawnienia ogólne>.

  4. Wybierz grupę Współautorzy .

    Zrzut ekranu przedstawiający sposób wybierania grupy Współautorzy w ustawieniach uprawnień projektu usługi Azure DevOps.

  5. Wybierz kartę Członkowie , a następnie wybierz pozycję Dodaj.

  6. Wyszukaj i znajdź tożsamość zarządzaną.

  7. Wybierz pozycję Zapisz , aby dodać tożsamość do grupy Współautorzy .

    Zrzut ekranu przedstawiający kartę Członkowie, na której dodasz tożsamość zarządzaną do grupy Współautorzy w usłudze Azure DevOps.

Twórz sekrety GitHub

Musisz podać identyfikator klienta tożsamości zarządzanej , identyfikator dzierżawy i identyfikator subskrypcji do akcji logowania. Te wartości są przechowywane w tajnych danych GitHub i są używane w przepływie pracy.

  1. W usłudze GitHub przejdź do repozytorium.

  2. Przejdź do pozycji Ustawienia w menu nawigacji.

  3. Wybierz bezpieczeństwo > tajne i zmienne > akcje.

    Zrzut ekranu przedstawiający dodawanie sekretu

  4. Wybierz opcję Nowy sekret repozytorium.

  5. Utwórz tajne wpisy dla AZURE_CLIENT_ID, AZURE_TENANT_ID i AZURE_SUBSCRIPTION_ID. Użyj tych wartości z tożsamości zarządzanej dla sekretów GitHub.

    Sekret GitHub Aplikacja Microsoft Entra
    AZURE_CLIENT_ID Identyfikator aplikacji (klient)
    AZURE_TENANT_ID Identyfikator katalogu (klienta)
    AZURE_SUBSCRIPTION_ID Identyfikator subskrypcji
  6. Zapisz każdy wpis tajny, wybierając pozycję Dodaj wpis tajny.

Utwórz przepływ pracy w GitHubie, który buduje artefakt

Przepływy pracy usługi GitHub to seria akcji, podobnie jak zadania w usłudze Azure Pipelines. Ten przepływ pracy automatyzuje proces tworzenia, testowania, pakowania i publikowania projektu platformy .NET w usłudze Azure Artifacts przy użyciu tożsamości zarządzanej i uwierzytelniania federacyjnego. Przepływ pracy:

  1. Używa akcji azure/login do logowania się na platformie Azure przy użyciu tożsamości zarządzanej.
  2. Instaluje dostawcę poświadczeń dla usługi Azure Artifacts.
  3. Wyodrębnia token dostępu przy użyciu interfejsu wiersza polecenia platformy Azure i konfiguruje dostawcę uwierzytelniania do korzystania z tokenu usługi Azure DevOps.
  4. Konfiguruje środowisko CLI platformy .NET Core za pomocą akcji setup-dotnet.
  5. Przywraca zależności, kompiluje projekt i jego zależności w zestawie plików binarnych i uruchamia wszystkie testy jednostkowe skojarzone z projektem.
  6. Pakuje kod do pakietu NuGet, uwzględniając zmienną środowiskową "GitHub Run ID" w numerze wersji.
  7. Publikuje pakiet NuGet w usłudze Azure Artifacts.

Tworzenie nowego pliku YAML

  1. W repozytorium GitHub utwórz nowy plik YAML w .github/workflows katalogu.

  2. Skopiuj następującą zawartość do pliku YAML. Dostosuj wartości AZURE_ARTIFACTS_FEED_URL, BUILD_CONFIGURATION i DOTNET_VERSION.

    • Ustaw AZURE_ARTIFACTS_FEED_URL jako URL rejestracji dla feedu usługi Azure Artifacts.
    • Ustaw wartość BUILD_CONFIGURATION.
    • Ustaw wersję DOTNET_VERSION dla swojego projektu.
    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 }}    
    

Wymagania wstępne

Uwierzytelnianie za pomocą usługi Azure Pipelines

Użyj osobistego tokenu dostępu (PAT), aby połączyć konto usługi GitHub z usługą Azure DevOps. Możesz wygenerować identyfikator PAT z poziomu usługi Azure DevOps, a następnie zapisać go jako wpis tajny usługi GitHub. W przepływie pracy usługi GitHub odwołuj się do wpisu tajnego, aby akcja usługi GitHub mogła uwierzytelniać się w projekcie usługi Azure DevOps.

  1. Otwórz repozytorium GitHub i przejdź do pozycji Ustawienia.

  2. Wybierz bezpieczeństwo > tajne i zmienne > akcje.

    Wybierz, aby dodać wpis tajny

  3. Wklej swój PAT i nadaj mu nazwę AZURE_DEVOPS_TOKEN.

  4. Wybierz przycisk Add secret (Dodaj wpis tajny).

Utwórz przepływ pracy w GitHubie, który buduje artefakt

Przepływy pracy usługi GitHub to seria akcji (takich jak zadania w usłudze Azure Pipelines). Ten przepływ pracy:

  1. Konfiguruje środowisko CLI platformy .NET Core za pomocą akcji setup-dotnet.
  2. Przywraca zależności, kompiluje projekt i jego zależności w zestawie plików binarnych i uruchamia wszystkie testy jednostkowe skojarzone z projektem.
  3. Pakuje kod do pakietu NuGet ze zmienną środowiskową Identyfikator przebiegu usługi GitHub uwzględnioną w numerze wersji.
  4. Publikuje pakiet NuGet w usłudze Azure Artifacts.

Tworzenie nowego pliku YAML

  1. W repozytorium GitHub utwórz nowy plik YAML w .github/workflows katalogu.

  2. Skopiuj następującą zawartość do pliku YAML. Dostosuj wartości AZURE_ARTIFACTS_FEED_URL, BUILD_CONFIGURATION i DOTNET_VERSION.

    • Ustaw AZURE_ARTIFACTS_FEED_URL jako URL rejestracji dla feedu usługi Azure Artifacts.
    • Ustaw wartość BUILD_CONFIGURATION.
    • Ustaw DOTNET_VERSION jako wersję projektu.
    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 bin/Release/*.nupkg --api-key AzureDevOps --source ${{ env.AZURE_ARTIFACTS_FEED_URL }}    
    
    
  3. Przejdź do kanału usługi Azure Artifacts, aby sprawdzić, czy widzisz przesłany pakiet.

    Zrzut ekranu przedstawiający stronę źródła danych usługi Azure Artifacts z nowo opublikowanym pakietem NuGet.

Czyszczenie zasobów

Jeśli nie planujesz kontynuować korzystania z przepływu pracy usługi GitHub, wyłącz przepływ pracy.

Następne kroki