Some checks failed
		
		
	
	Ansible Testing / lint (push) Has been cancelled
				
			Ansible Testing / test (default) (push) Has been cancelled
				
			Ansible Testing / test (minimal) (push) Has been cancelled
				
			Ansible Testing / test (performance) (push) Has been cancelled
				
			Ansible Testing / deploy-check (push) Has been cancelled
				
			
		
			
				
	
	
		
			168 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			168 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
| # Azure DevOps Pipeline для DevOpsLab
 | ||
| # Автор: Сергей Антропов
 | ||
| # Сайт: https://devops.org.ru
 | ||
| 
 | ||
| trigger:
 | ||
| - main
 | ||
| - develop
 | ||
| 
 | ||
| pool:
 | ||
|   vmImage: 'ubuntu-latest'
 | ||
| 
 | ||
| variables:
 | ||
|   ANSIBLE_FORCE_COLOR: 'true'
 | ||
|   DOCKER_TLS_CERTDIR: ''
 | ||
| 
 | ||
| stages:
 | ||
| # Стадия 1: Lint проверка
 | ||
| - stage: Lint
 | ||
|   displayName: '🔍 Lint Check'
 | ||
|   jobs:
 | ||
|   - job: LintJob
 | ||
|     displayName: 'Run Lint'
 | ||
|     steps:
 | ||
|     - task: UsePythonVersion@0
 | ||
|       inputs:
 | ||
|         versionSpec: '3.11'
 | ||
|       displayName: 'Use Python 3.11'
 | ||
|       
 | ||
|     - script: |
 | ||
|         pip install --upgrade pip
 | ||
|         pip install ansible ansible-lint
 | ||
|         ansible-galaxy collection install -r requirements.yml
 | ||
|       displayName: 'Install Dependencies'
 | ||
|       
 | ||
|     - script: |
 | ||
|         echo "🔍 Проверка синтаксиса ролей..."
 | ||
|         make role lint
 | ||
|       displayName: 'Run Ansible Lint'
 | ||
|       
 | ||
|     - task: PublishBuildArtifacts@1
 | ||
|       inputs:
 | ||
|         pathToPublish: '.ansible-lint'
 | ||
|         artifactName: 'lint-results'
 | ||
|       condition: always()
 | ||
| 
 | ||
| # Стадия 2: Тестирование
 | ||
| - stage: Test
 | ||
|   displayName: '🧪 Role Testing'
 | ||
|   dependsOn: Lint
 | ||
|   condition: succeeded()
 | ||
|   jobs:
 | ||
|   - job: TestJob
 | ||
|     displayName: 'Run Tests'
 | ||
|     strategy:
 | ||
|       matrix:
 | ||
|         minimal:
 | ||
|           preset: minimal
 | ||
|         default:
 | ||
|           preset: default
 | ||
|         performance:
 | ||
|           preset: performance
 | ||
|     steps:
 | ||
|     - task: UsePythonVersion@0
 | ||
|       inputs:
 | ||
|         versionSpec: '3.11'
 | ||
|       displayName: 'Use Python 3.11'
 | ||
|       
 | ||
|     - script: |
 | ||
|         sudo apt-get update
 | ||
|         sudo apt-get install -y docker.io make
 | ||
|         sudo systemctl start docker
 | ||
|         sudo usermod -aG docker $USER
 | ||
|       displayName: 'Install System Dependencies'
 | ||
|       
 | ||
|     - script: |
 | ||
|         pip install --upgrade pip
 | ||
|         pip install ansible ansible-lint
 | ||
|         ansible-galaxy collection install -r requirements.yml
 | ||
|       displayName: 'Install Python Dependencies'
 | ||
|       
 | ||
|     - script: |
 | ||
|         make docker setup-builder
 | ||
|         make docker build
 | ||
|       displayName: 'Setup Docker and Build Images'
 | ||
|       
 | ||
|     - script: |
 | ||
|         echo "🧪 Тестирование с preset: $(preset)"
 | ||
|         make role test $(preset)
 | ||
|       displayName: 'Run Molecule Tests'
 | ||
|       env:
 | ||
|         PRESET: $(preset)
 | ||
|       
 | ||
|     - task: PublishTestResults@2
 | ||
|       inputs:
 | ||
|         testResultsFiles: 'molecule/default/.molecule/reports/junit.xml'
 | ||
|         testRunTitle: 'Molecule Test Results - $(preset)'
 | ||
|       condition: always()
 | ||
|       
 | ||
|     - task: PublishBuildArtifacts@1
 | ||
|       inputs:
 | ||
|         pathToPublish: 'molecule/default/.molecule'
 | ||
|         artifactName: 'test-results-$(preset)'
 | ||
|       condition: always()
 | ||
| 
 | ||
| # Стадия 3: Деплой (только для main ветки)
 | ||
| - stage: Deploy
 | ||
|   displayName: '🚀 Deploy Check'
 | ||
|   dependsOn: [Lint, Test]
 | ||
|   condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
 | ||
|   jobs:
 | ||
|   - job: DeployJob
 | ||
|     displayName: 'Check Deployment'
 | ||
|     steps:
 | ||
|     - task: UsePythonVersion@0
 | ||
|       inputs:
 | ||
|         versionSpec: '3.11'
 | ||
|       displayName: 'Use Python 3.11'
 | ||
|       
 | ||
|     - script: |
 | ||
|         pip install --upgrade pip
 | ||
|         pip install ansible ansible-lint
 | ||
|         ansible-galaxy collection install -r requirements.yml
 | ||
|       displayName: 'Install Dependencies'
 | ||
|       
 | ||
|     - script: |
 | ||
|         mkdir -p inventory
 | ||
|         cat > inventory/hosts.ini << EOF
 | ||
|         [test_servers]
 | ||
|         localhost ansible_connection=local
 | ||
|         
 | ||
|         [all:vars]
 | ||
|         ansible_python_interpreter=python3
 | ||
|         EOF
 | ||
|       displayName: 'Create Inventory File'
 | ||
|       
 | ||
|     - script: |
 | ||
|         echo "🚀 Проверка развертывания (dry-run)..."
 | ||
|         make role deploy
 | ||
|       displayName: 'Run Deployment Check'
 | ||
|       
 | ||
|     - task: PublishBuildArtifacts@1
 | ||
|       inputs:
 | ||
|         pathToPublish: 'deployment.log'
 | ||
|         artifactName: 'deployment-results'
 | ||
|       condition: always()
 | ||
| 
 | ||
| # Уведомления
 | ||
| - stage: Notify
 | ||
|   displayName: '📢 Notifications'
 | ||
|   dependsOn: [Lint, Test, Deploy]
 | ||
|   condition: always()
 | ||
|   jobs:
 | ||
|   - job: NotifyJob
 | ||
|     displayName: 'Send Notifications'
 | ||
|     steps:
 | ||
|     - script: |
 | ||
|         echo "🔍 Lint: $(Lint.result)"
 | ||
|         echo "🧪 Test: $(Test.result)"
 | ||
|         echo "🚀 Deploy: $(Deploy.result)"
 | ||
|         
 | ||
|         if [ "$(Lint.result)" = "Succeeded" ] && [ "$(Test.result)" = "Succeeded" ]; then
 | ||
|           echo "✅ Все проверки пройдены успешно!"
 | ||
|         else
 | ||
|           echo "❌ Проверки не пройдены!"
 | ||
|           exit 1
 | ||
|         fi
 | ||
|       displayName: 'Check Results and Notify'
 |