Claude Code Plugins

Community-maintained marketplace

Feedback

azure-pipelines-generator

@ntaksh42/agents
0
0

Generate Azure Pipelines YAML for CI/CD with multi-stage builds and deployments. Use when creating Azure DevOps pipelines or automating builds.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name azure-pipelines-generator
description Generate Azure Pipelines YAML for CI/CD with multi-stage builds and deployments. Use when creating Azure DevOps pipelines or automating builds.

Azure Pipelines Generator Skill

Azure PipelinesのYAML定義を生成するスキルです。

概要

CI/CDパイプラインをAzure Pipelines YAML形式で自動生成します。

主な機能

  • ビルドパイプライン: CI設定
  • リリースパイプライン: CD設定
  • マルチステージ: ステージ分割
  • テンプレート: 再利用可能な設定
  • 条件付き実行: ブランチ、タグ条件
  • 環境デプロイ: Dev、Staging、Production

基本パイプライン

Node.js アプリケーション

# azure-pipelines.yml
trigger:
  branches:
    include:
      - main
      - develop
  paths:
    exclude:
      - docs/*
      - README.md

pool:
  vmImage: 'ubuntu-latest'

variables:
  nodeVersion: '18.x'
  buildConfiguration: 'Release'

stages:
  - stage: Build
    displayName: 'Build and Test'
    jobs:
      - job: BuildJob
        displayName: 'Build Application'
        steps:
          - task: NodeTool@0
            displayName: 'Install Node.js'
            inputs:
              versionSpec: $(nodeVersion)

          - task: Npm@1
            displayName: 'npm install'
            inputs:
              command: 'install'

          - task: Npm@1
            displayName: 'npm run build'
            inputs:
              command: 'custom'
              customCommand: 'run build'

          - task: Npm@1
            displayName: 'npm test'
            inputs:
              command: 'custom'
              customCommand: 'test'

          - task: PublishTestResults@2
            displayName: 'Publish Test Results'
            condition: succeededOrFailed()
            inputs:
              testResultsFormat: 'JUnit'
              testResultsFiles: '**/test-results.xml'

          - task: PublishCodeCoverageResults@1
            displayName: 'Publish Code Coverage'
            inputs:
              codeCoverageTool: 'Cobertura'
              summaryFileLocation: '$(System.DefaultWorkingDirectory)/coverage/cobertura-coverage.xml'

          - task: PublishBuildArtifacts@1
            displayName: 'Publish Artifact: dist'
            inputs:
              PathtoPublish: '$(Build.SourcesDirectory)/dist'
              ArtifactName: 'dist'

  - stage: Deploy_Dev
    displayName: 'Deploy to Development'
    dependsOn: Build
    condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/develop'))
    jobs:
      - deployment: DeployDev
        displayName: 'Deploy to Dev'
        environment: 'Development'
        strategy:
          runOnce:
            deploy:
              steps:
                - task: DownloadBuildArtifacts@0
                  inputs:
                    artifactName: 'dist'

                - task: AzureWebApp@1
                  displayName: 'Deploy to Azure Web App'
                  inputs:
                    azureSubscription: 'Azure-Connection'
                    appType: 'webAppLinux'
                    appName: 'myapp-dev'
                    package: '$(System.ArtifactsDirectory)/dist'

  - stage: Deploy_Prod
    displayName: 'Deploy to Production'
    dependsOn: Build
    condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
    jobs:
      - deployment: DeployProd
        displayName: 'Deploy to Production'
        environment: 'Production'
        strategy:
          runOnce:
            deploy:
              steps:
                - task: DownloadBuildArtifacts@0
                  inputs:
                    artifactName: 'dist'

                - task: AzureWebApp@1
                  displayName: 'Deploy to Azure Web App'
                  inputs:
                    azureSubscription: 'Azure-Connection'
                    appType: 'webAppLinux'
                    appName: 'myapp-prod'
                    package: '$(System.ArtifactsDirectory)/dist'

