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'
-
- job: BuildJob
displayName: 'Build Application'
steps:
-
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'
-
- job: Build
steps:
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
-
- job: BuildAndPush
steps:
-
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