Что такое Azure Pipelines?
Azure Pipelines — это облачный сервис CI/CD, который входит в состав Azure DevOps Services от Microsoft. Он позволяет автоматически собирать, тестировать и развертывать код для любой платформы и облака.
Основные возможности Azure Pipelines
- Multi-platform — поддержка Linux, macOS, Windows
- Multi-cloud — развертывание в любые облака
- Container support — встроенная поддержка Docker и Kubernetes
- YAML pipelines — pipeline as code подход
- Parallel jobs — параллельное выполнение задач
- Extensions — тысячи готовых задач в Marketplace
- Integration — интеграция с Azure и сторонними сервисами
Создание YAML Pipeline
1# azure-pipelines.yml
2trigger:
3- main
4- develop
5
6pool:
7 vmImage: 'ubuntu-latest'
8
9variables:
10 buildConfiguration: 'Release'
11 dockerRegistryServiceConnection: 'dockerHub'
12 imageRepository: 'myapp'
13 containerRegistry: 'myregistry.azurecr.io'
14 dockerfilePath: '$(Build.SourcesDirectory)/Dockerfile'
15 tag: '$(Build.BuildId)'
16
17stages:
18- stage: Build
19 displayName: Build stage
20 jobs:
21 - job: Build
22 displayName: Build
23 steps:
24 - task: UsePythonVersion@0
25 inputs:
26 versionSpec: '3.9'
27 displayName: 'Use Python 3.9'
28
29 - script: |
30 python -m pip install --upgrade pip
31 pip install -r requirements.txt
32 # poetry install (если используется Poetry)
33 displayName: 'Install dependencies'
34
35 - script: |
36 pytest tests/ --junitxml=test-results.xml --cov=app --cov-report=xml
37 displayName: 'Run tests'
38
39 - task: PublishTestResults@2
40 condition: succeededOrFailed()
41 inputs:
42 testResultsFiles: '**/test-*.xml'
43 testRunTitle: 'Publish test results for Python'
44
45 - task: PublishCodeCoverageResults@1
46 inputs:
47 codeCoverageTool: Cobertura
48 summaryFileLocation: 'coverage.xml'
49
50 - task: Docker@2
51 displayName: Build and push image
52 inputs:
53 command: buildAndPush
54 repository: $(imageRepository)
55 dockerfile: $(dockerfilePath)
56 containerRegistry: $(dockerRegistryServiceConnection)
57 tags: |
58 $(tag)
59 latest
60
61- stage: Deploy
62 displayName: Deploy stage
63 dependsOn: Build
64 condition: succeeded()
65 jobs:
66 - deployment: Deploy
67 displayName: Deploy
68 environment: 'production'
69 strategy:
70 runOnce:
71 deploy:
72 steps:
73 - task: AzureWebAppContainer@1
74 displayName: 'Azure Web App on Container Deploy'
75 inputs:
76 azureSubscription: 'azure-service-connection'
77 appName: 'my-web-app'
78 containers: $(containerRegistry)/$(imageRepository):$(tag)
Self-hosted агенты
1# Установка self-hosted агента
2mkdir myagent && cd myagent
3wget https://vstsagentpackage.azureedge.net/agent/2.214.1/vsts-agent-linux-x64-2.214.1.tar.gz
4tar zxvf vsts-agent-linux-x64-2.214.1.tar.gz
5
6# Конфигурация
7./config.sh
8
9# Запуск как сервис
10sudo ./svc.sh install
11sudo ./svc.sh start
12
13# Запуск в Docker
14docker run -d \
15 -e AZP_URL=https://dev.azure.com/yourorg \
16 -e AZP_TOKEN=your-pat-token \
17 -e AZP_AGENT_NAME=docker-agent \
18 -e AZP_POOL=default \
19 mcr.microsoft.com/azure-pipelines/vsts-agent:ubuntu-20.04
Интеграция с Kubernetes
1# Развертывание в Kubernetes
2- task: KubernetesManifest@0
3 displayName: Deploy to Kubernetes cluster
4 inputs:
5 action: deploy
6 kubernetesServiceConnection: 'k8s-connection'
7 namespace: 'production'
8 manifests: |
9 $(Pipeline.Workspace)/manifests/deployment.yml
10 $(Pipeline.Workspace)/manifests/service.yml
11 containers: '$(containerRegistry)/$(imageRepository):$(tag)'
12
13# Использование Helm
14- task: HelmDeploy@0
15 displayName: Helm upgrade
16 inputs:
17 connectionType: 'Kubernetes Service Connection'
18 kubernetesServiceConnection: 'k8s-connection'
19 namespace: 'production'
20 command: 'upgrade'
21 chartType: 'FilePath'
22 chartPath: './helm-chart'
23 releaseName: 'myapp'
24 arguments: '--set image.tag=$(tag)'
Когда использовать Azure Pipelines
- Работаешь в экосистеме Microsoft Azure
- Нужна интеграция с Azure DevOps Services
- Требуется поддержка множественных платформ
- Важна интеграция с Visual Studio и .NET
- Нужны enterprise возможности и поддержка
- Команда использует Microsoft технологии
Преимущества Azure Pipelines
- Интеграция с Azure — глубокая интеграция с облачными сервисами
- Multi-platform — поддержка всех основных ОС
- Бесплатные минуты — для open source проектов
- Enterprise готовность — корпоративные функции безопасности
- Marketplace — богатая экосистема расширений
- Visual designer — графический редактор пайплайнов
Альтернативы Azure Pipelines
- GitHub Actions — для проектов на GitHub
- GitLab CI/CD — интегрированное решение
- Jenkins — для on-premise развертываний
- CircleCI — cloud-native платформа
- TeamCity — от JetBrains
Рекомендации по внедрению
- Начни с YAML pipelines для версионирования
- Используй variable groups для управления конфигурацией
- Настрой environments для контроля развертываний
- Используй service connections для безопасного доступа
- Мониторь производительность и оптимизируй параллелизм
- Настрой proper branching policies
FAQ
Подходит ли Azure Pipelines для продакшена?
Да, Azure Pipelines широко используется в production средах и зарекомендовал себя как надежное решение. Используется крупными компаниями по всему миру.
Какие требования к инфраструктуре?
Для Microsoft-hosted агентов требований нет. Для self-hosted агентов зависит от нагрузки, но минимально достаточно 2GB RAM и 10GB дискового пространства.
Сколько стоит Azure Pipelines?
Для open source проектов — бесплатно. Для private: включены минуты в зависимости от плана, дополнительные параллельные jobs стоят $40/месяц.