DevOps 流水线
流水线结构
trigger:
branches:
include: [main, release/*]
paths:
exclude: [docs/**, '*.md']
variables:
- group: my-variable-group
- name: buildConfiguration
value: Release
pool:
vmImage: ubuntu-latest
stages:
- stage: Build
jobs:
- job: BuildAndTest
steps: [...]
- stage: Deploy
dependsOn: Build
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
jobs: [...]
构建作业示例
jobs:
- job: Build
pool:
vmImage: ubuntu-latest
steps:
- task: NodeTool@0
inputs:
versionSpec: '20.x'
- script: |
npm ci
npm run build
npm test
displayName: 'Install, build, test'
- task: Docker@2
inputs:
containerRegistry: myACRServiceConnection
repository: myapp
command: buildAndPush
tags: |
$(Build.BuildId)
latest
变量与变量组
variables:
- name: APP_NAME
value: myapp
- group: prod-secrets # 包含 DB_PASSWORD 等敏感变量
# 内置变量:
# $(Build.BuildId) - 唯一构建 ID
# $(Build.SourceBranch) - refs/heads/main
# $(System.TeamProject) - 项目名称
部署作业与环境
stages:
- stage: DeployProd
jobs:
- deployment: DeployToAKS
environment: 'production.default'
strategy:
runOnce:
deploy:
steps:
- task: KubernetesManifest@0
inputs:
action: deploy
kubernetesServiceConnection: aks-prod
manifests: k8s/*.yaml
可复用模板
# templates/build-steps.yml
parameters:
- name: nodeVersion
type: string
default: '20.x'
steps:
- task: NodeTool@0
inputs:
versionSpec: ${{ parameters.nodeVersion }}
- script: npm ci && npm run build
# 在主流水线中引用
stages:
- stage: Build
jobs:
- job: Build
steps:
- template: templates/build-steps.yml