Что такое 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/месяц.