Jenkins 系统升级

我自横刀向天笑,去留肝胆两昆仑。这篇文章主要讲述Jenkins 系统升级相关的知识,希望能为你提供帮助。
前言官方介绍说明,Jenkins 的前身是 Hudson 是一个可扩展的持续集成引擎。
这是一款开源 CI/CD 工具软件,用于自动化各种任务,包括构建、测试、监控和部署软件。Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 java 程序。
??https://www.oschina.net/p/jenkins??



还有个中国定制版说明,主要是本地化定制服务。
??https://www.oschina.net/p/jenkins-zh??

正式的官方网站如下
??http://www.jenkins.io/??

官网上可以下载正式发布的所有安装镜像包版本,按你需要进行下载安装即可。


系统平台AlmaLinux 8.5

$ hostnamectl
Static hostname: localhost.localdomain
Transient hostname: 192.168.109.141
Icon name: computer-vm
Chassis: vm
Machine ID: 8166aec4bed44a88947523231a677fbd
Boot ID: 969f7c0fcfbe4065afa9b93e0617a7d3
Virtualization: vmware
Operating System: AlmaLinux 8.5 (Arctic Sphynx)
CPE OS Name: cpe:/o:almalinux:almalinux:8::baseos
Kernel: Linux 4.18.0-348.el8.x86_64
Architecture: x86-64
$

官网安装说明

jenkins 有很多种安装方式,我直接下载的 jenkins.war 包进行安装部署。
【Jenkins 系统升级】


系统启动war 包可以直接执行启动,启动命令:$ java -jar jenkins.war   执行启动后,默认的服务端口是 8080 端口,打开浏览器访问 jenkins 服务即可。
这样直接启动也没有问题,只是启动的窗口不能关闭,关闭了 jenkins 的服务也就结束了,系统也就无法正常访问了。
我们应该在这个启动指令上继续深入完善一下,比如执行下面的指令:
$
$ nohup java -jar jenkins.war --httpPort=8080 > > log 2> & 1 &
$

详细参数讲解
1、nohup#后台启动
2、--httpPort#自定义端口
3、> > log#以追加的方式记录日志
4、2> & 1#标准异常输出 1:标准输出, 2> & 1 输出记录到log文件中
5、& #后台启动方式

也可以增加如下的参数执行启动:
$
$ nohup java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war --httpPort=8080 > > log 2> & 1 &
$
详细参数讲解
-Dhudson.util.ProcessTree.disable=true#在启动的时候禁止 jenkins 杀死衍生进程,值为 true 将禁用此特性。
因为 jenkins 默认会在 Build 结束后 Kill 掉所有的衍生进程,如果想要避免这种情况,就需要添加上面的参数来避免。

讲解分析了启动指令,下面就启动 jenkins 服务,看看结果。

可以看到启动的 jenkins 服务进程相关信息,我设置了内存大小,进程直接就显示出来了  java -server -Xms2048m -Xmx2048m -XX:NewSize=1500m 。
打开浏览器访问系统。





可以看到我安装部署的 Jenkins 版本是 2.289.3 版本。



显示是 Jenkins 中文社区,Jenkins 2.289.3



点击系统管理,可以看到有提示信息,新版本的 Jenkins (2.332.3)  可以下载或自动升级,既然系统提供了自动升级,那就点击一下自动升级吧。



可以看到系统正在进行安装更新,等待一会时间,就可以看到系统安装更新完成。

勾选重启 Jenkins 复选框,系统将重新启动,显示如下。

重新启动完成,显示如下安装更新的新版本信息 Jenkins 2.332.3



点击系统管理,查看关于 Jenkins ,可以看到系统已自动升级到最新版本。

此次,系统自动升级成功,分享给各位,希望对各位有所帮助。
看看官网的最新版本页面
??https://ci.jenkins.io/??



下面分享3个自动启动脚本,按实际修改即可直接使用。
代码1
#!/bin/bash -x
#set -ex

#get cur_time
cur_time=$(date +%F-%H%M%S)
month=$(date +%Y%m)

WORK_HOME=$(pwd)
PID=`ps -ef | grep jenkins.war | grep -v grep | awk print $2`
if [[ "" !="$PID" ]]; then
echo "killing jenkins : $PID"
kill -9 $PID
fi

