参考博客:
Jenkins官网:https://jenkins.io/ 或 https://www.jenkins.io/zh/download/
Jenkins官网文档:https://www.jenkins.io/zh/doc/
jenkins安装包:http://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/
jenkins插件库: https://plugins.jenkins.io/
清华镜像:http://updates.jenkins-ci.org/download/war/
jdk下载地址:https://www.oracle.com/java/technologies/downloads/#java8
maven下载地址:https://maven.apache.org/download.cgi
一、环境准备
1、jdk安装(安装jdk8和jdk11,如果需要部署的项目都是jdk11写的可不安装jdk8)
1.1、安装配置jdk
# 查询系统是否已安装jdk并卸载
rpm -qa|grep java
# 如果查询没有已安装则进行下一步操作, 如果有已安装Jdk则卸载已安装的jdk
rpm -e --nodeps java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64
# 验证是否已经卸载
rpm -qa|grep java
# 再次查看Java版本,没有任何信息就表示删除成功了
java -version
javac -version
1.2 安装jdk
# 创建jdk存放文件夹 将jdk文件上传到该文件夹
mkdir /usr/local/Jdk
# 解压 修改解压后的文件夹名为java8和java11
tar -zxvf /usr/local/Jdk/jdk-8u411-linux-x64.tar.gz
tar -zxvf /usr/local/Jdk/jdk-11.0.23_linux-x64_bin.tar.gz
# 配置JDK环境变量,编辑 /etc/profile 文件
vi /etc/profile
# 先将光标(可以使用快捷键Shift+g)移到最后一行,然后输入 i 进入编辑状态,粘贴如下内容,输入Esc 进入命令模式 输入:wq 保存修改信息
export JAVA_HOME=/usr/local/Jdk/java8
export PATH=$JAVA_HOME/bin:$PATH
# 配置文件生效
source /etc/profile
# 测试 JDK 安装
java -version
javac -version
2、maven安装
2.1、安装maven
# 将maven文件上传到/usr/local
# 解压 修改文件夹名为maven
tar -zxvf /usr/software/apache-maven-3.9.6-bin.tar.gz
# 配置Maven环境变量
vi /etc/profile
# 先将光标(可以使用快捷键Shift+g)移到最后一行,然后输入 i 进入编辑状态,在JAVA_HOME后面粘贴如下内容
export MAVEN_HOME=/home/soft/maven/apache-maven-3.9.6
# 修改PATH为
export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH
# 配置文件生效
source /etc/profile
# 测试maven安装
mvn -version
2.2、配置本地仓库
# 在maven文件夹中创建maven-repository用于当本地仓库
mkdir -p /usr/local/maven/maven-repository
# 切换目录
cd /usr/local/maven/maven-repository/conf
# 编辑settings.xml配置文件
vim settings.xml
# 在其中增加如下配置,配置本地仓库地址:
<localRepository>/usr/local/maven/maven-repository</localRepository>
# 配置阿里云的私服(选做),提高依赖下载速度
<mirrors>
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
</mirrors>
3、git安装
# 服务器安装git
yum -y install git
# 查看git路径
which git
二、jenkins安装
1、官网下载(下载最新版即可)
2、上传服务器
# 进入war包存放位置,启动jenkins
nohup /usr/local/Jdk/java11/bin/java -jar -server -Xms1024m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m jenkins.war --httpPort=16060 &
# 开放端口
firewall_cmd --permanent --zone=public --add-port=16060/tcp
# 更新防火墙规则
firewall-cmd --reload
# 查看端口开启信息
firewall-cmd --list-ports
3、浏览器打开http://你的服务器ip:16060/
# 查看初始化密码(复制后填写到页面的管理员密码中)
cat /root/.jenkins/secrets/initialAdminPassword
4、安装推荐的插件
5、输入用户名密码邮箱
6、配置访问地址(默认即可,也可按需更改)
7、点击开始使用jenkins 就可以使用jenkins了
三、jenkins配置
1、所需插件
- Git Parameter git参数
- Localization: Chinese (Simplified) 简体中文包
- SSH server ssh服务器
- Build With Parameters 输入框式的参数(可选)
- Persistent Parameter 下拉框式的参数(可选)
- SSH ssh配置
- Publish Over SSH 通过SSH发送构建好的jar包或war包
- Role-based Authorization Strategy (可选用户权限)
2、配置国内清华镜像源
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
3、插件安装方法
4、配置maven
- 位置:系统管理-全局工具配置-maven配置
- MAVEN_HOME替换为服务器maven所在路径
5、配置jdk (JAVA_HOME替换为服务器jdk所在路径)
6、配置git
7、配置凭据(git账号)
- 入口
- 点击System进入全局凭据
- 进入System后,(如果没有,自行创建一个)
- 进入后点击添加
- 添加凭据
- 绑定gitee Api 令牌(令牌按获取地址从自己的gitee上生成)
8、Jenkins 端配置Gitee API Token, 证书令牌选择上一步配置的API令牌,测试链接成功则配置完成
9、配置Publish over SSH(用于不同服务器间发送文件)
- 查看公钥/私钥,.ssh 文件夹是用于存储用户的 SSH 配置和身份验证信息的目录进入/root/.ssh目录,看看里面有没有公钥和私钥,如没有
# 创建ssh key
ssh-keygen -t rsa
# 一路回车
# 查看/root/.ssh/文件夹目录
cd /root/.ssh/
# 查看ssh key 私钥/公钥
cat /root/.ssh/id_rsa
cat /root/.ssh/id_rsa_pub
- 添加映射关系,我使用的是本机映射,也可以添加其他服务器的映射
vim /etc/hosts
# 添加映射
ip 映射名
- 将另一个服务器的公钥复制到/root/.ssh/authorized_keys文件中
vim /root/.ssh/authorized_keys
# 测试链接 首次需要输入密码,然后在/root/.ssh下生成known_hosts文件,后面测试链接不需要输入密码就成功链接则成功
ssh root@local-server
10、配置SSH Server
四、项目构建
1、在项目根目录下创建test.Jenkinsfile 文件
- jenkins管道文件
pipeline {
agent any
// 参数
environment {
jarDirect='/home/test'
jarName='test.jar'
projectName='test'
}
stages {
// 构建
stage('Build') {
steps {
// 运行maven打包指令
sh "mvn -Dmaven.test.failure.ignore=true clean package"
// To run Maven on a Windows agent, use
// bat "mvn -Dmaven.test.failure.ignore=true clean package"
}
}
// 推送jar包
stage('Jar Move') {
steps {
// 运行程序关闭脚本
sh '/home/test/run.sh stop'
// 删除指定服务器指定目录下程序
sh 'ssh local-server rm -rf ${jarDirect}/${jarName}'
// 推送程序到指定服务器指定目录下
sh 'scp -r ${WORKSPACE}/test/target/${jarName} local-server:${jarDirect}/${jarName}'
}
}
// 启动程序
stage('Deploy') {
steps {
// 启动指定服务器下的程序
sh 'ssh local-server "cd ${jarDirect} && sh run.sh start"'
}
}
stage('Test') {
steps {
echo 'Testing'
}
}
}
// 推送消息
post {
success {
echo '部署成功'
}
failure {
echo '部署失败'
}
}
}
- 程序启动文件 run.sh
#!/bin/sh
# ./run.sh start 启动 stop 停止 restart 重启 status 状态
AppName=test.jar
JavaHome=/usr/local/jdk1.8.0_411/bin
# JVM参数
JVM_OPTS="-Dname=$AppName -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"
APP_HOME=`pwd`
LOG_PATH=$APP_HOME/logs/$AppName.log
if [ "$1" = "" ];
then
echo -e "\033[0;31m 未输入操作名 \033[0m \033[0;34m {start|stop|restart|status} \033[0m"
exit 1
fi
if [ "$AppName" = "" ];
then
echo -e "\033[0;31m 未输入应用名 \033[0m"
exit 1
fi
function start()
{
PID=`ps -ef |grep $JavaHome/java|grep $AppName|grep -v grep|awk '{print $2}'`
if [ x"$PID" != x"" ]; then
echo "$AppName is running..."
else
nohup $JavaHome/java $JVM_OPTS -jar $AppName > logging.log 2>&1 &
echo "Start $AppName success..."
fi
}
function stop()
{
echo "Stop $AppName"
PID=""
query(){
PID=`ps -ef |grep $JavaHome/java|grep $AppName|grep -v grep|awk '{print $2}'`
}
query
if [ x"$PID" != x"" ]; then
kill -TERM $PID
echo "$AppName (pid:$PID) exiting..."
while [ x"$PID" != x"" ]
do
sleep 1
query
done
echo "$AppName exited."
else
echo "$AppName already stopped."
fi
}
function restart()
{
stop
sleep 2
start
}
function status()
{
PID=`ps -ef |grep $JavaHome/java|grep $AppName|grep -v grep|wc -l`
if [ $PID != 0 ];then
echo "$AppName is running..."
else
echo "$AppName is not running..."
fi
}
case $1 in
start)
start;;
stop)
stop;;
restart)
restart;;
status)
status;;
*)
esac
2、新建任务
3、配置
- 切换分支
- 配置流水线
4、开始构建
五、配置jenkins开机自启
1、jenkins启动脚本
#gedit /etc/init.d/myservice
#!/bin/bash
# chkconfig: 2345 10 90
# description: jenkins ....
JENKINS_HOME="/usr/local/jenkins"
JENKINS_WAR="/usr/local/jenkins/jenkins.war"
JENKINS_PORT=16060
JAVA_HOME="/java/jdk-11.0.5/bin"
AppName="jenkins.war"
# JVM参数
JVM_OPTS="-server -Xms1024m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m"
APP_HOME=`pwd`
LOG_PATH=$JENKINS_HOME/jenkins.log
if [ "$1" = "" ];
then
echo -e "\033[0;31m 未输入操作名 \033[0m \033[0;34m {start|stop|restart|status} \033[0m"
exit 1
fi
if [ "$AppName" = "" ];
then
echo -e "\033[0;31m 未输入应用名 \033[0m"
exit 1
fi
function start()
{
PID=`ps -ef |grep $JAVA_HOME/java|grep $AppName|grep -v grep|awk '{print $2}'`
if [ x"$PID" != x"" ]; then
echo "$AppName is running..."
else
nohup $JAVA_HOME/java $JVM_OPTS -jar $JENKINS_WAR --httpPort=$JENKINS_PORT > $LOG_PATH 2>&1 &
echo "Start $AppName success..."
fi
}
function stop()
{
echo "Stop $AppName"
PID=""
query(){
PID=`ps -ef |grep $JAVA_HOME/java|grep $AppName|grep -v grep|awk '{print $2}'`
}
query
if [ x"$PID" != x"" ]; then
kill -TERM $PID
echo "$AppName (pid:$PID) exiting..."
while [ x"$PID" != x"" ]
do
sleep 1
query
done
echo "$AppName exited."
else
echo "$AppName already stopped."
fi
}
function restart()
{
stop
sleep 2
start
}
function status()
{
PID=`ps -ef |grep $JAVA_HOME/java|grep $AppName|grep -v grep|wc -l`
if [ $PID != 0 ];then
echo "$AppName is running..."
else
echo "$AppName is not running..."
fi
}
case $1 in
start)
start;;
stop)
stop;;
restart)
restart;;
status)
status;;
*)
esac
2、有三种方式
- systemd 设置开机自启
# 创建systemd文件,输入以下配置
vim /etc/systemd/system/jenkins.service
# 更新配置后需要刷新
systemctl daemon-reload
# 查看打印详细日志
journalctl -u jenkins.service -xe
[Unit]
Description=Nexus Service
After=network.target
[Service]
User=root
Type=forking
TimeoutStopSec=20
Restart=always
RestartSec=5s
ExecStart=/usr/local/jenkins/jenkins_start.sh start
ExecStop=/usr/local/jenkins/jenkins_start.sh stop
[Install]
WantedBy=multi-user.target
刷新配置后设置开机自启
# 开机自启
systemctl enable jenkins.service
# 关闭开机自启
systemctl disable jenkins.service
# 查看开机自启的服务
systemctl list-unit-files --type=service --state=enabled | grep enabled
# 启动服务
systemctl start jenkins.service
# 关闭服务
systemctl stop jenkins.service
# 查看状态
systemctl status jenkins.service
- 定时任务设置开机自启
# 打开定时任务编辑
crontab -e
# 添加启动脚本
@reboot /usr/local/jenkins/jenkins_start.sh start
# 重启系统就会发现jenkins已经可以开机自启了
- 使用chkconfig自启动
# 查看自启动服务
chkconfig --list
# 创建启动脚本,启动脚本使用上面提供的
vim /etc/init.d/jenkins_start.sh
# 对脚本进行赋权
chmod +x /etc/init.d/jenkins_start.sh
# 将脚本添加进清单
chkconfig --add jenkins_start.sh
# 添加完毕后查看清单
chkconfig --list
# 至此,完成了Jenkins随操作系统启动自启服务的操作,
# 也可以使用service jenkins_start.sh start/stop/restart命令来重启服务。
# 我完成后重启系统后未能自启动,但可以使用指令来启动服务