Azure DevOps サービス
GitHub Actions と Azure Artifacts の使用を開始します。 GitHub Actions は、GitHub 内からソフトウェア開発ワークフローを自動化するのに役立ちます。 GitHub Actions を使用して、Azure Artifacts フィードにデプロイできます。
マネージド ID または 個人用アクセス トークン (PAT) を使用して認証できます。 PAT は、Azure DevOps リソースへのアクセスを許可するユーザー生成トークンです。 マネージド ID は、Azure サービスと Azure DevOps の間のパスワードレス認証を許可するために Azure が自動的に管理するサービス プリンシパルの一種です。 マネージド ID は、より安全な認証オプションです。
前提条件
- GitHub アカウントとリポジトリ。 GitHub に参加して、リポジトリを作成します。
- GitHub ワークフローから NuGet パッケージをプッシュする Azure Artifacts フィード。 NuGet パッケージの概要。
- 関連付けられたフェデレーション資格情報を使用して、ユーザー割り当てマネージド ID を設定します。
- 「ユーザー割り当てマネージド ID を作成する」の手順を使用して、ユーザー割り当てマネージド ID を作成します。
- Client ID、Subscription ID、Directory (テナント) ID の値をコピーして後で GitHub Actions ワークフローで使用します。
- ユーザー割り当てマネージド ID に適切なロールを割り当てます。
- GitHub Actions によって発行されたトークンを GitHub リポジトリに信頼するように ユーザー割り当てマネージド ID にフェデレーション ID 資格情報を構成します。
- Azure DevOps の 共同作成者 グループにマネージド ID を割り当てるアクセス許可。 プロジェクト管理者 と Collection 管理者 両方にこのアクセス許可があります。
Note
別の方法として、サービス プリンシパルとフェデレーション認証資格情報を使用して Microsoft Entra アプリケーションを使用して、Azure DevOps と GitHub Actions を接続します。 この方法の詳細については、「 外部 ID プロバイダーを信頼するようにアプリを構成するを参照してください。
Azure DevOps でマネージド ID にアクセス許可を割り当てる
マネージド ID を Contributor チームに割り当てるには、次の手順に従います。
プロジェクトにサインインします(
https://dev.azure.com/{Your_Organization/Your_Project})。[プロジェクト設定] に進みます。
General>Permissions を選択します。
Contributors グループを選択します。
Members タブを選択し、追加を選択します。
マネージド ID を検索して見つけます。
保存を選択して、id を Contributors グループに追加します。
GitHub シークレットを作成する
ログイン アクションには、マネージド ID の Client ID、 テナント ID、および Subscription ID を指定する必要があります。 これらの値は GitHub シークレットに格納され、ワークフローで参照されます。
GitHub で、お使いのリポジトリに移動します。
ナビゲーション メニューで [設定] に移動します。
[Security] (セキュリティ) > [Secrets and variables] (シークレットと変数) > [Actions] (アクション) を選びます。
[New repository secret](新しいリポジトリ シークレット) を選択します。
AZURE_CLIENT_ID、AZURE_TENANT_ID、AZURE_SUBSCRIPTION_IDのシークレットを作成します。 GitHub シークレットには、マネージド ID の次の値を使用します。GitHub シークレット Microsoft Entra アプリケーション AZURE_CLIENT_ID アプリケーション (クライアント) ID AZURE_TENANT_ID ディレクトリ (テナント) ID AZURE_SUBSCRIPTION_ID サブスクリプション ID [Add secret](シークレットの追加) を選択して各シークレットを保存します。
アーティファクトをビルドする GitHub ワークフローを作成する
GitHub ワークフロー は、Azure Pipelines のタスクに似た一連のアクションです。 このワークフローは、マネージド ID とフェデレーション認証を使用して、.NET プロジェクトのビルド、テスト、パッケージ化、Azure Artifacts への発行のプロセスを自動化します。 ワークフローは次のようになります。
- azure/login アクションを使用して、マネージド ID を使用して Azure にサインインします。
- Azure Artifacts の credential プロバイダーをインストールします。
- Azure CLI を使用してアクセス トークンを抽出し、Azure DevOps トークンを使用するように認証プロバイダーを構成します。
- setup-dotnet アクションを使用して、.NET Core CLI 環境を設定します。
- 依存関係を復元し、プロジェクトとその依存関係をバイナリのセットにビルドし、プロジェクトに関連付けられているすべての単体テストを実行します。
- バージョン番号に含まれる GitHub 実行 ID 環境変数を使用して、コードを NuGet パッケージにパックします。
- NuGet パッケージを Azure Artifacts に発行します。
新しい YAML ファイルを作成する
GitHub リポジトリで、
.github/workflowsディレクトリに新しい YAML ファイルを作成します。次の内容を YAML ファイルにコピーします。
AZURE_ARTIFACTS_FEED_URL、BUILD_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 プロジェクトで認証を行えるようにします。
GitHub リポジトリを開き、 [Settings](設定) に移動します。
[Security] (セキュリティ) > [Secrets and variables] (シークレットと変数) > [Actions] (アクション) を選びます。
PAT を貼り付け、
AZURE_DEVOPS_TOKENという名前を付けます。[Add secret](シークレットの追加) を選択します。
アーティファクトをビルドする GitHub ワークフローを作成する
GitHub ワークフロー は、(Azure Pipelines のタスクのような) 一連のアクションです。 このワークフロー:
- setup-dotnet アクションを使用して、.NET Core CLI 環境を設定します。
- 依存関係を復元し、プロジェクトとその依存関係をバイナリのセットにビルドし、プロジェクトに関連付けられているすべての単体テストを実行します。
- バージョン番号に含まれる GitHub 実行 ID 環境変数を使用して、コードを NuGet パッケージにパックします。
- NuGet パッケージを Azure Artifacts に発行します。
新しい YAML ファイルを作成する
GitHub リポジトリで、
.github/workflowsディレクトリに新しい YAML ファイルを作成します。次の内容を YAML ファイルにコピーします。
AZURE_ARTIFACTS_FEED_URL、BUILD_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 }}-
Azure Artifacts フィードに移動して、プッシュしたパッケージが表示されることを確認します。
リソースをクリーンアップする
GitHub ワークフローを引き続き使用する予定がない場合は、 ワークフローを無効にします。