Jenkins- Pipeline流水线
2021-02-03 本文已影响0人
阿当运维
java项目持续集成流程:
项目代码提交到git服务器----》jenkins点击构建(无配置触发钩子)---》触发流水线脚本(拉代码-构建-部署)
如何配置Pipeline ?
创建JOB -创建流水线项目-- (我们这里的git是自己的git服务器没有配置钩子)不能自动触发构建,不过不影响流水线的工作流程。
所以直接看到最后有个流水线部分:
image.png
脚本怎么写?
我们首先先要明确我们的整个流程的步骤。
拉代码(这里默认拉到了jenkins工作空间job下)--mvn构建打包---生成的war包复制到tomcat,重启服务。
分为3步,这里脚本内容我们可以点击流水线语法生成。(如:检查git分支)
所以这里流水线脚本为:
pipeline {
agent any
stages {
stage('git pull') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'faba5348-6fea-4efe-bad4-77854ab68760', url: 'git@192.168.1.102:/home/git/repo_git/pans.git']]])
}
}
stage('Build') {
steps {
sh "cd /var/lib/jenkins/workspace/test-java/java_web;/usr/local/src/apache-maven-3.6.3/bin/mvn -Dmaven.test.failure.ignore=true clean package"
}
}
stage('tomcat web') {
steps {
sh ''' export BUILD_ID=DONTKILLME
/usr/bin/sh /usr/local/tomcat/bin/shutdown.sh
cp -rf /var/lib/jenkins/workspace/流水线-测试java/java_web/target/ly-simple-tomcat-0.0.1-SNAPSHOT.war /usr/local/tomcat/webapps/ROOT.war
/usr/bin/sh /usr/local/tomcat/bin/startup.sh
if [ $? -eq 0 ];then
echo "OK"
fi'''
}
}
}
}
保存应用,构建:
参考文章:https://www.cnblogs.com/Dy1an/p/11214185.html
https://www.cnblogs.com/xiaodai12138/p/9996995.html
SCM:https://blog.csdn.net/weixin_39855998/article/details/105473438
如何让我们的流水线JOB 在salve节点执行?
实际生产环境中,我们的job运行不会在jenkins-master。一般都在salve节点运行,上面我们的脚本中做一些修改即可。
node('web1') {
stage('拉取代码') {
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'faba5348-6fea-4efe-bad4-77854ab68760', url: 'git@192.168.1.102:/home/git/repo_git/pans.git']]])
}
stage('构建打包') {
sh "cd /var/lib/jenkins/workspace/test-java/java_web;/usr/maven/bin/mvn -Dmaven.test.failure.ignore=true clean package"
}
stage('项目上线') {
sh '''
#export BUILD_ID=DONTKILLME
JENKINS_NODE_COOKIE=dontkillme
WWWROOT=/usr/local/tomcat/webapps/ROOT
#备份
[ -d /data/backup ] || mkdir -p /data/backup
if [ -d $WWWROOT ];then
mv $WWWROOT /data/backup/tomcat-$(date +%F_%T)
#部署
unzip ${WORKSPACE}/java_web/target/*.war -d $WWWROOT
#cp -rf /var/lib/jenkins/workspace/test-java/java_web/target/ly-simple-tomcat-0.0.1-SNAPSHOT.war /usr/local/tomcat/webapps/ROOT.war
#重启
PID=$(ps -ef |grep tomcat|grep -v "grep"|awk -F" " {'print $2'})
[ -n "$PID" ] && kill -9 $PID
/usr/bin/sh /usr/local/tomcat/bin/startup.sh
if [ $? -eq 0 ];then
echo "OK"
fi
'''
}
}
可以看到脚本的开头变了,变成了node('web1') 就是这么简单,这代表让下面你的步骤在web1这个节点运行,web1是配置的jenkins -salve节点的标签。
image.png
image.png
遇到的问题。
其中遇到的问题包括:master执行脚本变成salve执行的格式问题需要注意一下(如stages --->stage)
还有就是遇到了执行任务的时候jenkins-master不能识别slave节点的环境变量,会出现比如:找不到java或者无效的
JAVA_HOME。
解决办法:
1.使用绝对路径的命令
2.在Jenkins的job中设置环境变量参数
3.在Jenkins的节点配置中设置环境变量
第三种方法比较稳妥:
在从节点配置中,添加环境变量:
image.png
初测添加PATH即可识别salve上的环境变量。