Jenkins使用Pipeline部署SpringBoot项目

Jenkins系列文章 

一、Jenkins安装配置

二、Jenkins部署springboot项目

三、Jenkins部署前端项目

四、Publish over ssh分发项目

五、Nginx代理Jenkins

        对于已经配置好Jenkins环境和插件的宝子们,大家可以直接从第二部分部署项目开始阅读。

一、插件安装及环境配置

1、集成凭据管理

        凭据可以用来存储需要密文保护的数据库密码、Gitlab密码信息、Docker私有仓库密码等,以便 Jenkins可以和这些第三方的应用进行交互。要在Jenkins使用凭证管理功能,需要安装Credentials Binding插件。(这里我已经安装过了)
        常用的凭证类型有: Username with password(用户密码)和SSH Username with private key(SSH 密钥)
Jenkins使用Pipeline部署SpringBoot项目_第1张图片

2、 集成Git插件及Git工具

       为了让Jenkins从Git中拉取源码,需要安装Git插件以及在服务器上安装Git工具。

1)安装Git插件

Jenkins使用Pipeline部署SpringBoot项目_第2张图片

2)安装git工具 

//安装git
yum install -y git
//查看git版本
git --version

Jenkins使用Pipeline部署SpringBoot项目_第3张图片

3、配置全局凭据

1) 进入凭据配置页面

        Manage Jenkins --》Manage Credentials --》全局 --》 添加凭据,在类型中我们选择SSH Username with private key类型。

Jenkins使用Pipeline部署SpringBoot项目_第4张图片

Jenkins使用Pipeline部署SpringBoot项目_第5张图片

2)生成ssh密钥对 

//使用root用户生成公钥和私钥
ssh-keygen -t rsa

//查看密钥信息
cd /root/.ssh

 Jenkins使用Pipeline部署SpringBoot项目_第6张图片

 3)将生成的公钥配置Gitee中

         查看公钥信息,并在gitee设置中找到ssh公钥,将生成的公钥信息复制过来生成即可。

 cat id_rsa.pub 

       Jenkins使用Pipeline部署SpringBoot项目_第7张图片

4)生成Jenkins在Gitee中的ssh凭据

        回到Jenkins凭据管理,将服务器中生成私钥信息复制,进行凭据生成 。注意两点:首先,Username要和linux中登录的用户名一致;其次,私钥一定要复制全。

Jenkins使用Pipeline部署SpringBoot项目_第8张图片

 Jenkins使用Pipeline部署SpringBoot项目_第9张图片

 4、Maven的安装和配置

        在Jenkins集成服务器中,我们需要通过Maven来帮我们进行编译和打包项目。

1)下载Maven

        进入Maven官网,选择合适的版本进行下载。(Index of /dist/maven/maven-3 (apache.org))这里以3.6.3版本为例。

Jenkins使用Pipeline部署SpringBoot项目_第10张图片

 2)上传并解压

tar -xzf apache-maven-3.6.3-bin.tar.gz

//根据个人喜好移动maven目录
//这里我将maven放置在/usr/local/maven-3.6.3目录中

Jenkins使用Pipeline部署SpringBoot项目_第11张图片

3)配置环境变量 

        使用vim  /etc/profile进行编辑,编辑完成之后使用source /etc/profile重新加载配置文件。使用mvn -v查看maven信息成功显示maven版本信息,则maven配置成功。

export MAVEN_HOME=/usr/local/maven-3.6.3
export PATH=${MAVEN_HOME}/bin:$PATH

Jenkins使用Pipeline部署SpringBoot项目_第12张图片

 Jenkins使用Pipeline部署SpringBoot项目_第13张图片

4)修改settings文件

        配置maven仓库地址,并修改镜像源。

        vim  /usr/local/maven-3.6.3/conf/settings.xml

    
    
        alimaven
        central
        aliyun maven
        http://maven.aliyun.com/nexus/content/repositories/central/
    

Jenkins使用Pipeline部署SpringBoot项目_第14张图片

Jenkins使用Pipeline部署SpringBoot项目_第15张图片

5、Jenkins全局配置 

1)全局工具配置

        Manage Jenkins --》Global Tool Configuration --》JDK --》新增JDK,配置如下:

Jenkins使用Pipeline部署SpringBoot项目_第16张图片

         Manage Jenkins --》Global Tool Configuration --》Maven --》新增Maven ,配置如下:

Jenkins使用Pipeline部署SpringBoot项目_第17张图片

2)添加Jenkins全局变量 

        Manage Jenkins --》Configure System --》全局属性 ,添加三个全局变量

JAVA_HOME、MAVEN_HOME、PATH+EXTRA
Jenkins使用Pipeline部署SpringBoot项目_第18张图片

 6、安装Pipeline插件

        pipeline插件用来构建流水线项目。

Jenkins使用Pipeline部署SpringBoot项目_第19张图片

         至此,使用pipeline构建springboot项目所需要用到的所有环境均配置完成。

二、部署项目

1、新建Item

        新建项目,选择流水线项目。

stages:代表整个流水线的所有执行阶段。通常stages只有1个,里面包含多个stage。

stage:代表流水线中的某个阶段,可能出现n个。一般分为拉取代码,编译构建,部署等阶段。

steps:代表一个阶段内需要执行的逻辑。steps里面是shell脚本,git拉取代码,ssh远程发布等任意内容。

Jenkins使用Pipeline部署SpringBoot项目_第20张图片

Jenkins使用Pipeline部署SpringBoot项目_第21张图片

2、生成pipeline脚本

1)拉取代码

        上图中点击流水线语法后,选择片段生成器,随后配置gitee信息进行流水线脚本生成。

Jenkins使用Pipeline部署SpringBoot项目_第22张图片

        将生成的脚本复制到steps中。