sleep 1

LOGS_DIR=/home/scm/jenkins/logs

MAIN_JAR="-jar jenkins.war --httpPort=19090"
JAVA_ARGS="-server -Xms2048m -Xmx2048m -XX:NewSize=1500m -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -XX:+PrintGCDetails -XX:+PrintHeapAtGC-XX:ThreadStackSize=512 -Xloggc:$LOGS_DIR/gc.log"

nohup java $JAVA_ARGS $MAIN_JAR 1> > $LOGS_DIR/stout.log 2> > $LOGS_DIR/error.log &

echo "startup jenkins ..."

代码2
#!/bin/bash

# 在执行过程中若遇到使用了未定义的变量或命令返回值为非零,将直接报错退出
set -eu

# 检查参数个数
if [ "$#" -lt 1 ]; then
echo " 脚本使用示例: sh jenkins.sh start|stop|restart "
exit
fi

# 获取脚本第一个参数
APP_OPT=$1
# 端口
APP_PORT=19090
# 名称
APP_NAME=jenkins
# jar名 | war名
APP_JAR=$APP_NAME.war
# 程序根目录
APP_JAR_HOME=.
# 日志名
APP_LOG_NAME=application-jenkins
# 日志根目录
APP_LOG_HOME=.
# 程序运行参数
JAVA_OPTS="--httpPort=$APP_PORT"

echo "本次操作服务名:[$APP_NAME]"
echo "本次操作选择:[$APP_OPT]"

# 停止
function stop()
echo "< --------------------------------------> "
echo "[$APP_NAME] ... stop ..."
# 查看该jar进程
pid=`ps -ef | grep $APP_NAME | grep -v grep | awk print $2`
echo "[$APP_NAME] pid="$pid
# 存在则kill,不存在打印一下吧
if [ "$pid" ]; then
kill -9 $pid
# 检查kill是否成功
if [ "$?" -eq 0 ]; then
echo "[$APP_NAME] stop success"
else
echo "[$APP_NAME] stop fail"
fi
else
echo "[$APP_NAME] 进程不存在"
fi



# 运行
function start()
echo "< --------------------------------------> "
echo "[$APP_NAME] ... start ..."
cd $APP_JAR_HOME
echo "当前路径:`pwd`"
# 赋予可读可写可执行权限
chmod 777 $APP_JAR
echo "启动命令: nohup java -jar $APP_JAR $JAVA_OPTS > > $APP_LOG_HOME/$APP_LOG_NAME.log 2> & 1 & "
nohup java -jar $APP_JAR $JAVA_OPTS > > $APP_LOG_HOME/$APP_LOG_NAME.log 2> & 1 &
if [ "$?" -eq 0 ]; then
echo "[$APP_NAME] start success"
else
echo "[$APP_NAME] start fail"
fi



# 重启
function restart()
echo "< --------------------------------------> "
echo "[$APP_NAME] ... restart ..."
stop
start



# 多分支条件判断执行参数
case "$APP_OPT" in
"stop")
stop
; ;
"start")
start
; ;
"restart")
restart
; ;
*)
echo " 提示:不支持参数 命令 -> $APP_OPT"
; ;
esac

代码3
#!/bin/sh

#prefix=/home/scm/jenkins
#nohup $prefix/jenkins.sh > > $prefix/jenkins.log 2> & 1 &

JENKINS_ROOT=/home/scm/jenkins
JENKINS_NAME=jenkins.war

#停止方法

stop()

echo "Stoping $JENKINS_NAME "

ps -ef|grep $JENKINS_NAME |awk print $2|while read pid

do

kill -9 $pid

echo " $pid kill"

done



case "$1" in

start)

echo "Starting $JENKINS_NAME "

nohup $JENKINS_ROOT/jenkins.sh > > java -jar $JENKINS_NAME/jenkins.log 2> & 1 &

; ;

stop)

stop

; ;

restart)

stop

start

; ;

status)

ps -ef|grep $JENKINS_NAME

; ;

*)

printf Usage: %s start|stop|restart|status\\n "$prog"

exit 1

; ;

esac








    推荐阅读