一、Jenkins安装配置
二、Jenkins部署springboot项目
三、Jenkins部署前端项目
四、Publish over ssh分发项目
五、Nginx代理Jenkins
对于已经配置好Jenkins环境和插件的宝子们,大家可以直接从第二部分部署项目开始阅读。
为了让Jenkins从Git中拉取源码,需要安装Git插件以及在服务器上安装Git工具。
1)安装Git插件
2)安装git工具
//安装git
yum install -y git
//查看git版本
git --version
1) 进入凭据配置页面
Manage Jenkins --》Manage Credentials --》全局 --》 添加凭据,在类型中我们选择SSH Username with private key类型。
2)生成ssh密钥对
//使用root用户生成公钥和私钥
ssh-keygen -t rsa
//查看密钥信息
cd /root/.ssh
3)将生成的公钥配置Gitee中
查看公钥信息,并在gitee设置中找到ssh公钥,将生成的公钥信息复制过来生成即可。
cat id_rsa.pub
4)生成Jenkins在Gitee中的ssh凭据
回到Jenkins凭据管理,将服务器中生成私钥信息复制,进行凭据生成 。注意两点:首先,Username要和linux中登录的用户名一致;其次,私钥一定要复制全。
在Jenkins集成服务器中,我们需要通过Maven来帮我们进行编译和打包项目。
1)下载Maven
进入Maven官网,选择合适的版本进行下载。(Index of /dist/maven/maven-3 (apache.org))这里以3.6.3版本为例。
2)上传并解压
tar -xzf apache-maven-3.6.3-bin.tar.gz
//根据个人喜好移动maven目录
//这里我将maven放置在/usr/local/maven-3.6.3目录中
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
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/
1)全局工具配置
Manage Jenkins --》Global Tool Configuration --》JDK --》新增JDK,配置如下:
Manage Jenkins --》Global Tool Configuration --》Maven --》新增Maven ,配置如下:
2)添加Jenkins全局变量
Manage Jenkins --》Configure System --》全局属性 ,添加三个全局变量
pipeline插件用来构建流水线项目。
至此,使用pipeline构建springboot项目所需要用到的所有环境均配置完成。
新建项目,选择流水线项目。
stages:代表整个流水线的所有执行阶段。通常stages只有1个,里面包含多个stage。
stage:代表流水线中的某个阶段,可能出现n个。一般分为拉取代码,编译构建,部署等阶段。
steps:代表一个阶段内需要执行的逻辑。steps里面是shell脚本,git拉取代码,ssh远程发布等任意内容。
1)拉取代码
上图中点击流水线语法后,选择片段生成器,随后配置gitee信息进行流水线脚本生成。
将生成的脚本复制到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)构建项目
将生成的脚本复制到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
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)构建项目
至此,我们成功使用pipeline构建springboot项目。