// Jenkins Pipeline для AnsibleLab // Автор: Сергей Антропов // Сайт: https://devops.org.ru pipeline { agent any environment { ANSIBLE_FORCE_COLOR = 'true' DOCKER_TLS_CERTDIR = '' } stages { stage('Checkout') { steps { checkout scm } } // Стадия 1: Lint проверка stage('🔍 Lint Check') { steps { sh ''' echo "🔍 Проверка синтаксиса ролей..." pip install --upgrade pip pip install ansible ansible-lint ansible-galaxy collection install -r requirements.yml make role lint ''' } post { always { archiveArtifacts artifacts: '.ansible-lint', allowEmptyArchive: true } } } // Стадия 2: Тестирование stage('🧪 Role Testing') { parallel { stage('Test Minimal') { steps { sh ''' echo "🧪 Тестирование с preset: minimal" sudo apt-get update sudo apt-get install -y docker.io make sudo systemctl start docker sudo usermod -aG docker $USER make docker setup-builder make docker build make role test minimal ''' } } stage('Test Default') { steps { sh ''' echo "🧪 Тестирование с preset: default" sudo apt-get update sudo apt-get install -y docker.io make sudo systemctl start docker sudo usermod -aG docker $USER make docker setup-builder make docker build make role test default ''' } } stage('Test Performance') { steps { sh ''' echo "🧪 Тестирование с preset: performance" sudo apt-get update sudo apt-get install -y docker.io make sudo systemctl start docker sudo usermod -aG docker $USER make docker setup-builder make docker build make role test performance ''' } } } } // Стадия 3: Деплой (только для main ветки) stage('🚀 Deploy Check') { when { branch 'main' } steps { sh ''' echo "🚀 Проверка развертывания (dry-run)..." pip install --upgrade pip pip install ansible ansible-lint ansible-galaxy collection install -r requirements.yml mkdir -p inventory cat > inventory/hosts.ini << EOF [test_servers] localhost ansible_connection=local [all:vars] ansible_python_interpreter=python3 EOF make role deploy ''' } post { always { archiveArtifacts artifacts: 'deployment.log', allowEmptyArchive: true } } } } post { always { archiveArtifacts artifacts: 'molecule/default/.molecule/**/*', allowEmptyArchive: true publishTestResults testResultsPattern: 'molecule/default/.molecule/reports/junit.xml' } success { echo '✅ Все проверки пройдены успешно!' echo '🔍 Lint: Success' echo '🧪 Test: Success' echo '🚀 Deploy: Success' } failure { echo '❌ Проверки не пройдены!' echo '🔍 Lint: Failed' echo '🧪 Test: Failed' echo '🚀 Deploy: Failed' } } }