azure-devops について
azure-devops は、Azure Pipelines で CI/CD パイプラインを構築するチーム向けのスキルです。YAML 設定、再利用可能なテンプレート、段階的なジョブ、Azure などへのデプロイを扱います。
主な機能
- 01YAML パイプラインのトリガー設定
- 02ジョブとステージの構成
- 03パイプラインテンプレートの再利用
- 04変数とパラメーターの管理
- 05Azure サービスへのデプロイ
活用シーン
- 01ビルドとテストのパイプライン作成
- 02複数ステージのリリース設定
- 03Web アプリ、コンテナ、AKS ワークロードのデプロイ
- 04本番環境の承認設定
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ bagelhole/ devops-security-agent-skills --skill azure-devopsインストール後、Claude Code で/azure-devopsを入力して読み込まれたか確認します。
詳細
Azure DevOps パイプライン
YAML またはクラシックエディターを使用して、Azure Pipelines でアプリケーションをビルド、テスト、デプロイします。
このスキルを使用する場面
次の場合にこのスキルを使用します。
- Azure DevOps で CI/CD パイプラインを作成する
- ビルドおよびリリースのステージを構成する
- Azure DevOps のサービス接続を管理する
- Azure またはその他のクラウドプラットフォームにデプロイする
- マルチステージ YAML パイプラインを設定する
前提条件
- Azure DevOps の組織とプロジェクト
- 対象環境のサービス接続
- YAML の基本的な知識
- Azure サブスクリプション(Azure へのデプロイの場合)
YAML パイプラインの構造
リポジトリのルートに azure-pipelines.yml を作成します。
trigger:
branches:
include:
- main
- develop
paths:
include:
- src/*
pool:
vmImage: 'ubuntu-latest'
variables:
buildConfiguration: 'Release'
nodeVersion: '20.x'
stages:
- stage: Build
jobs:
- job: BuildJob
steps:
- task: NodeTool@0
inputs:
versionSpec: $(nodeVersion)
- script: |
npm ci
npm run build
displayName: 'Build application'
- publish: $(Build.ArtifactStagingDirectory)
artifact: drop
- stage: Deploy
dependsOn: Build
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
jobs:
- deployment: DeployWeb
environment: 'production'
strategy:
runOnce:
deploy:
steps:
- script: echo Deploying to production
トリガー
ブランチトリガー
trigger:
branches:
include:
- main
- release/*
exclude:
- feature/*
tags:
include:
- v*
プルリクエストトリガー
pr:
branches:
include:
- main
paths:
include:
- src/*
exclude:
- docs/*
スケジュールトリガー
schedules:
- cron: '0 2 * * *'
displayName: 'Nightly build'
branches:
include:
- main
always: true
ジョブとステージ
並列ジョブ
stages:
- stage: Test
jobs:
- job: UnitTests
pool:
vmImage: 'ubuntu-latest'
steps:
- script: npm run test:unit
- job: IntegrationTests
pool:
vmImage: 'ubuntu-latest'
steps:
- script: npm run test:integration
マトリックス戦略
jobs:
- job: Build
strategy:
matrix:
linux:
vmImage: 'ubuntu-latest'
windows:
vmImage: 'windows-latest'
mac:
vmImage: 'macos-latest'
pool:
vmImage: $(vmImage)
steps:
- script: npm test
ジョブの依存関係
stages:
- stage: Build
jobs:
- job: A
steps:
- script: echo Job A
- job: B
dependsOn: A
steps:
- script: echo Job B
変数とパラメーター
変数グループ
variables:
- group: 'production-secrets'
- name: buildConfiguration
value: 'Release'
実行時パラメーター
parameters:
- name: environment
displayName: 'Environment'
type: string
default: 'dev'
values:
- dev
- staging
- prod
stages:
- stage: Deploy
variables:
env: ${{ parameters.environment }}
jobs:
- job: Deploy
steps:
- script: echo "Deploying to $(env)"
シークレット変数
variables:
- name: mySecret
value: $(SECRET_FROM_PIPELINE) # Set in pipeline settings
steps:
- script: |
echo "Using secret"
./deploy.sh
env:
API_KEY: $(mySecret)
テンプレート
ジョブテンプレート
# templates/build-job.yml
parameters:
- name: nodeVersion
default: '20'
jobs:
- job: Build
steps:
- task: NodeTool@0
inputs:
versionSpec: ${{ parameters.nodeVersion }}
- script: npm ci && npm run build
テンプレートの使用
# azure-pipelines.yml
stages:
- stage: Build
jobs:
- template: templates/build-job.yml
parameters:
nodeVersion: '20'
ステージテンプレート
# templates/deploy-stage.yml
parameters:
- name: environment
type: string
- name: serviceConnection
type: string
stages:
- stage: Deploy_${{ parameters.environment }}
jobs:
- deployment: Deploy
environment: ${{ parameters.environment }}
strategy:
runOnce:
deploy:
steps:
- task: AzureWebApp@1
inputs:
azureSubscription: ${{ parameters.serviceConnection }}
appName: 'myapp-${{ parameters.environment }}'
デプロイ
環境へのデプロイ
stages:
- stage: DeployStaging
jobs:
- deployment: DeployWeb
environment: 'staging'
strategy:
runOnce:
deploy:
steps:
- download: current
artifact: drop
- script: ./deploy.sh staging
承認ゲート
Azure DevOps の UI で設定します。
- Environments に移動します
- 環境を選択します
- 承認チェックを追加します
- 承認者を設定します
ローリングデプロイ
jobs:
- deployment: Deploy
environment: 'production'
strategy:
rolling:
maxParallel: 2
deploy:
steps:
- script: ./deploy.sh
Azure サービスタスク
Azure Web App のデプロイ
- task: AzureWebApp@1
inputs:
azureSubscription: 'my-azure-connection'
appType: 'webAppLinux'
appName: 'my-web-app'
package: '$(Pipeline.Workspace)/drop/*.zip'
Azure Container Apps
- task: AzureContainerApps@1
inputs:
azureSubscription: 'my-azure-connection'
containerAppName: 'my-container-app'
resourceGroup: 'my-rg'
imageToDeploy: 'myregistry.azurecr.io/myapp:$(Build.BuildId)'
Azure Kubernetes Service
- task: KubernetesManifest@0
inputs:
action: 'deploy'
kubernetesServiceConnection: 'my-aks-connection'
namespace: 'default'
manifests: |
$(Pipeline.Workspace)/manifests/deployment.yml
$(Pipeline.Workspace)/manifests/service.yml
containers: |
myregistry.azurecr.io/myapp:$(Build.BuildId)
Docker ビルド
- task: Docker@2
inputs:
containerRegistry: 'my-acr-connection'
repository: 'myapp'
command: 'buildAndPush'
Dockerfile: '**/Dockerfile'
tags: |
$(Build.BuildId)
latest
セルフホストエージェント
エージェントのインストール
# Download agent
mkdir myagent && cd myagent
curl -o vsts-agent.tar.gz https://vstsagentpackage.azureedge.net/agent/3.227.2/vsts-agent-linux-x64-3.227.2.tar.gz
tar zxvf vsts-agent.tar.gz
# Configure
./config.sh --url https://dev.azure.com/myorg --auth pat --token PAT_TOKEN --pool default
# Run as service
sudo ./svc.sh install
sudo ./svc.sh start
セルフホストプールの使用
pool:
name: 'my-self-hosted-pool'
demands:
- docker
- Agent.OS -equals Linux
よくある問題
問題:サービス接続に失敗する
問題:Azure に認証できません 解決策:サービスプリンシパルの権限を確認し、プロジェクト設定で接続を確認します
問題:アーティファクトが見つからない
問題:アーティファクトのダウンロードに失敗します 解決策:公開タスクが正常に実行されたことを確認し、アーティファクト名が一致しているか確認します
問題:環境が見つからない
問題:環境へのデプロイに失敗します 解決策:まず Pipelines > Environments で環境を作成します
ベストプラクティス
- クラシックエディターより YAML パイプラインを使用する
- 再利用可能なコンポーネントにはテンプレートを実装する
- 共通設定には変数グループを使用する
- 本番環境の環境承認を構成する
- 最小限の権限でサービス接続を使用する
- アーティファクトのバージョン管理を実装する
- ビルドを高速化するために依存関係をキャッシュする
関連スキル
- github-actions - GitHub の CI/CD 代替手段
- terraform-azure - Azure IaC
- azure-aks - AKS のデプロイ
コメント
Markdown 対応