.NET アプリケーション

trigger:
  - main

pool:
  vmImage: 'windows-latest'

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'

stages:
  - stage: Build
    jobs:
      - job: Build
        steps:
          - task: NuGetToolInstaller@1

          - task: NuGetCommand@2
            inputs:
              restoreSolution: '$(solution)'

          - task: VSBuild@1
            inputs:
              solution: '$(solution)'
              msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)"'
              platform: '$(buildPlatform)'
              configuration: '$(buildConfiguration)'

          - task: VSTest@2
            inputs:
              platform: '$(buildPlatform)'
              configuration: '$(buildConfiguration)'

          - task: PublishBuildArtifacts@1
            inputs:
              PathtoPublish: '$(Build.ArtifactStagingDirectory)'
              ArtifactName: 'drop'

Docker ビルド & プッシュ

trigger:
  - main

pool:
  vmImage: 'ubuntu-latest'

variables:
  dockerRegistryServiceConnection: 'MyDockerRegistry'
  imageRepository: 'myapp'
  containerRegistry: 'myregistry.azurecr.io'
  dockerfilePath: '$(Build.SourcesDirectory)/Dockerfile'
  tag: '$(Build.BuildId)'

stages:
  - stage: Build
    jobs:
      - job: BuildAndPush
        steps:
          - task: Docker@2
            displayName: 'Build Docker Image'
            inputs:
              command: build
              repository: $(imageRepository)
              dockerfile: $(dockerfilePath)
              containerRegistry: $(dockerRegistryServiceConnection)
              tags: |
                $(tag)
                latest

          - task: Docker@2
            displayName: 'Push Docker Image'
            inputs:
              command: push
              repository: $(imageRepository)
              containerRegistry: $(dockerRegistryServiceConnection)
              tags: |
                $(tag)
                latest

  - stage: Deploy
    dependsOn: Build
    jobs:
      - deployment: DeployToAKS
        environment: 'kubernetes-prod'
        strategy:
          runOnce:
            deploy:
              steps:
                - task: KubernetesManifest@0
                  displayName: 'Deploy to AKS'
                  inputs:
                    action: 'deploy'
                    kubernetesServiceConnection: 'AKS-Connection'
                    namespace: 'production'
                    manifests: |
                      $(Pipeline.Workspace)/manifests/deployment.yml
                      $(Pipeline.Workspace)/manifests/service.yml
                    containers: '$(containerRegistry)/$(imageRepository):$(tag)'

テンプレート使用

メインパイプライン

# azure-pipelines.yml
trigger:
  - main

resources:
  repositories:
    - repository: templates
      type: git
      name: PipelineTemplates
      ref: refs/heads/main

stages:
  - template: templates/build-template.yml@templates
    parameters:
      nodeVersion: '18.x'

  - template: templates/deploy-template.yml@templates
    parameters:
      environment: 'Production'
      appName: 'myapp-prod'

ビルドテンプレート

# templates/build-template.yml
parameters:
  - name: nodeVersion
    type: string
    default: '18.x'

jobs:
  - job: Build
    pool:
      vmImage: 'ubuntu-latest'
    steps:
      - task: NodeTool@0
        inputs:
          versionSpec: ${{ parameters.nodeVersion }}

      - script: |
          npm install
          npm run build
          npm test
        displayName: 'Build and Test'

PR トリガー

# PR validation
pr:
  branches:
    include:
      - main
      - develop
  paths:
    exclude:
      - docs/*

trigger: none

pool:
  vmImage: 'ubuntu-latest'

steps:
  - task: Npm@1
    displayName: 'npm install'
    inputs:
      command: 'install'

  - task: Npm@1
    displayName: 'Run linter'
    inputs:
      command: 'custom'
      customCommand: 'run lint'

  - task: Npm@1
    displayName: 'Run tests'
    inputs:
      command: 'custom'
      customCommand: 'test'

バージョン情報

  • スキルバージョン: 1.0.0
  • 最終更新: 2025-01-22