一个简单的小栗子,利用GitLab+Ansible+Jenkins实现CI/CD
其中,代码部署,各组件服务的安装、启动、配置、重启,服务健康检查都可以交给Ansible做
一个pipeline栗子
#!groovy pipeline { agent {node {label 'master'}} #确定在master主机上执行 environment { PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin" #确定环境变量 } parameters { #设置参数 choice( choices: 'dev\nrprod', description: 'Choose deploy environment', name: 'deploy_env' ) string (name: 'branch', defaultValue: 'master', description: 'Fill in your ansible repo branch') } stages { stage ("Pull deploy code") { 从GitLab wordpress-ansible项目克隆ansbile-playbook文件 steps{ sh 'git config --global http.sslVerify false' dir ("${env.WORKSPACE}"){ git branch: 'master', credentialsId: '6cde576d-8b02-405a-bd8d-d2ef23c49c1a', url: 'https://gitlab.test.com/root/ansible-repo.git' } } } stage ("Check env") { #利用ssh命令查看目标主机的状态,确认是否要执行部署 steps { sh """ set +x user=`whoami` if [ $user == deploy ] then echo "[INFO] Current deployment user is $user" source /home/deploy/.py3-a2.5-env/bin/activate source /home/deploy/.py3-a2.5-env/ansible/hacking/env-setup -q echo "[INFO] Current python version" python --version echo "[INFO] Current ansible version" ansible-playbook --version echo "[INFO] Remote system disk space" ssh root@test.example.com df -h echo "[INFO] Rmote system RAM" ssh root@test.example.com free -m else echo "Deployment user is incorrect, please check" fi set -x """ } } stage ("Anisble deployment") { #运行clone下来的ansible-playbook文件 steps { input "Do you approve the deployment?" dir("${env.WORKSPACE}/playbooks"){ echo "[INFO] Start deployment" sh """ set +x source /home/deploy/.py3-a2.5-env/bin/activate #加载python3.6环境变量 source /home/deploy/.py3-a2.5-env/ansible/hacking/env-setup -q #加载ansible环境变量 ansible-playbook -i inventory/$deploy_env ./deploy.yaml -e branch=$branch -e env=$deploy_env set -x """ echo "[INFO] Deployment finished..." } } } } }