Добавление оповещений в 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")
}
}
Настройка оповещений в Grafana:
Обновление 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'
}
}
}
}
Отправка логов из 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
}
}
}
}
}
}
Создание инфраструктуры для 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
}
Запуск Terraform:
Инициализация Terraform:
terraform init
Применение конфигурации:
terraform apply
Создание 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
Запуск Playbook:
Создайте инвентарь для Ansible:
[jenkins]
jenkins_server ansible_host=<public_ip_of_jenkins_server> ansible_user=ubuntu
Запустите Playbook:
ansible-playbook -i inventory setup_jenkins.yml
Обновление 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'
}
}
}
}
Запуск пайплайна: