| 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