Contents
Azure DevOps と Azure Pipelines の基本概念と主要用語
| 用語 | 意味 |
|---|---|
| Organization | 複数プロジェクトをまとめる最上位単位。Azure AD テナントに紐付く。 |
| Project | 作業対象領域。リポジトリ、ボード、パイプラインなどが含まれる。 |
| Repo (Git/TFVC) | ソースコードを管理する格納庫。Azure Repos だけでなく外部 GitHub も利用可能。 |
| Pipeline | YAML で定義した CI/CD の実行フロー。ビルド、テスト、デプロイの各ステージを記述できる。 |
| Agent | ジョブを実行するマシン。Microsoft が提供するホストエージェント(ubuntu‑latest など)と自己管理エージェントがある。 |
Azure DevOps と Azure Pipelines の位置付け
- Azure DevOps は、計画・開発・テスト・デリバリーを統合的に支援するサービス群です。
- その中の Azure Pipelines が、コードがプッシュされた瞬間に自動でビルド・テスト・デプロイ(CI/CD)を実行します。
- 組織 → プロジェクト → リポジトリ → パイプラインという階層構造により、権限管理や作業分担がシンプルになります。
前提条件と Azure DevOps の組織・プロジェクト作成手順
必要なもの
| 項目 | 内容 |
|---|---|
| Azure アカウント | 無料アカウントでも利用可能。 |
| Web ブラウザ | Microsoft Edge、Chrome、Firefox など最新バージョンを推奨。 |
| Git クライアント | git コマンドが使用できる環境(Windows, macOS, Linux)。 |
組織とプロジェクトの作成手順(公式ドキュメント)
- https://dev.azure.com にサインインし、画面右上の 「組織を作成」 をクリック。
- 組織名(例:
myorg2026)とリージョン(最も近いデータセンター)を入力して 「続行」。 - 作成された組織に移動し、「新しいプロジェクト」 ボタンを押す。
- プロジェクト名:
FirstPipelineDemo - 可視性は プライベート(社内限定)を選択。
- 「作成」 をクリックすると数秒で完了します。
詳細は Microsoft Learn の [最初のパイプラインの作成] (https://learn.microsoft.com/ja-jp/azure/devops/pipelines/create-first-pipeline) を参照してください。
Git リポジトリの準備(Azure Repos 例)
| 手順 | コマンド / 操作 |
|---|---|
| 1. リポジトリ作成 | プロジェクト画面 → Repos → New repository → sample-webapi |
| 2. ローカルクローン | git clone https://dev.azure.com/myorg2026/FirstPipelineDemo/_git/sample-webapi |
| 3. サンプルコード追加 | dotnet new webapi -o src(.NET 7 Web API テンプレート) |
| 4. コミット & プッシュ | bash<br>git add .<br>git commit -m "Add sample Web API"<br>git push<br> |
GitHub を利用したい場合は、リポジトリ URL を Azure Pipelines の「外部 Git」設定に貼り付けるだけで同様に使用できます。
azure-pipelines.yml の基本構造と最小構成例
必須要素の概要
| 要素 | 役割 |
|---|---|
| trigger | ビルド開始条件(ブランチやタグ)。 |
| pool | 使用するエージェントプール/イメージ。 |
| variables (任意) | 環境ごとの設定値を管理。 |
| steps | 実際に実行されるタスク(スクリプト、拡張機能等)。 |
最小構成サンプル(.NET 7 Web API)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
trigger: branches: include: - main # main ブランチへの push がトリガー pool: vmImage: 'ubuntu-latest' # Microsoft 提供の Ubuntu ホストエージェント variables: buildConfiguration: 'Release' steps: - task: UseDotNet@2 inputs: packageType: 'sdk' version: '7.x' - script: | dotnet restore dotnet build --configuration $(buildConfiguration) displayName: 'ビルド' - script: | dotnet test --no-build --verbosity normal displayName: 'テスト' |
Microsoft Learn に沿った作成フロー
- Pipelines > Create Pipeline を選択し、リポジトリ種別として Azure Repos Git を指定。
- YAML エディタが表示されたら上記サンプルを貼り付け、
azure-pipelines.ymlとして保存。 - Run ボタンでビルドがキューイングされ、結果がリアルタイムに UI に表示されます。
2024 年版ベストプラクティス ― セキュリティ・パフォーマンス・拡張性
1. シークレット管理と Azure Key Vault の連携
| 手順 | 操作ポイント |
|---|---|
| Key Vault 作成 | Azure Portal → Key Vault → myVault2026(名前は一意に) |
| シークレット登録 | 例: ConnectionStrings--Prod、ApiKey--Payment などを格納。 |
| サービスコネクション設定 | プロジェクトの Pipelines > Service connections → 「Azure Resource Manager」→「Key Vault」接続を作成し、Get 権限を付与。 |
| YAML で参照 | yaml<br>variables:<br>- group: kv-secrets # 事前に変数グループで Key Vault をリンク<br> |
※ 非公式サイト(app‑tatsujin.com)へのリンクは削除し、代わりに公式ドキュメントを参照してください。
- シークレット管理: https://learn.microsoft.com/ja-jp/azure/devops/pipelines/release/key-vault
2. ビルドキャッシュで時間短縮
|
1 2 3 4 5 6 7 |
- task: Cache@2 inputs: key: 'dotnet | "$(Agent.OS)" | **/*.csproj' restoreKeys: | dotnet | "$(Agent.OS)" path: $(HOME)/.nuget/packages |
- 効果:同一エージェント上で NuGet パッケージが再利用され、ビルド時間を約 30 % 短縮。
- ベストプラクティス:キャッシュキーに
$(Build.SourcesDirectory)やcsprojのハッシュを組み込むことで、依存関係が変わったときだけ再取得できる。
3. パラメータ化と環境別変数
|
1 2 3 4 5 6 7 8 9 10 11 12 |
parameters: - name: environment type: string default: 'staging' variables: - group: ${{ parameters.environment }}-vars # 例: staging-vars, production-vars steps: - script: echo "Deploying to ${{ parameters.environment }}" displayName: '環境表示' |
- ポイント:
parametersにより同一 YAML を複数環境で再利用でき、保守コストが低減。
4. Azure App Service へのシンプルデプロイ
|
1 2 3 4 5 6 7 |
- task: AzureWebApp@1 inputs: azureSubscription: 'myServiceConnection' # Key Vault と同一のサービスコネクション appName: 'first-pipeline-demo' package: $(Build.ArtifactStagingDirectory)/**/*.zip runtimeStack: 'DOTNETCORE|7.0' |
注意点
- Continuous Deployment 設定は無効化 しておく(手動デプロイが優先されるように)。
- 本番環境へデプロイする場合は、スロット交換 (
Swap Slots) タスクを追加し、ステージングで検証後に本番へ切り替える。
トラブルシューティングと次のステップ
代表的なエラー例と対処法
| エラー | 主な原因 | 推奨対策 |
|---|---|---|
Failed to fetch Azure Key Vault secret |
サービスコネクションに Get 権限がない | キーボルトのアクセスポリシーで対象サービスプリンシパルに Get を付与。 |
dotnet restore failed |
NuGet フィード認証エラー | nuget.config に正しい PAT(Personal Access Token)を設定し、変数グループで安全に管理。 |
AzureWebApp task failed: 403 Forbidden |
デプロイ先 App Service のロール不足 | サービスコネクションに Contributor または Website Contributor ロールを割り当てる。 |
ログ確認手順
- パイプライン実行画面で失敗したジョブの View logs をクリック。
- 左側ツリーから対象ステップを選択し、エラーメッセージをコピー。
- 必要に応じて Retry または Run pipeline から変数・権限を修正して再実行。
ブランチ戦略とマルチステージパイプラインの導入例
推奨ブランチモデル(GitFlow ベース)
| ブランチ | 用途 |
|---|---|
main |
本番リリースのみ。 |
release/* |
リリース候補。テストが完了したら main にマージ。 |
feature/* |
新機能開発中。プルリクエストでレビュー後に release/* へ統合。 |
hotfix/* |
本番緊急修正。直接 main と release/* にマージ。 |
マルチステージ YAML(簡易版)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
trigger: branches: include: [ main, release/*, feature/* ] stages: # ----------------- Build ----------------- - stage: Build jobs: - job: BuildJob steps: - task: UseDotNet@2 inputs: packageType: 'sdk' version: '7.x' - script: | dotnet restore dotnet build --configuration Release displayName: 'Build' # ----------------- Test ----------------- - stage: Test dependsOn: Build condition: succeeded() jobs: - job: TestJob steps: - script: dotnet test --no-build --verbosity normal displayName: 'Test' # ----------------- Deploy Staging ---------- - stage: Deploy_Staging dependsOn: Test condition: eq(variables['Build.SourceBranch'], 'refs/heads/release/staging') jobs: - job: DeployStaging steps: - task: AzureWebApp@1 inputs: azureSubscription: 'myServiceConnection' appName: 'first-pipeline-demo-stg' package: $(Build.ArtifactStagingDirectory)/**/*.zip runtimeStack: 'DOTNETCORE|7.0' # ----------------- Deploy Production ------- - stage: Deploy_Production dependsOn: Test condition: eq(variables['Build.SourceBranch'], 'refs/heads/main') approval: approvals: - approvers: ['team-lead@example.com'] jobs: - job: DeployProd steps: - task: AzureWebApp@1 inputs: azureSubscription: 'myServiceConnection' appName: 'first-pipeline-demo' package: $(Build.ArtifactStagingDirectory)/**/*.zip runtimeStack: 'DOTNETCORE|7.0' |
今すぐ取り組むべきこと
- 自チームのブランチ命名規則 を策定し、リポジトリに反映させる。
- 環境ごとの 変数グループと Key Vault を作成し、YAML にリンクする。
- 上記マルチステージ YAML を
azure-pipelines.ymlとして保存し、プルリクエストでテスト実施。
まとめ
- Azure DevOps は計画・コード管理・CI/CD を一体化した統合プラットフォームであり、Azure Pipelines がその自動化コアです。
- 組織・プロジェクト作成 → リポジトリ配置 →
azure-pipelines.ymlの定義という流れは、公式 Microsoft Learn に沿って実施すれば確実に構築できます。 - ベストプラクティス(Key Vault でのシークレット管理、キャッシュ活用、パラメータ化)を取り入れることで、セキュリティとビルド速度が大幅に向上します。
- エラーはログのステップごとに確認し、権限や認証情報を見直すだけで多くが解決できます。
- 最後に ブランチ戦略 と マルチステージパイプライン を導入すれば、本格的な継続的デリバリー体制が完成します。
これらの手順を実践すれば、初心者でも Azure DevOps 上で信頼性の高い CI/CD パイプラインを構築できるはずです。ぜひご自身のプロジェクトで試してみてください!