参考博客:https://blog.csdn.net/m0_58943936/article/details/135368557
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命令来重启服务。
# 我完成后重启系统后未能自启动,但可以使用指令来启动服务
Logo

一起探索未来云端世界的核心,云原生技术专区带您领略创新、高效和可扩展的云计算解决方案,引领您在数字化时代的成功之路。

更多推荐