pipeline {
    agent any
    
    stages {
        stage('pull code') {
            steps {
                git credentialsId: 'a72f328f-cb27-42a3-bb78-578867ee6b16', url: '[email protected]:Hello__Zz3/kylin.git'
                echo 'pull code success'
            }
        }
       
    }
}

 2)构建项目

       Jenkins使用Pipeline部署SpringBoot项目_第23张图片

        将生成的脚本复制到steps中。

pipeline {
    agent any
    
    stages {
        stage('pull code') {
            steps {
                git credentialsId: 'a72f328f-cb27-42a3-bb78-578867ee6b16', url: '[email protected]:Hello__Zz3/kylin.git'
                echo 'pull code success'
            }
        }
        stage('build project') {
            steps {
                sh 'mvn clean package'
                echo 'build project success'
            }
        }
        
    }
}

3)编写运行脚本、停止、备份脚本

//新建项目目录
mkdir -p /data/project

//编写运行脚本
vim run.sh

//赋予脚本可执行权限
chmod +x run.sh

//编写停止脚本
vim shut.sh

//赋予脚本可执行权限
chmod +x shut.sh

//编写备份脚本
vim cp.sh

//赋予脚本可执行权限
chmod +x cp.sh

        运行脚本 

#! /bin/bash
#source /etc/profile
export JENKINS_NODE_COOKIE=dontKillMe
nohup java -jar /data/project/kylin-0.0.1-SNAPSHOT.jar > log.out 2>&1 &

       停止脚本 

#! /bin/bash
APP_NAME=kylin-0.0.1-SNAPSHOT.jar
pid=`ps -ef|grep ${APP_NAME}|grep -v grep|awk '{print $2}'`
# 检查pid变量是否为空
if [ -z "${pid}" ]; then
    echo "Process not running."
else
    echo "Process is running with PID ${pid}."
    kill -9 ${pid}
fi

        备份脚本

#! /bin/bash
APP_NAME=kylin-0.0.1-SNAPSHOT.jar
CURRENT_DATE=`date +%Y%m%d`
if [ -e "$APP_NAME" ]; then
    mv $APP_NAME  bkjar/
    cd bkjar/
    mv $APP_NAME $APP_NAME-$CURRENT_DATE

else
    echo "当前文件夹不包含 $APP_NAME 文件."
fi

这里对脚本中的命令进行说明。

(1)source  /etc/profile

在Jenkins的Pipeline中,如果你尝试使用nohup运行java命令,可能会遇到'java': 没有那个文件或目录的错误。这是因为在Jenkins执行Pipeline的环境中,可能找不到java命令的路径。

要解决这个问题,可以采用以下几个方法:(后续脚本编写中,使用那种方式大家可以自由选择)

指定java命令使用绝对路径来运行,例如:nohup /usr/local/java/java -jar 。 

在使用java命令之前,重新加载配置文件,例如:source  /etc/profile。

在pipeline使用之前配置jdk工具,例如:

pipeline {
    agent any

    tools {
        // 指定在Jenkins全局配置中定义的Java工具的名称
        jdk 'jdk1.8'
    }

    stages {
        stage('Build') {
            steps {
              
            }
        }
    }
}

(2)JENKINS_NODE_COOKIE=dontKillMe

JENKINS_NODE_COOKIE=dontKillMe 是用来标记 Jenkins 代理(slave)进程为长期运行的进程,告诉 Jenkins 主节点(master)不要自动终止该代理进程。它的主要目的是防止 Jenkins 在流水线(pipeline)执行完成后立即终止代理进程,使代理进程继续保持运行状态,以便进行后续的流水线执行或处理其他需要在代理上执行的任务。

当 Jenkins 主节点启动一个新的代理来处理流水线或构建任务时,它会为该代理设置 JENKINS_NODE_COOKIE 环境变量为 dontKillMe。这个环境变量的设置告诉 Jenkins 主节点该代理是一个长期运行的进程,不应在任务执行完成后立即终止。

简单来说,就是Jenkins的stage在运行完成后自动终止进程,而加入JENKINS_NODE_COOKIE=dontKillMe 则表示我们这个构建步骤中的进程想要长期运行。

4)发布项目

cd /data/project
bash shut.sh
//${WORKSPACE}未jenkins全局变量,代表当前项目目录
//jenkins中项目默认存放在/var/lib/jenkins/workspace中
//  /data/project为项目运行目录存放启动脚本等
cp ${WORKSPACE}/target/kylin-0.0.1-SNAPSHOT.jar  /data/project/ 
bash run.sh

Jenkins使用Pipeline部署SpringBoot项目_第24张图片

pipeline {
    agent any
    tools {
        jdk 'jdk1.8'
    }
    stages {
        stage('pull code') {
            steps {
                git credentialsId: 'a72f328f-cb27-42a3-bb78-578867ee6b16', url: '[email protected]:Hello__Zz3/kylin.git'
                echo 'pull code success'
            }
        }
        stage('build project') {
            steps {
                sh 'mvn clean package'
                echo 'build project success'
            }
        }
        stage('publish project') {
            steps {
                sh '''cd /data/project
                bash shut.sh
                bash cp.sh
                cp ${WORKSPACE}/target/kylin-0.0.1-SNAPSHOT.jar  /data/project/ 
                bash run.sh'''
                echo 'publish project success'
            }
        }
    }
}

5)构建项目

Jenkins使用Pipeline部署SpringBoot项目_第25张图片

Jenkins使用Pipeline部署SpringBoot项目_第26张图片

Jenkins使用Pipeline部署SpringBoot项目_第27张图片

         至此,我们成功使用pipeline构建springboot项目。

你可能感兴趣的:(Jenkins,jenkins,运维)