jenkins项目回滚

 

 

 abc是backup_versioni文件里面的key,文件内容格式:abc=x1,x2,x3,其中x1-x3是备份文件名

 

 

 parameters {

extendedChoice description: '请选择要回滚的版本号', multiSelectDelimiter: ',', name: 'rollback', propertyFile: '/var/jenkins_home/backup_version', propertyKey: 'abc', quoteValue: false, saveJSONParameterToFile: false, type: 'PT_SINGLE_SELECT', visibleItemCount: 5
}

 

下面是备份文件的格式,不加时间是为了怕两台web时间不一致: 

 

 demo-ROOT-$(date +%F)-{{ build_number }}.war

把备份文件写进去备份版本记录文件:

ls /data/backup/|awk 'BEGIN{printf "abc="}{printf $0","}' > /tmp/backup_version

 

 需要在之前发布的java项目里面的代码加上:1、登录jenkins114的凭据,虽然也可以用密钥,但由于多台web访问jenkins,所以改为用密码,凭据是生成114服务器的密码的;2、114的ip和用户和密码的变量,这个变量数值来自于第一步的凭据;3、加上生成版本文件记录的文件拷贝并通过sshpass拷贝到114去:

pipeline {
agent {
label "web2"
}
environment {
ansible_ssh_auth = "393ee6f0-68cd-4b5b-b6c2-4656ca1286e8"
}
parameters {
extendedChoice description: '请选择要回滚的版本号', multiSelectDelimiter: ',', name: 'RollbackVersion', propertyFile: '/var/jenkins_home/backup_version', propertyKey: 'abc', quoteValue: false, saveJSONParameterToFile: false, type: 'PT_SINGLE_SELECT', visibleItemCount: 5
choice choices: ['webservers1', 'webservers2', 'webservers3'], description: '请选择主机组', name: 'ENV'
}
stages {
stage('拷贝备份文件到远程主机并部署') {
steps {
sh """
###################### 主机清单############################
cat > /opt/jenkins_home/.hosts << EOF
[webservers1]
192.168.3.117
192.168.3.118
[webservers2]
192.168.3.117
[webservers3]
192.168.3.118
EOF
###################### Playbook ############################
cat > /opt/jenkins_home/.playbook.yaml << "EOF"
- hosts: $ENV
gather_facts: no
vars:
tomcat_dir: "/usr/local/tomcat"
backup_dir: "/data/backup"
backup_filename: $RollbackVersion
tasks:
- name: 恢复备份程序并重启tomcat
shell: |
cd {{ tomcat_dir }}/webapps
rm -rf ROOT.*
mv {{ backup_dir }}/{{ backup_filename }} ROOT.war
pid=\$(ps -ef |grep {{ tomcat_dir }} |egrep -v 'grep' |awk '{print \$2}')
[ -n "\$pid" ] && kill -9 \$pid
nohup {{ tomcat_dir }}/bin/startup.sh
EOF
"""
ansiblePlaybook(
playbook: '/opt/jenkins_home/.playbook.yaml',
inventory: '/opt/jenkins_home/.hosts',
credentialsId: "${ansible_ssh_auth}"
)
}
}
}
}

posted @ 2021-05-29 11:20  jamespeng2020  阅读(465)  评论(0)    收藏  举报