jenkins pipeline+ansible发布java项目

 生成gitlab的地址变量:

 

 

 

 

===============

pipeline {
agent {
label "web2"
}
environment {
gitlab_address = "http://192.168.3.115/microservice/demo.git"
gitlab_auth = "25e6d942-4753-48a1-b16e-e7b5b124c5a6"
ansible_ssh_auth = "393ee6f0-68cd-4b5b-b6c2-4656ca1286e8"
}
parameters {
gitParameter branch: '', branchFilter: '.*', defaultValue: 'master', description: '请选择分支', name: 'selectBranch', quickFilterEnabled: false, selectedValue: 'NONE', sortMode: 'NONE', tagFilter: '*', type: 'PT_BRANCH'
choice choices: ['webservers1', 'webservers2', 'webservers3'], description: '请选择主机组', name: 'ENV'
}
triggers {
pollSCM('*/1 * * * *')
}
stages {
stage('拉取代码') {
steps {
checkout([$class: 'GitSCM', branches: [[name: "${params.selectBranch}"]], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: "${gitlab_auth}", url: "${gitlab_address}"]]])
}
}
stage('编译构建') {
steps {
sh "/usr/share/maven/bin/mvn clean package -Dmaven.test.skip=true"
}
}
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 # Jenkins参数化变量

gather_facts: no
vars:

workspace: "$WORKSPACE"

build_number: "$BUILD_NUMBER"
tomcat_dir: "/usr/local/tomcat"
backup_dir: "/data/backup"
backup_filename: "demo-ROOT-\$(date +%F)-{{ build_number }}.war"
tasks:
- name: 传到tomcat
copy: src={{ item }} dest={{ tomcat_dir }}/webapps
with_fileglob:
- "{{ workspace }}/target/*.war"
- name: 备份war包和重启tomcat

shell: |
cd {{ tomcat_dir }}/webapps
mv ROOT.war {{ backup_dir }}/{{ backup_filename }}
mv *.war 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-26 20:20  jamespeng2020  阅读(242)  评论(0)    收藏  举报