Jenkins- Pipeline流水线

2021-02-03  本文已影响0人  阿当运维

java项目持续集成流程:
项目代码提交到git服务器----》jenkins点击构建(无配置触发钩子)---》触发流水线脚本(拉代码-构建-部署)
如何配置Pipeline ?
创建JOB -创建流水线项目-- (我们这里的git是自己的git服务器没有配置钩子)不能自动触发构建,不过不影响流水线的工作流程。

所以直接看到最后有个流水线部分:


image.png

脚本怎么写?
我们首先先要明确我们的整个流程的步骤。
拉代码(这里默认拉到了jenkins工作空间job下)--mvn构建打包---生成的war包复制到tomcat,重启服务。
分为3步,这里脚本内容我们可以点击流水线语法生成。(如:检查git分支)

image.png

所以这里流水线脚本为:

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'''
            }
        }
    }
}

保存应用,构建:

image.png
参考文章: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上的环境变量。

上一篇 下一篇

猜你喜欢

热点阅读