前言

官方介绍说明,Jenkins 的前身是 Hudson 是一个可扩展的持续集成引擎。

这是一款开源 CI/CD 工具软件,用于自动化各种任务,包括构建、测试、监控和部署软件。Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。

https://www.oschina.net/p/jenkins

Jenkins 系统升级_jar


还有个中国定制版说明,主要是本地化定制服务。

https://www.oschina.net/p/jenkins-zh

Jenkins 系统升级_linux_02

正式的官方网站如下

http://www.jenkins.io/

Jenkins 系统升级_jar_03

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


系统平台

AlmaLinux 8.5

Jenkins 系统升级_java_04

$ 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 系统升级_jar_05

jenkins 有很多种安装方式,我直接下载的 jenkins.war 包进行安装部署。

Jenkins 系统升级_java_06


系统启动

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_07

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

打开浏览器访问系统。


Jenkins 系统升级_linux_08


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


Jenkins 系统升级_linux_09

显示是 Jenkins 中文社区,Jenkins 2.289.3

Jenkins 系统升级_java_10


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


Jenkins 系统升级_jar_11

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

Jenkins 系统升级_linux_12

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

Jenkins 系统升级_linux_13

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

Jenkins 系统升级_jar_14


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

Jenkins 系统升级_linux_15

此次,系统自动升级成功,分享给各位,希望对各位有所帮助。

看看官网的最新版本页面

https://ci.jenkins.io/

Jenkins 系统升级_jar_16


下面分享3个自动启动脚本,按实际修改即可直接使用。

代码1

#!/bin/bash -x
#set -ex

#get cur_time
cur_time=$(date +%F-%H%M%S)
mnotallow=$(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:CMSInitiatingOccupancyFractinotallow=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


在分享两个很实用的官网插件的网址

一个是 jenkins 官方插件构建网址

https://ci.jenkins.io/job/Plugins/

Jenkins 系统升级_jar_17


一个是 Gerrit 官方构建插件网址

https://gerrit-ci.gerritforge.com/

Jenkins 系统升级_java_18