Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Azure DevOps-tjänster
Kom igång med GitHub Actions och Azure Artifacts tillsammans. GitHub Actions hjälper dig att automatisera dina arbetsflöden för programvaruutveckling inifrån GitHub. Du kan använda GitHub Actions för att distribuera till en Azure Artifacts-feed.
Du kan autentisera med hjälp av antingen en hanterad identitet eller en personlig åtkomsttoken (PAT). En PAT är en användargenererad token som ger åtkomst till Azure DevOps-resurser. En hanterad identitet är en typ av tjänstens huvudnamn som Azure hanterar automatiskt för att tillåta lösenordslös autentisering mellan Azure-tjänster och Azure DevOps. Hanterad identitet är det säkrare autentiseringsalternativet.
Förutsättningar
- Ett GitHub-konto med en lagringsplats. Gå med i GitHub och skapa en lagringsplats.
- Ett Azure Artifacts-flöde som du pushar ditt NuGet-paket till från ett GitHub-arbetsflöde. Kom igång med NuGet-paket.
- Konfigurera en användartilldelad hanterad identitet med en associerad federerad autentiseringsuppgift.
- Skapa en användartilldelad hanterad identitet.
- Kopiera värdena för klient-ID, prenumerations-ID och katalog-ID (klientorganisation) som ska användas senare i ditt GitHub Actions-arbetsflöde.
- Tilldela en lämplig roll till din användartilldelade hanterade identitet.
- Konfigurera en federerad identitetsautentiseringsuppgift för en användartilldelad hanterad identitet för att lita på token som utfärdats av GitHub Actions till din GitHub-lagringsplats.
- Behörighet att tilldela en hanterad identitet till deltagargruppen i Azure DevOps. Både projektadministratörer och samlingsadministratörer har den här behörigheten.
Kommentar
En annan metod är att använda ett Microsoft Entra-program med tjänstens huvudnamn och federerade autentiseringsautentiseringsuppgifter för att ansluta Azure DevOps och GitHub Actions. Mer information om den här metoden finns i Konfigurera en app för att lita på en extern identitetsprovider.
Tilldela behörigheter till din hanterade identitet i Azure DevOps
Följ dessa steg för att tilldela din hanterade identitet till deltagarteamet :
Logga in på projektet (
https://dev.azure.com/{Your_Organization/Your_Project}).Gå till Projektinställningar.
Välj Allmänna>behörigheter.
Välj gruppen Deltagare .
Välj fliken Medlemmar och välj sedan Lägg till.
Sök efter och hitta den hanterade identiteten.
Välj Spara för att lägga till identiteten i gruppen Deltagare .
Skapa GitHub-hemligheter
Du måste ange din hanterade identitets klient-ID, klient-ID och prenumerations-IDför inloggningsåtgärden. Dessa värden lagras i GitHub-hemligheter och refereras till i arbetsflödet.
Gå till din lagringsplats i GitHub.
Gå till Inställningar i navigeringsmenyn.
Välj Säkerhetshemligheter > och variabler > Åtgärder.
Välj Ny lagringsplatshemlighet.
Skapa hemligheter för
AZURE_CLIENT_ID,AZURE_TENANT_IDochAZURE_SUBSCRIPTION_ID. Använd dessa värden från din hanterade identitet för dina GitHub-hemligheter:GitHub-hemlighet Microsoft Entra-program AZURE_CLIENT_ID App-ID (klient-ID) AZURE_TENANT_ID Katalog-ID (klientorganisation) AZURE_SUBSCRIPTION_ID Prenumerations-ID:t Spara varje hemlighet genom att välja Lägg till hemlighet.
Skapa ett GitHub-arbetsflöde som skapar en artefakt
GitHub-arbetsflöden är en serie åtgärder som liknar uppgifter i Azure Pipelines. Det här arbetsflödet automatiserar processen med att skapa, testa, paketera och publicera ett .NET-projekt till Azure Artifacts med hjälp av en hanterad identitet och federerad autentisering. Arbetsflödet:
- Använder åtgärden azure/login för att logga in på Azure med hjälp av en hanterad identitet.
- Installerar providern för autentiseringsuppgifter för Azure Artifacts.
- Extraherar en åtkomsttoken med hjälp av Azure CLI och konfigurerar autentiseringsprovidern att använda Azure DevOps-token.
- Konfigurerar en .NET Core CLI-miljö med hjälp av åtgärden setup-dotnet.
- Återställer beroenden, skapar projektet och dess beroenden i en uppsättning binärfiler och kör alla enhetstester som är associerade med projektet.
- Packar koden i ett NuGet-paket med miljövariabeln GitHub Run ID som ingår i versionsnumret.
- Publicerar NuGet-paketet till Azure Artifacts.
Skapa en ny YAML-fil
Skapa en ny YAML-fil i katalogen på
.github/workflowsdin GitHub-lagringsplats.Kopiera följande innehåll till YAML-filen.
AZURE_ARTIFACTS_FEED_URLAnpassa värdena ,BUILD_CONFIGURATIONochDOTNET_VERSION.- Ange
AZURE_ARTIFACTS_FEED_URLtill register-URL:en för Azure Artifacts-feeden. -
BUILD_CONFIGURATIONAnge . - Ange
DOTNET_VERSIONtill versionen av projektet.
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 }}- Ange
Förutsättningar
- Ett GitHub-konto med en lagringsplats. Gå med i GitHub och skapa en lagringsplats.
- Ett Azure Artifacts-flöde som du pushar ditt NuGet-paket till från ett GitHub-arbetsflöde. Kom igång med NuGet-paket.
- En personlig åtkomsttoken för Azure DevOps (PAT) som ska användas med din GitHub-åtgärd.
Skapa en PAT.
- Din PAT måste ha läs-, skriv- och hanteringsbehörigheter för paketering .
Autentisera med Azure Pipelines
Använd en personlig åtkomsttoken (PAT) för att ansluta ditt GitHub-konto till Azure DevOps. Du kan generera en PAT inifrån Azure DevOps och sedan lagra den som en GitHub-hemlighet. I ditt GitHub-arbetsflöde refererar du till hemligheten så att din GitHub-åtgärd kan autentiseras med ditt Azure DevOps-projekt.
Öppna din GitHub-lagringsplats och gå till Inställningar.
Välj Säkerhetshemligheter > och variabler > Åtgärder.
Klistra in din PAT och ge den namnet
AZURE_DEVOPS_TOKEN.Välj Add secret (Lägg till hemlighet).
Skapa ett GitHub-arbetsflöde som skapar en artefakt
GitHub-arbetsflöden är en serie åtgärder (till exempel uppgifter i Azure Pipelines). Det här arbetsflödet:
- Konfigurerar en .NET Core CLI-miljö med hjälp av åtgärden setup-dotnet.
- Återställer beroenden, skapar projektet och dess beroenden i en uppsättning binärfiler och kör alla enhetstester som är associerade med projektet.
- Packar koden i ett NuGet-paket med miljövariabeln GitHub Run ID som ingår i versionsnumret.
- Publicerar NuGet-paketet till Azure Artifacts.
Skapa en ny YAML-fil
Skapa en ny YAML-fil i katalogen på
.github/workflowsdin GitHub-lagringsplats.Kopiera följande innehåll till YAML-filen.
AZURE_ARTIFACTS_FEED_URLAnpassa värdena ,BUILD_CONFIGURATIONochDOTNET_VERSION.- Ange
AZURE_ARTIFACTS_FEED_URLtill register-URL:en för Azure Artifacts-feeden. -
BUILD_CONFIGURATIONAnge . - Ange
DOTNET_VERSIONtill versionen av projektet.
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 }}- Ange
Gå till din Azure Artifacts-feed för att kontrollera att du ser paketet som du pushade.
Rensa resurser
Om du inte planerar att fortsätta använda ditt GitHub-arbetsflöde inaktiverar du arbetsflödet.