Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Azure DevOps Services
Commencez à utiliser GitHub Actions et Azure Artifacts ensemble. GitHub Actions vous aide à automatiser vos flux de travail de développement logiciel à partir de GitHub. Vous pouvez utiliser GitHub Actions pour effectuer un déploiement sur un flux Azure Artifacts.
Vous pouvez vous authentifier à l’aide d’une identité managée ou d’un jeton d’accès personnel (PAT). Un jeton d'accès personnel (PAT) est un jeton généré par l'utilisateur qui accorde l'accès aux ressources Azure DevOps. Une identité managée est un type de principal de service qu’Azure gère automatiquement pour autoriser l’authentification sans mot de passe entre les services Azure et Azure DevOps. L’identité managée est l’option d’authentification plus sécurisée.
Prérequis
- Un compte GitHub avec un référentiel. Rejoignez GitHub et créez un référentiel.
- Flux Azure Artifacts vers lequel vous envoyez votre package NuGet à partir d’un flux de travail GitHub. Mettre en route du package NuGet.
- Configurez une identité managée affectée par l’utilisateur avec des informations d’identification fédérées associées.
- Créer une identité managée attribuée par l’utilisateur.
- Copiez les valeurs de l’ID client, de l’ID d’abonnement et de l’ID d’annuaire (locataire) à utiliser ultérieurement dans votre workflow GitHub Actions.
- Attribuez un rôle approprié à votre identité managée assignée par l'utilisateur.
- Configurez des informations d’identification d’identité fédérée sur une identité managée affectée par l’utilisateur pour approuver les jetons émis par GitHub Actions dans votre dépôt GitHub.
- Autorisation d’attribuer une identité managée au groupe Contributeur dans Azure DevOps. Les administrateurs de projet et les administrateurs de collection disposent de cette autorisation.
Remarque
Une autre approche consiste à utiliser une application Microsoft Entra avec un principal de service et des informations d’identification d’authentification fédérées pour connecter Azure DevOps et GitHub Actions. Pour en savoir plus sur cette approche, consultez Configurer une application pour approuver un fournisseur d’identité externe.
Attribuer des autorisations à votre identité managée dans Azure DevOps
Pour affecter votre identité managée à l’équipe Contributeur , procédez comme suit :
Connectez-vous à votre projet (
https://dev.azure.com/{Your_Organization/Your_Project}).Accédez à Paramètres du projet.
Sélectionnez Général>Autorisations.
Choisissez le groupe Contributeurs .
Sélectionnez l’onglet Membres , puis sélectionnez Ajouter.
Cherchez et trouvez l'identité gérée.
Sélectionnez Enregistrer pour ajouter l’identité au groupe Contributeurs .
Créer des secrets GitHub
Vous devez fournir l’ID client, l’ID de locataire et l’ID d’abonnement de votre identité managée à l’action de connexion. Ces valeurs sont stockées dans les secrets GitHub et référencées dans votre flux de travail.
Dans GitHub, accédez à votre dépôt.
Sélectionnez Paramètres dans le volet de navigation.
Sélectionnez Sécurité > Secrets et variables > Actions.
Sélectionnez New repository secret (Nouveau secret de dépôt).
Créez des secrets pour
AZURE_CLIENT_ID,AZURE_TENANT_IDetAZURE_SUBSCRIPTION_ID. Utilisez ces valeurs à partir de votre identité managée pour vos secrets GitHub :Secret de GitHub Application Microsoft Entra AZURE_CLIENT_ID ID d’application (client) AZURE_TENANT_ID ID de l’annuaire (locataire) AZURE_SUBSCRIPTION_ID Identifiant d’abonnement Enregistrez chaque secret en sélectionnant Ajouter un secret.
Créer un workflow GitHub qui génère un artefact
Les flux de travail GitHub sont une série d’actions similaires aux tâches dans Azure Pipelines. Ce flux de travail automatise le processus de création, de test, d’empaquetage et de publication d’un projet .NET sur Azure Artifacts à l’aide d’une identité managée et d’une authentification fédérée. Le workflow :
- Utilise l’action Azure/login pour vous connecter à Azure à l’aide d’une identité managée.
- Installe le fournisseur d’informations d’identification pour Azure Artifacts.
- Extrait un jeton d’accès à l’aide d’Azure CLI et configure le fournisseur d’authentification pour utiliser le jeton Azure DevOps.
- Configure un environnement CLI .NET Core à l’aide de l’action setup-dotnet.
- Restaure les dépendances, génère le projet et ses dépendances dans un ensemble de fichiers binaires et exécute tous les tests unitaires associés au projet.
- Packe le code dans un package NuGet avec la variable d’environnement GitHub Run ID incluse dans le numéro de version.
- Publie le package NuGet sur Azure Artifacts.
Créer un fichier YAML
Dans votre dépôt GitHub, créez un fichier YAML dans le
.github/workflowsrépertoire.Copiez le contenu suivant dans votre fichier YAML. Personnalisez les valeurs
AZURE_ARTIFACTS_FEED_URL,BUILD_CONFIGURATION, etDOTNET_VERSION.- Définissez
AZURE_ARTIFACTS_FEED_URLsur l'URL du registre pour votre flux Azure Artifacts. - Définissez
BUILD_CONFIGURATION. - Définissez
DOTNET_VERSIONpour la version de votre projet.
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 }}- Définissez
Prérequis
- Un compte GitHub avec un référentiel. Rejoignez GitHub et créez un référentiel.
- Flux Azure Artifacts vers lequel vous envoyez votre package NuGet à partir d’un flux de travail GitHub. Mettre en route du package NuGet.
- Jeton d’accès personnel (PAT) Azure DevOps à utiliser avec votre action GitHub.
Créer un PAT.
- Votre PAT doit disposer d’autorisations de lecture, d’écriture et de gestion des packages .
S’authentifier avec Azure Pipelines
Utilisez un jeton d’accès personnel (PAT) pour connecter votre compte GitHub à Azure DevOps. Vous pouvez générer un PAT à partir d’Azure DevOps, puis le stocker en tant que secret GitHub. Dans votre flux de travail GitHub, référencez le secret afin que votre action GitHub puisse s’authentifier auprès de votre projet Azure DevOps.
Ouvrez votre dépôt GitHub et accédez à Settings (Paramètres).
Sélectionnez Sécurité > Secrets et variables > Actions.
Collez votre PAT et attribuez-lui le nom
AZURE_DEVOPS_TOKEN.Sélectionnez Ajouter un secret.
Créer un workflow GitHub qui génère un artefact
Les workflows GitHub sont une série d’actions (comme des tâches dans Azure Pipelines). Ce workflow :
- Configure un environnement CLI .NET Core à l’aide de l’action setup-dotnet.
- Restaure les dépendances, génère le projet et ses dépendances dans un ensemble de fichiers binaires et exécute tous les tests unitaires associés au projet.
- Packe le code dans un package NuGet avec la variable d’environnement GitHub Run ID incluse dans le numéro de version.
- Publie le package NuGet sur Azure Artifacts.
Créer un fichier YAML
Dans votre dépôt GitHub, créez un fichier YAML dans le
.github/workflowsrépertoire.Copiez le contenu suivant dans votre fichier YAML. Personnalisez les valeurs
AZURE_ARTIFACTS_FEED_URL,BUILD_CONFIGURATIONetDOTNET_VERSION.- Définissez
AZURE_ARTIFACTS_FEED_URLsur l'URL du registre pour votre flux Azure Artifacts. - Définissez
BUILD_CONFIGURATION. - Définissez
DOTNET_VERSIONsur la version de votre projet.
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 }}- Définissez
Accédez à votre flux Azure Artifacts pour vérifier que vous voyez le package que vous avez envoyé.
Nettoyer les ressources
Si vous ne prévoyez pas de continuer à utiliser votre workflow GitHub, désactivez le flux de travail.