本篇介绍 Jenkins 流水线项目的配置及流水线脚本语法规则。至于 Jenkins 的安装及其它配置,我之前写过一篇文章可以查看。 https://www.yuque.com/testpu/pro/bo7lzr ,以下,演示也是基于这篇文章中介绍的 Jenkins 配置为准。
安装完流水线的插件可以,创建项目时会出现对应的流水线项目选项,如下:
输入名称,api_pipeline_dev 选中,流水线,即可创建对应项目。
至于,其它配置,如,git拉取代码,jdk,maven、远程服务器等,查看我的上一篇文章,这里只介绍 Jenkins 流水线项目的创建及流水线脚本。
下面是 api jar包的构建及部署脚本。
pipeline {
agent any
stages {
stage('拉取代码') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '*/dev']], extensions: [], userRemoteConfigs: [[credentialsId: '32d07987c09', url: 'http://192.8.8.8:8080/git/api']]])
echo '拉取代码成功'
}
}
stage('编译构建') {
steps {
echo "${env.WORKSPACE}" //用于打印 Jenkins 工作目录,没啥实质用处
sh 'mvn -f spomlile/pom.xml clean install'
echo '编译成功'
}
}
//stage('项目部署') {
//Jenkins 的ssh插件来实现部署jar包,就是这里配置后生成脚本 https://www.yuque.com/testpu/pro/lsigkl#xidkx
//steps {
//sshPublisher failOnError: true, publishers: [sshPublisherDesc(configName: '211.4docker', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/api/spomlile-all/', remoteDirectorySDF: false, removePrefix: 'spomlile/spomlile-all/target', sourceFiles: 'spomlile/spomlile-all/target/spomlile-all-0.1.0-exec.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)]
//echo '项目部署成功'
//}
//}
stage('项目部署') {
//执行远程服务器上的脚本来实现部署
steps {
sh '''ssh [email protected] "nohup sh /data/api/scp_from_211.3_api_pipeline.sh & sleep 1"
sleep 3'''
}
}
}
}
1、编译构建脚本中这个命令非常关键,如果你的项目工程存在多个微服务,那么你从 Git 仓库拉取下来的代码多了一层目录(根目录中不会有 pom.xml 这个文件),此时必须要指定这个文件的位置,否则 maven 识别不了,哈哈哈哈。用如下的方式指定该文件的位置,比如:
# 指定pom.xml文件的位置,基于Jenkins工作目录的相对目录
'mvn -f litemall/pom.xml clean install'
2、部署脚本有两种实现方法,一种是直接用 Jenkins 的ssh插件,传输 jar 到远程服务器(上面脚本注释的部分),另外一种是在远程服务器上写好部署脚本,用 Jenkins 执行远程服务器上的部署脚本,按自己项目需求二选一。
远程服务器上的部署脚本如下。
#!/bin/bash
host='192.8.8.8'
name='booksmpil-all-5.1.0-exec.jar'
dir='booksmpil'
DT=`date +%Y%m%d%H%M`
if ps -ef|grep $name |grep -v "grep" &>/dev/null; then
java_pid=`ps -ef | grep $name | grep -v "grep" | awk '{print $2}'`
echo "kill -9 的pid:" $java_pid
kill -9 ${java_pid}
fi
echo '【开始暂停jar包】'
if ps -ef|grep $name |grep -v "grep" &>/dev/null; then
echo "Tomcat stop failed.Please check the problem."
exit 5
fi
cd /data/api
cmd='mv '$dir' bk/'$dir'_'$DT
echo $cmd
eval $cmd
echo '【项目备份完成】'
sleep 3
if [ ! -d booksmpil ]; then
mkdir $dir
fi
sleep 3
scp -rq root@$host:/data/jenkins/jenkins_home/workspace/api_pipeline_dev/booksmpil/booksmpil-all/target/$name /data/api/$dir
sleep 2
echo '【项目部署完成】'
sleep 2
cd /data/api/$dir
cp /data/api/confbk/appconifg-all.yml ./appconifg-core.yml
echo '【备份配置完成】'
source /etc/profile
nohup java -jar $name >/dev/null &
if ps -ef|grep $name |grep -v "grep" &>/dev/null; then
echo '【启动jar包】'
fi
NR=`ps -ef | grep "${name}" | grep -v grep | wc -l`
if [ "$NR" -eq 1 ]
then
echo '【启动成功】'
else
echo '【启动失败】'
fi
Jenkins 自带流水线语法生成插件,入口项目配置-流水线-流水线语法
选中红框中的步骤,然后依次填写Git仓库的信息,点击 ‘生成流水线脚本’即可。
选中红框中的步骤,然后写你要执行的 shell 脚本,点击生成即可。
依次填写远程服务器的配置、远程目录、源文件地址等信息后,点击生成。
还有很多流水线脚本生成语法,按需生成。
来这里找我交流