mcpField
A
azure-devops

azure-devops

github.com/bagelholeクラウド・DevOps1.2k328 回インストール23 週間前に更新
リポジトリ

azure-devops について

azure-devops は、Azure Pipelines で CI/CD パイプラインを構築するチーム向けのスキルです。YAML 設定、再利用可能なテンプレート、段階的なジョブ、Azure などへのデプロイを扱います。

主な機能

  1. 01YAML パイプラインのトリガー設定
  2. 02ジョブとステージの構成
  3. 03パイプラインテンプレートの再利用
  4. 04変数とパラメーターの管理
  5. 05Azure サービスへのデプロイ

活用シーン

  1. 01ビルドとテストのパイプライン作成
  2. 02複数ステージのリリース設定
  3. 03Web アプリ、コンテナ、AKS ワークロードのデプロイ
  4. 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 で設定します。

  1. Environments に移動します
  2. 環境を選択します
  3. 承認チェックを追加します
  4. 承認者を設定します
ローリングデプロイ
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 パイプラインを使用する
  • 再利用可能なコンポーネントにはテンプレートを実装する
  • 共通設定には変数グループを使用する
  • 本番環境の環境承認を構成する
  • 最小限の権限でサービス接続を使用する
  • アーティファクトのバージョン管理を実装する
  • ビルドを高速化するために依存関係をキャッシュする

関連スキル

コメント