次の方法で共有


クイック スタート: GitHub Actions を使用して Azure Artifacts にプッシュする

Azure DevOps サービス

GitHub Actions と Azure Artifacts の使用を開始します。 GitHub Actions は、GitHub 内からソフトウェア開発ワークフローを自動化するのに役立ちます。 GitHub Actions を使用して、Azure Artifacts フィードにデプロイできます。

マネージド ID または 個人用アクセス トークン (PAT) を使用して認証できます。 PAT は、Azure DevOps リソースへのアクセスを許可するユーザー生成トークンです。 マネージド ID は、Azure サービスと Azure DevOps の間のパスワードレス認証を許可するために Azure が自動的に管理するサービス プリンシパルの一種です。 マネージド ID は、より安全な認証オプションです。

前提条件

Note

別の方法として、サービス プリンシパルとフェデレーション認証資格情報を使用して Microsoft Entra アプリケーションを使用して、Azure DevOps と GitHub Actions を接続します。 この方法の詳細については、「 外部 ID プロバイダーを信頼するようにアプリを構成するを参照してください。

Azure DevOps でマネージド ID にアクセス許可を割り当てる

マネージド ID を Contributor チームに割り当てるには、次の手順に従います。

  1. プロジェクトにサインインします(https://dev.azure.com/{Your_Organization/Your_Project})。

  2. [プロジェクト設定] に進みます。

  3. General>Permissions を選択します。

  4. Contributors グループを選択します。

    Azure DevOps プロジェクトのアクセス許可設定で [共同作成者] グループを選択する方法を示すスクリーンショット。

  5. Members タブを選択し、追加を選択します。

  6. マネージド ID を検索して見つけます。

  7. 保存を選択して、id を Contributors グループに追加します。

    Azure DevOps の共同作成者グループにマネージド ID を追加する [メンバー] タブを示すスクリーンショット。

GitHub シークレットを作成する

ログイン アクションには、マネージド ID の Client IDテナント ID、および Subscription ID を指定する必要があります。 これらの値は GitHub シークレットに格納され、ワークフローで参照されます。

  1. GitHub で、お使いのリポジトリに移動します。

  2. ナビゲーション メニューで [設定] に移動します。

  3. [Security] (セキュリティ) > [Secrets and variables] (シークレットと変数) > [Actions] (アクション) を選びます。

    シークレットを追加しているスクリーンショット

  4. [New repository secret](新しいリポジトリ シークレット) を選択します。

  5. AZURE_CLIENT_IDAZURE_TENANT_IDAZURE_SUBSCRIPTION_ID のシークレットを作成します。 GitHub シークレットには、マネージド ID の次の値を使用します。

    GitHub シークレット Microsoft Entra アプリケーション
    AZURE_CLIENT_ID アプリケーション (クライアント) ID
    AZURE_TENANT_ID ディレクトリ (テナント) ID
    AZURE_SUBSCRIPTION_ID サブスクリプション ID
  6. [Add secret](シークレットの追加) を選択して各シークレットを保存します。

アーティファクトをビルドする GitHub ワークフローを作成する

GitHub ワークフロー は、Azure Pipelines のタスクに似た一連のアクションです。 このワークフローは、マネージド ID とフェデレーション認証を使用して、.NET プロジェクトのビルド、テスト、パッケージ化、Azure Artifacts への発行のプロセスを自動化します。 ワークフローは次のようになります。

  1. azure/login アクションを使用して、マネージド ID を使用して Azure にサインインします。
  2. Azure Artifactscredential プロバイダーをインストールします。
  3. Azure CLI を使用してアクセス トークンを抽出し、Azure DevOps トークンを使用するように認証プロバイダーを構成します。
  4. setup-dotnet アクションを使用して、.NET Core CLI 環境を設定します。
  5. 依存関係を復元し、プロジェクトとその依存関係をバイナリのセットにビルドし、プロジェクトに関連付けられているすべての単体テストを実行します。
  6. バージョン番号に含まれる GitHub 実行 ID 環境変数を使用して、コードを NuGet パッケージにパックします。
  7. NuGet パッケージを Azure Artifacts に発行します。

新しい YAML ファイルを作成する

  1. GitHub リポジトリで、 .github/workflows ディレクトリに新しい YAML ファイルを作成します。

  2. 次の内容を YAML ファイルにコピーします。 AZURE_ARTIFACTS_FEED_URLBUILD_CONFIGURATION、およびDOTNET_VERSIONの値をカスタマイズします。

    • AZURE_ARTIFACTS_FEED_URLを Azure Artifacts フィードのレジストリ URL に設定します。
    • BUILD_CONFIGURATION を設定します。
    • DOTNET_VERSIONをプロジェクトのバージョンに設定します。
    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 }}    
    

前提条件

  • GitHub アカウントとリポジトリ。 GitHub に参加して、リポジトリを作成します。
  • GitHub ワークフローから NuGet パッケージをプッシュする Azure Artifacts フィード。 NuGet パッケージの概要
  • GitHub アクションで使用する Azure DevOps 個人用アクセス トークン (PAT)。 PAT を作成します。
    • PAT には、 Packaging アクセス許可が必要です。

Azure Pipelines で認証を行う

個人用アクセス トークン (PAT) を使って、GitHub アカウントを Azure DevOps に接続します。 Azure DevOps 内から PAT を生成し、GitHub シークレットとしてそれを格納できます。 GitHub ワークフロー内でシークレットを参照して、GitHub アクションが Azure DevOps プロジェクトで認証を行えるようにします。

  1. GitHub リポジトリを開き、 [Settings](設定) に移動します。

  2. [Security] (セキュリティ) > [Secrets and variables] (シークレットと変数) > [Actions] (アクション) を選びます。

    シークレットの追加を選択する

  3. PAT を貼り付け、AZURE_DEVOPS_TOKEN という名前を付けます。

  4. [Add secret](シークレットの追加) を選択します。

アーティファクトをビルドする GitHub ワークフローを作成する

GitHub ワークフロー は、(Azure Pipelines のタスクのような) 一連のアクションです。 このワークフロー:

  1. setup-dotnet アクションを使用して、.NET Core CLI 環境を設定します。
  2. 依存関係を復元し、プロジェクトとその依存関係をバイナリのセットにビルドし、プロジェクトに関連付けられているすべての単体テストを実行します。
  3. バージョン番号に含まれる GitHub 実行 ID 環境変数を使用して、コードを NuGet パッケージにパックします。
  4. NuGet パッケージを Azure Artifacts に発行します。

新しい YAML ファイルを作成する

  1. GitHub リポジトリで、 .github/workflows ディレクトリに新しい YAML ファイルを作成します。

  2. 次の内容を YAML ファイルにコピーします。 AZURE_ARTIFACTS_FEED_URLBUILD_CONFIGURATION、およびDOTNET_VERSIONの値をカスタマイズします。

    • AZURE_ARTIFACTS_FEED_URLを Azure Artifacts フィードのレジストリ URL に設定します。
    • BUILD_CONFIGURATION を設定します。
    • DOTNET_VERSIONをプロジェクトのバージョンに設定します。
    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. Azure Artifacts フィードに移動して、プッシュしたパッケージが表示されることを確認します。

    新しく発行された NuGet パッケージを表示する Azure Artifacts フィード ページのスクリーンショット。

リソースをクリーンアップする

GitHub ワークフローを引き続き使用する予定がない場合は、 ワークフローを無効にします

次のステップ