流水线发布java项目
框架
![](https://img.haomeiwen.com/i19175849/99b072ac97606af8.png)
1634996746927.png
001 设置参数
![](https://img.haomeiwen.com/i19175849/f0b1676fd114fe9b.png)
1634975364916.png
![](https://img.haomeiwen.com/i19175849/43c946b0e41b3816.png)
1634975409390.png
parameters {
gitParameter branch: '', branchFilter: '.*', defaultValue: 'master', description: '请选择要发布的代码分支', name: 'Branch', quickFilterEnabled: false, selectedValue: 'NONE', sortMode: 'NONE', tagFilter: '*', type: 'PT_BRANCH'
}
002 拉取代码
![](https://img.haomeiwen.com/i19175849/ad6334c563ed0f8e.png)
1634975949131.png
![](https://img.haomeiwen.com/i19175849/50d905cd0331ad6b.png)
1634975997478.png
checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '711e362f-2255-4c8c-bb4a-a81353e2ee29', url: 'http://192.168.153.18/test/demo.git']]])
0001 设置环境变量
environment {
gitlab_address = "http://192.168.153.18/test/demo.git"
gitlab_auth = "711e362f-2255-4c8c-bb4a-a81353e2ee29"
}
0002 调整参数
checkout([$class: 'GitSCM', branches: [[name: "${params.Branch}"]], extensions: [], userRemoteConfigs: [[credentialsId: "$gitlab_auth", url: "$gitlab_address"]]])
003 编译构建
sh 'mvn clean package -Dmaven.test.skip=true'
004 发布部署
SSH Server可以在config中配置
![](https://img.haomeiwen.com/i19175849/6a14c7e0fa397727.png)
1634977338236.png
![](https://img.haomeiwen.com/i19175849/730ee76fbda0621d.png)
1634976928639.png
![](https://img.haomeiwen.com/i19175849/f8cfe2caeeb4cad6.png)
1634976988674.png
sshPublisher(publishers: [sshPublisherDesc(configName: 'ssh1', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''# 备份已部署的程序
tomcat=/usr/local/tomcat
cd $tomcat/webapps
mv ROOT.war /data/backup/$(date +"%F_%T")_ROOT.war
# 部署新程序并重启Tomcat
mv ly-simple-tomcat-0.0.1-SNAPSHOT.war ROOT.war
pid=$(ps -ef |grep tomcat |egrep -v \'grep\' |awk \'{print $2}\')
[ -n "$pid" ] && kill -9 $pid
JAVA_HOME=/usr/local/jdk
export JAVA_HOME
/bin/bash /usr/local/tomcat/bin/startup.sh''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: 'usr/local/tomcat/webapps', remoteDirectorySDF: false, removePrefix: 'target', sourceFiles: 'target/*.war')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
005 完整脚本
pipeline {
agent {
label 'web1'
}
parameters {
gitParameter branch: '', branchFilter: '.*', defaultValue: 'master', description: '请选择要发布的代码分支', name: 'Branch', quickFilterEnabled: false, selectedValue: 'NONE', sortMode: 'NONE', tagFilter: '*', type: 'PT_BRANCH'
}
environment {
gitlab_address = "http://192.168.153.18/test/demo.git"
gitlab_auth = "711e362f-2255-4c8c-bb4a-a81353e2ee29"
}
stages {
stage('拉取代码') {
steps {
checkout([$class: 'GitSCM', branches: [[name: "${params.Branch}"]], extensions: [], userRemoteConfigs: [[credentialsId: "$gitlab_auth", url: "$gitlab_address"]]])
}
}
stage('编译构建') {
steps {
sh 'mvn clean package -Dmaven.test.skip=true'
}
}
stage('测试') {
steps {
echo 'test....'
}
}
stage('部署') {
steps {
sshPublisher(publishers: [sshPublisherDesc(configName: 'ssh1', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''# 备份已部署的程序
tomcat=/usr/local/tomcat
cd $tomcat/webapps
mv ROOT.war /data/backup/$(date +"%F_%T")_ROOT.war
# 部署新程序并重启Tomcat
mv ly-simple-tomcat-0.0.1-SNAPSHOT.war ROOT.war
pid=$(ps -ef |grep tomcat |egrep -v \'grep\' |awk \'{print $2}\')
[ -n "$pid" ] && kill -9 $pid
JAVA_HOME=/usr/local/jdk
export JAVA_HOME
/bin/bash /usr/local/tomcat/bin/startup.sh''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: 'usr/local/tomcat/webapps', remoteDirectorySDF: false, removePrefix: 'target', sourceFiles: 'target/*.war')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
}
}
}
}
集成Ansible,发布多台服务器
框架
![](https://img.haomeiwen.com/i19175849/dee6de7a2117bdf8.png)
1634996807694.png
001 参数设置
![](https://img.haomeiwen.com/i19175849/679c2ec7d1f23c3a.png)
1634988161807.png
![](https://img.haomeiwen.com/i19175849/80c24084c4963f4a.png)
1634988190355.png
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: 'Servers'
}
002 查询凭据
![](https://img.haomeiwen.com/i19175849/d4c1744cdd0b3522.png)
1634995815055.png
003 完整脚本
pipeline {
agent {
label 'web1'
}
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: 'Servers'
}
environment {
gitlab_address = "http://192.168.153.18/test/demo.git"
gitlab_auth = "711e362f-2255-4c8c-bb4a-a81353e2ee29"
gitlab_ssh_auth = "6665ff79-b7c8-4bbc-aff3-85c52eb465fa"
}
stages {
stage('拉取代码') {
steps {
checkout([$class: 'GitSCM', branches: [[name: "${params.selectBranch}"]], extensions: [], userRemoteConfigs: [[credentialsId: "$gitlab_auth", url: "$gitlab_address"]]])
}
}
stage('编译构建') {
steps {
sh 'mvn clean package -Dmaven.test.skip=true'
}
}
stage('部署') {
steps {
withCredentials([usernamePassword(credentialsId: '711e362f-2255-4c8c-bb4a-a81353e2ee29', passwordVariable: 'password', usernameVariable: 'username')]) {
sh """
cat > /opt/jenkins_home/.hosts << EOF
[webservers1]
192.168.153.17
192.168.153.18
[webservers2]
192.168.153.17
192.168.153.18
[webservers3]
192.168.153.17
192.168.153.18
EOF
cat > /opt/jenkins_home/.playbook.yaml << "EOF"
- hosts: $Servers
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: 推送部署包到远程服务器
copy: src="{{ item }}" dest={{tomcat_dir}}/webapps
with_fileglob:
- "{{workspace}}/target/*.war"
- name: 部署新程序并重启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
export JAVA_HOME=/usr/local/jdk
nohup {{tomcat_dir}}/bin/startup.sh
EOF
"""
}
ansiblePlaybook(
playbook: '/opt/jenkins_home/.playbook.yaml',
inventory: '/opt/jenkins_home/.hosts',
credentialsId: "${gitlab_ssh_auth}"
)
}
}
}
}
注释
$WORKSPACE和$BUILD_NUMBER是jenkins的内部变量
网友评论