Jenkins 部署文档(war包模式)

一、文档介绍
本文档详细描述 Jenkins war 包方式部署步骤。
二、部署说明
-
操作系统: Linux(CentOS 7.6) -
安装包版本: Jenkins 2.479.2
三、下载
(一) jenkins
国内下载地址:
https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/
cd /usr/local/srcwget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.479.2/jenkins.war
(二) jdk
由于 Jenkins 最新版本原因,推荐使用 JDK17 以上版本,所以本文档中使用 JDK21。
官网下载地址:
https://www.oracle.com/java/technologies/downloads/#java21
注意:由于 oracle 官网下载安装包需要认证,所以无法直接通过命令下载 ;所以请通过上述地址下载最新 JDK 安装包,请上传到服务器的 /usr/local/src 目录 。
四、安装依赖包
yum install fontconfig -y
五、安装
(一) jdk
cd /usr/local/srctar zxf jdk-21_linux-x64_bin.tar.gzmv jdk-21.0.3 /usr/local/cd /usr/local/ln -s jdk-21.0.3 jdkcat <<"EOF" >> /etc/profile# jdkexport JAVA_HOME=/usr/local/jdkexport CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jarexport PATH=$JAVA_HOME/bin:$PATHEOFsource /etc/profilejava -version
(二) jenkins
cd /usr/localmkdir -p jenkins-2.479.2mv src/jenkins.war jenkins-2.479.2ln -s jenkins-2.479.2 jenkins
创建启动脚本
cd /usr/local/jenkins/cat <<"EOF" | tee jenkins#!/bin/shdie() {echo "$(basename "$0"): $*" >&2exit 1}check_env() {required=truefor var in "$@"; doif [ "${var}" = '--' ]; thenrequired=falsecontinuefival=$(eval echo "\$${var}")if $required && [ -z "${val}" ]; thendie "check_env: ${var} must be non-empty"fidone}infer_java_cmd() {if [ -n "${JENKINS_JAVA_CMD}" ] && [ -x "${JENKINS_JAVA_CMD}" ]; thenreturn 0fiif [ -n "${JAVA_HOME}" ] && [ -x "${JAVA_HOME}/bin/java" ]; thenJENKINS_JAVA_CMD="${JAVA_HOME}/bin/java"return 0fiJENKINS_JAVA_CMD="$(command -v java)" || return "$?"}infer_jenkins_opts() {inferred_jenkins_opts=""if [ -n "${JENKINS_WEBROOT}" ]; theninferred_jenkins_opts="${inferred_jenkins_opts} --webroot='${JENKINS_WEBROOT}'"fiif [ -n "${JENKINS_LOG}" ]; theninferred_jenkins_opts="${inferred_jenkins_opts} --logfile='${JENKINS_LOG}'"fiif [ -n "${JENKINS_PORT}" ]; theninferred_jenkins_opts="${inferred_jenkins_opts} --httpPort=${JENKINS_PORT}"fiif [ -n "${JENKINS_LISTEN_ADDRESS}" ]; theninferred_jenkins_opts="${inferred_jenkins_opts} --httpListenAddress=${JENKINS_LISTEN_ADDRESS}"fiif [ -n "${JENKINS_UNIX_DOMAIN_PATH}" ]; theninferred_jenkins_opts="${inferred_jenkins_opts} --httpUnixDomainPath=${JENKINS_UNIX_DOMAIN_PATH}"fiif [ -n "${JENKINS_HTTPS_PORT}" ]; theninferred_jenkins_opts="${inferred_jenkins_opts} --httpsPort=${JENKINS_HTTPS_PORT}"fiif [ -n "${JENKINS_HTTPS_LISTEN_ADDRESS}" ]; theninferred_jenkins_opts="${inferred_jenkins_opts} --httpsListenAddress=${JENKINS_HTTPS_LISTEN_ADDRESS}"fiif [ -n "${JENKINS_HTTPS_KEYSTORE}" ]; theninferred_jenkins_opts="${inferred_jenkins_opts} --httpsKeyStore='${JENKINS_HTTPS_KEYSTORE}'"fiif [ -n "${JENKINS_HTTPS_KEYSTORE_PASSWORD}" ]; theninferred_jenkins_opts="${inferred_jenkins_opts} --httpsKeyStorePassword='${JENKINS_HTTPS_KEYSTORE_PASSWORD}'"fiif [ -n "${JENKINS_HTTP2_PORT}" ]; theninferred_jenkins_opts="${inferred_jenkins_opts} --http2Port=${JENKINS_HTTP2_PORT}"fiif [ -n "${JENKINS_HTTP2_LISTEN_ADDRESS}" ]; theninferred_jenkins_opts="${inferred_jenkins_opts} --http2ListenAddress=${JENKINS_HTTP2_LISTEN_ADDRESS}"fiif [ -n "${JENKINS_DEBUG_LEVEL}" ] && [ "${JENKINS_DEBUG_LEVEL}" -ne 5 ]; theninferred_jenkins_opts="${inferred_jenkins_opts} --debug=${JENKINS_DEBUG_LEVEL}"fiif [ -n "${JENKINS_PREFIX}" ]; theninferred_jenkins_opts="${inferred_jenkins_opts} --prefix='${JENKINS_PREFIX}'"fiif [ -n "${JENKINS_OPTS}" ]; theninferred_jenkins_opts="${inferred_jenkins_opts}${JENKINS_OPTS}"fiif [ -n "${JENKINS_ENABLE_ACCESS_LOG}" ] && $JENKINS_ENABLE_ACCESS_LOG; theninferred_jenkins_opts="${inferred_jenkins_opts} --accessLoggerClassName=winstone.accesslog.SimpleAccessLogger"inferred_jenkins_opts="${inferred_jenkins_opts} --simpleAccessLogger.format=combined"inferred_jenkins_opts="${inferred_jenkins_opts} --simpleAccessLogger.file='/var/log/jenkins/access_log'"fi}main() {if [ -n "${JENKINS_HOME}" ]; then[ -d "${JENKINS_HOME}" ] || die "${JENKINS_HOME} is not a directory"fi[ -f "${JENKINS_WAR}" ] || die "${JENKINS_WAR} is not a file"infer_java_cmd || die 'failed to find a valid Java installation'infer_jenkins_optsjava_opts_tmp="${JAVA_OPTS}"unset JAVA_OPTSunset JENKINS_DEBUG_LEVELunset JENKINS_ENABLE_ACCESS_LOGunset JENKINS_HTTP2_LISTEN_ADDRESSunset JENKINS_HTTP2_PORTunset JENKINS_HTTPS_KEYSTOREunset JENKINS_HTTPS_KEYSTORE_PASSWORDunset JENKINS_HTTPS_LISTEN_ADDRESSunset JENKINS_HTTPS_PORTjava_cmd="${JENKINS_JAVA_CMD}"unset JENKINS_JAVA_CMDunset JENKINS_UNIX_DOMAIN_PATHunset JENKINS_LISTEN_ADDRESSunset JENKINS_LOGunset JENKINS_OPTSunset JENKINS_PORTunset JENKINS_PREFIXjenkins_war_tmp="${JENKINS_WAR}"unset JENKINS_WARunset JENKINS_WEBROOTeval exec \"${java_cmd}" \${java_opts_tmp} \-jar "${jenkins_war_tmp}" \${inferred_jenkins_opts}}if [ -z "${JENKINS_OPTS}" ]; thenJENKINS_OPTS="$*"elseJENKINS_OPTS="${JENKINS_OPTS} $*"fiif [ -z "${JENKINS_WAR}" ]; thenJENKINS_WAR=/usr/share/java/jenkins.warficheck_env \JENKINS_WAR \-- \JAVA_HOME \JENKINS_DEBUG_LEVEL \JENKINS_ENABLE_ACCESS_LOG \JENKINS_HOME \JENKINS_HTTP2_LISTEN_ADDRESS \JENKINS_HTTP2_PORT \JENKINS_HTTPS_KEYSTORE \JENKINS_HTTPS_KEYSTORE_PASSWORD \JENKINS_HTTPS_LISTEN_ADDRESS \JAVA_OPTS \JENKINS_HTTPS_PORT \JENKINS_JAVA_CMD \JENKINS_UNIX_DOMAIN_PATH \JENKINS_LISTEN_ADDRESS \JENKINS_LOG \JENKINS_OPTS \JENKINS_PORT \JENKINS_PREFIX \JENKINS_WEBROOTmainexit 0EOFchmod +x /usr/local/jenkins/jenkins
六、创建目录
mkdir -p /data/jenkins_data/{conf,data,tmp}mkdir -p /data/logs/jenkins/
七、修改配置文件
cd /data/jenkins_data/confcat <<EOF | tee jenkins.confJAVA_HOME=/usr/local/jdkJENKINS_WAR=/usr/local/jenkins/jenkins.warJENKINS_HOME=/data/jenkins_data/dataJENKINS_PORT=8080JENKINS_PREFIX=/jenkinsJENKINS_LOG=/data/logs/jenkins/jenkins.logJENKINS_OPTS="-Djava.io.tmpdir=/data/jenkins_data/tmp"EOF
Jenkins 配置变量说明:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
八、创建服务
cd /data/jenkins_data/cat <<EOF | teejenkins.service[Unit]Description=Jenkins Continuous Integration ServerRequires=network.targetAfter=network.targetStartLimitBurst=5StartLimitIntervalSec=5m[Service]User=rootGroup=rootType=notifyNotifyAccess=mainWorkingDirectory=/usr/local/jenkinsEnvironmentFile=-/data/jenkins_data/conf/jenkins.confExecStart=/usr/local/jenkins/jenkins# ExecStartPre=/bin/sleep 10Restart=on-failureSuccessExitStatus=143[Install]WantedBy=multi-user.targetEOFcp jenkins.service /usr/lib/systemd/system/jenkins.service
九、启动服务
systemctl daemon-reloadsystemctl enable jenkins --nowsystemctl status jenkins
十、jenkins 初始化
服务启动成功后,通过浏览器访问
http://127.0.0.1:8080/jenkins/。
注意:IP 地址和端口需根据实际情况进行替换。
(一) 修改配置为国内镜像
修改内容:
-
Jenkins 默认去探测谷歌来校验网络情况,不通则会进入到离线部署界面; -
Jenkins 插件或更新包,默认从 Jenkins 官网下载,速度较慢;
根据上述修改点,将 default.json 配置中的地址替换为国内源
cd /data/jenkins_data/data/updatessed -i 's#https://updates.jenkins.io/download/#https://mirrors.tuna.tsinghua.edu.cn/jenkins/#g' default.jsonsed -i 's/www.google.com/www.baidu.com/g' default.jsonchattr +i default.json# 重启systemctl restart jenkins
注意:修改配置后需要重启 Jenkins 生效,但是重启后配置又会被还原,所以 chattr +i 操作非常关键,此命令会锁定文件,不允许修改。
(二) 输入初始化密码
Jenkins 启动时会设置一个随机密码,根据配置生成密码路径;查看该路径文件,输入密码进入下一步。

(三) 安装推荐的插件


(四) 创建新的管理员

(五) 配置实例

(六) 开始使用 Jenkins


夜雨聆风