2026/5/21 15:47:34
网站建设
项目流程
白城网站开发,国际公司办公室装修,查企业哪个软件好,徐州市云龙区建设局网站背景
目前使用的Jenkins 版本2.289.3 很旧了#xff0c;运行在Cenos6上。本次升级操作系统#xff0c;升级新版Jenkins 2.528.3 LTS。为启用“参数化构建”功能#xff0c;支持自由风格使用tag发版做准备。 参见#xff1a;配置Jenkins使用tag发布
文档
官方安装文档
环…背景目前使用的Jenkins 版本2.289.3 很旧了运行在Cenos6上。本次升级操作系统升级新版Jenkins 2.528.3 LTS。为启用“参数化构建”功能支持自由风格使用tag发版做准备。参见配置Jenkins使用tag发布文档官方安装文档环境操作系统 Ubuntu24.04主服务器配置 VM 16C/64G/800GJenkins版本 2.528.3 LTSJava版本 JDK21操作系统安装略Jenkins升级整理当前Jenkins工作路径Jenkins安装目录和所有程序目录tree -d -L1/public/ /public/ ├── ant ├── apache-maven-3.3.9 ├── apache-maven-3.9.12 ├── apache-maven-3.9.9 ├── application ├── gradle-6.3-bin ├── java ├── jenkins ├── repository ├── software └── spark-1.6.1jenkins目录是程序主目录。为了保持备份脚本目录统一每天定时rsync备份在其中定义了两个子目录jenkins-war - /usr/lib/jenkins/ 链接指向真实程序目录root.jenkins - /root/.jenkins/ 链接指向工作空间目录Jenkins工作空间目录每天定时rsync备份tree -a -d -L1/root/|grepjenkins ├── .jenkins同步所有文件到新服务器rsync-avz /public/ root192.168.7.132:/publicrsync-avz /root/.jenkins root192.168.7.132:/root/rsync-avz /usr/lib/jenkins root192.168.7.132:/usr/lib同步Java环境到新服务器本次升级使用jdk21# 新增加的jdk17和jdk21rsync-avz /usr/local/jvm root192.168.7.132: /usr/local/# 保持旧jdk1.8不变防止jenkins中有项目使用绝对路径rsync-avz /usr/java root192.168.7.132: /usr/安装新版Jenkins备份旧版Jenkinscd/usr/lib/jenkinsmvjenkins.war jenkins.war.20251223下载最新Stable (LTS)官网下载地址rootubuntu24-192-168-007-132:/usr/lib/jenkins# sha256sum /usr/lib/jenkins/jenkins.warbfa31f1e3aacebb5bce3d5076c73df97bf0c0567eeb8d8738f54f6bac48abd74 /usr/lib/jenkins/jenkins.warjenkins.war启动新版Jenkins使用java21启动新版Jenkins 2.528.3/usr/local/jvm/java21/bin/java -jar /usr/lib/jenkins/jenkins.war --httpPort8899jenkins.log21解决启动插件错误启动失败报以下错误原因是Matrix Authorization Strategy Plugin需要更新的Folders Plugin版本Plugin v3.2.8(matrix-auth)java.io.IOException: Failed to load: Matrix Authorization Strategy Plugin(matrix-auth3.2.8)[LF]- Update required: Folders Plugin(cloudbees-folder6.15)to be updated to6.1026.ve06dfa_cf31c3 or higher更新Folder插件官方插件下载地址进入插件目录cd/root/.jenkins/plugins备份旧cloudbees-foldermvcloudbees-folder cloudbees-folder.oldmvcloudbees-folder.jpi cloudbees-folder.jpi.old下载新cloudbees-folder.hpi并创建子目录ll|grep-i cloudbees-folder# 新下载插件和新创建的子目录drwxr-xr-x5root root7012月1718:41 cloudbees-folder/ -rw-r--r--1root root24311712月1718:24 cloudbees-folder.hpi# 旧备份文件-rw-r--r--1root root2231455月122021cloudbees-folder.jpi.old drwxr-xr-x5root root7012月1501:32 cloudbees-folder.old/新版Jenkins启动成功http://192.168.7.132:8899/login?from%2F升级Jenkins所有插件更换国内镜像源华为源https://mirrors.huaweicloud.com/jenkins/updates/update-center.jsonJenkins–ManageJenkins–Plugins–Advanced settings下配置确保Jenkins–ManageJenkins–Plugins–Updates 下再没有需要升级的插件配置“抛弃旧构建”旧版Jenkins升级后需要单独配置抛弃旧构建(Discard old builds)所有每个项目都重新配置建议与下列修改built-in配置一并完成保持构建的天数 与 保持构建的最大个数是“或”关系发布包保留天数 与 发布包保留最大个数也是“或”关系为了节省空间上述定义保留了10次构建记录 和 1个构建发布包注意Jenkins升级成功后如果不配置“抛弃旧构建(Discard old builds)”Jenkins会自动启动构建生成并保留所有发布包很容易撑满磁盘空间。消除主节点术语变更警告Jenkins–ManageJenkins下出现以下警告信息The word master is being retired as the term for the main Jenkins process and the built-in node. The main process is now called controller and the built-in node is called just built-in node. The UI has been updated with these changes. The following features are also affected: The implicit label of the built-in node changes from master to built-in. The built-in nodes NODE_NAME environment variable also changes from master to built-in. These changes could affect build behavior, so are not applied automatically. Before you apply these changes, you should do the following: Review label assignments in job configurations and tool installers for uses of master label. Any such label assignments will not match the built-in node after migration. Besides updating these assignments, you could also explicitly add the master label to the built-in node. Review use of the NODE_NAME environment variable in build scripts.新版Jenkins启用built-in替代之前的master节点标签这个变更不是必须的操作如果不修改Jenkins–Manage Jenkins–Nodes,之前每个项目配置的“master”节点仍然生效如果修改Jenkins–Manage Jenkins–Nodes那么每个项目就必须重新配置使用built-in替代之前的master。消除基于角色的权限策略配置警告Jenkins–ManageJenkins下出现以下警告信息There are several permissions declared in Role Based Strategy plugin configuration, that are ambiguous. Classify them correctly with USER:username or GROUP:groupname.新版Jenkins必须明确权限是组或用户不允许旧版中模糊定义通过web管理界面定义权限绑定组或用户功能不成功页面刷新后仍然定义模糊因此只能通过修改config.xml文件方式定义备份配置文件cp-rf /root/.jenkins/config.xml /root/.jenkins/config.bak修改type“EITHER” 为准确组group或用户user举例如下vimconfig.xml# 修改前原始记录assignedSIDssidtypeEITHERshijin/sid/assignedSIDs# 修改后记录绑定到用户上assignedSIDssidtypeUSERshijin/sid/assignedSIDs注意 需要停服修改对应记录重启服务后才生效消除SSL证书已过期警告Jenkins–ManageJenkins–Plugins下出现以下警告信息There were errors checking the update sites: Signature verification failed in update site#039;default#039;/divdivahref#classshowDetails显示详情/aprestyledisplay:nonejava.security.cert.CertificateExpiredException: NotAfter: Tue Jun 14 18:42:00 CST 2022brat java.base/sun.security.x509.CertificateValidity.valid(CertificateValidity.java:182)brat java.base/sun.security.x509.X509CertImpl.checkValidity(X509CertImpl.java:534)brat java.base/sun.security.provider.certpath.BasicChecker.verifyValidity(BasicChecker.java:190)brat java.base/sun.security.provider.certpath.BasicChecker.check(BasicChecker.java:144)brat java.base/sun.security.provider.certpath.PKIXMasterCertPathValidator.validate(PKIXMasterCertPathValidator.java:125)brCaused: java.security.cert.CertPathValidatorException: validity check failedbrat java.base/sun.security.provider.certpath.PKIXMasterCertPathValidator.validate(PKIXMasterCertPathValidator.java:135)brat java.base/sun.security.provider.certpath.PKIXCertPathValidator.validate(PKIXCertPathValidator.java:224)brat java.base/sun.security.provider.certpath.PKIXCertPathValidator.validate(PKIXCertPathValidator.java:144)brat java.base/sun.security.provider.certpath.PKIXCertPathValidator.engineValidate(PKIXCertPathValidator.java:83)brat java.base/java.security.cert.CertPathValidator.validate(CertPathValidator.java:309)brat org.jvnet.hudson.crypto.CertificateUtil.validatePath(CertificateUtil.java:93)brat jenkins.util.JSONSignatureValidator.verifySignature(JSONSignatureValidator.java:88)brat hudson.model.UpdateSite.verifySignatureInternal(UpdateSite.java:297)brat hudson.model.UpdateSite.updateData(UpdateSite.java:260)brat hudson.model.UpdateSite.updateDirectlyNow(UpdateSite.java:240)brat hudson.model.UpdateSite.updateDirectlyNow(UpdateSite.java:235)brat hudson.PluginManager.checkUpdatesServer(PluginManager.java:2177)brat hudson.util.Retrier.start(Retrier.java:62)brat hudson.PluginManager.doCheckUpdatesServer(PluginManager.java:2148)brat jenkins.DailyCheck.execute(DailyCheck.java:93)brat hudson.model.AsyncPeriodicWork.lambda$doRun$0(AsyncPeriodicWork.java:110)brat java.base/java.lang.Thread.run(Thread.java:1583)br/pre新版Jenkin提示证书过期通过启动命令增加禁用签名检查参数消除/usr/local/jvm/java21/bin/java -Dhudson.model.DownloadService.noSignatureChecktrue -jar jenkins.war --httpPort8899jenkins.log21注意 需要停服修改对应记录重启服务后才生效设置Jenkins语言确保操作系统安装中文语言包并正确设置时区Jenkins–ManageJenkins–Plugins–Available Plugins 下安装Localization: Chinese (Simplified) 或 Localization Support PluginJenkins–ManageJenkins–Appearance 设置中文选中 Ignore browser preference and force this language to all users选中 Allow all users to use their own language preference设置Jenkins时区通过启动命令增加时区参数设置/usr/local/jvm/java21/bin/java --Duser.timezoneAsia/Shanghai -jar jenkins.war --httpPort8899jenkins.log21配置Jenkins启动脚本vim/public/jenkins/restart.sh#!/bin/bashJENKINS_WAR/usr/lib/jenkins/jenkins.warPORT8899LOG/public/jenkins/jenkins.log# 64GB内存优化配置JAVA_OPTS-Xmx32g -Xms16g -XX:MaxMetaspaceSize1g -XX:ReservedCodeCacheSize512mJAVA_OPTS$JAVA_OPTS-XX:UseG1GC -XX:MaxGCPauseMillis200 -XX:G1HeapRegionSize8mJAVA_OPTS$JAVA_OPTS-XX:InitiatingHeapOccupancyPercent35 -XX:ExplicitGCInvokesConcurrentJAVA_OPTS$JAVA_OPTS-Dfile.encodingUTF-8 -Dhudson.DNSMultiCast.disabledtrue# 设置时区JAVA_OPTS$JAVA_OPTS-Duser.timezoneAsia/Shanghai# 关闭签名检查JAVA_OPTS$JAVA_OPTS-Dhudson.model.DownloadService.noSignatureChecktrue# 停止命令PIDps-ef|grep/usr/lib/jenkins/jenkins.war|grep-vgrep|awk{print $2}if[-n$PID];thenecho-e\n停止jenkins进程PID:${PID}kill-TERM$PID2/dev/nullsleep3# 等待优雅停止最多15秒foriin{1..5};dokill-0$PID2/dev/null||breakecho等待进程结束... ($i/5)sleep2done# 强制停止如果仍在运行ifkill-0$PID2/dev/null;thenecho强制终止进程...kill-KILL$PID2/dev/nullsleep2fielseecho-e\n没有jenkins进程在运行准备启动fi# 启动命令nohup/usr/local/jvm/java21/bin/java$JAVA_OPTS-jar$JENKINS_WAR--httpPort$PORT$LOG21New_PIDps-ef|grep/usr/lib/jenkins/jenkins.war|grep-vgrep|awk{print $2}[-n$New_PID]echo-e\njenkins启动成功PID:${New_PID}||echo-e\njenkins启动失败