前言
官方介绍说明,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
$ hostnamectlStatic 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 包进行安装部署。
系统启动
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