День 19-22: Интеграция всех компонентов для полного DevOps цикла

День 19: Интеграция CI/CD с мониторингом и логированием

Настройка триггеров и оповещений

  1. Добавление оповещений в Jenkins Pipeline:

    post {
        success {
            slackSend (channel: '#devops', color: 'good', message: "Build #${env.BUILD_NUMBER} succeeded")
        }
        failure {
            slackSend (channel: '#devops', color: 'danger', message: "Build #${env.BUILD_NUMBER} failed")
        }
    }
    
    
  2. Настройка оповещений в Grafana:

Интеграция мониторинга и логирования с CI/CD

  1. Обновление Jenkinsfile для мониторинга:

    pipeline {
        agent any
        stages {
            stage('Build') {
                steps {
                    sh 'docker build -t my-app .'
                    sh 'docker push my-app'
                }
            }
            stage('Test') {
                steps {
                    sh 'docker run my-app npm test'
                }
            }
            stage('Pre-deploy Check') {
                steps {
                    script {
                        def response = sh(script: 'curl -s <http://prometheus-server/api/v1/query?query=up>', returnStdout: true)
                        def result = new groovy.json.JsonSlurper().parseText(response)
                        if (result.status != 'success') {
                            error "Prometheus query failed"
                        }
                    }
                }
            }
            stage('Deploy') {
                steps {
                    sh 'kubectl apply -f deployment.yaml'
                }
            }
        }
    }
    
    
  2. Отправка логов из Jenkins в Elasticsearch:

    pipeline {
        agent any
        stages {
            stage('Build') {
                steps {
                    script {
                        try {
                            sh 'docker build -t my-app .'
                            logstashSend failBuild: true, maxLines: 1000
                        } catch (e) {
                            logstashSend failBuild: true, maxLines: 1000
                            throw e
                        }
                    }
                }
            }
        }
    }
    
    

День 20: Автоматизация инфраструктуры с использованием Terraform и Ansible

Создание инфраструктуры с Terraform

  1. Создание инфраструктуры для CI/CD:

    provider "aws" {
        region = "us-west-2"
    }
    
    resource "aws_instance" "jenkins_server" {
        ami           = "ami-0c55b159cbfafe1f0"
        instance_type = "t2.micro"
    
        tags = {
            Name = "Jenkins Server"
        }
    
        user_data = <<-EOF
          #!/bin/bash
          sudo apt update
          sudo apt install -y openjdk-11-jdk
          wget -q -O - <https://pkg.jenkins.io/debian/jenkins.io.key> | sudo apt-key add -
          sudo sh -c 'echo deb <http://pkg.jenkins.io/debian-stable> binary/ > /etc/apt/sources.list.d/jenkins.list'
          sudo apt update
          sudo apt install -y jenkins
          sudo systemctl start jenkins
          sudo systemctl enable jenkins
        EOF
    }
    
    
  2. Запуск Terraform:

Настройка серверов с Ansible

  1. Создание Ansible Playbook для Jenkins:

    ---
    - name: Setup Jenkins server
      hosts: jenkins
      become: yes
      tasks:
        - name: Install required packages
          apt:
            name: ['openjdk-11-jdk', 'jenkins']
            state: present
            update_cache: yes
    
        - name: Start and enable Jenkins
          service:
            name: jenkins
            state: started
            enabled: true
    
        - name: Install plugins
          jenkins_plugin:
            name: "{{ item }}"
            state: present
          with_items:
            - git
            - workflow-aggregator
            - blueocean
            - kubernetes
            - slack
    
    
  2. Запуск Playbook:

День 21: Интеграция инфраструктуры с CI/CD

Автоматизация деплоя инфраструктуры

  1. Обновление Jenkinsfile для деплоя инфраструктуры:

    pipeline {
        agent any
        stages {
            stage('Build') {
                steps {
                    sh 'docker build -t my-app .'
                    sh 'docker push my-app'
                }
            }
            stage('Test') {
                steps {
                    sh 'docker run my-app npm test'
                }
            }
            stage('Deploy Infrastructure') {
                steps {
                    script {
                        dir('terraform') {
                            sh 'terraform init'
                            sh 'terraform apply -auto-approve'
                        }
                    }
                }
            }
            stage('Configure Servers') {
                steps {
                    script {
                        ansiblePlaybook(
                            playbook: 'setup_jenkins.yml',
                            inventory: 'inventory'
                        )
                    }
                }
            }
            stage('Deploy Application') {
                steps {
                    sh 'kubectl apply -f deployment.yaml'
                }
            }
        }
    }
    
    
  2. Запуск пайплайна:

День 22: Финальная настройка и оптимизация