Jenkins 跑 CI 一段时间后,攒下来的问题基本集中在几类:升级、插件下载慢、任务跑完进程消失、工作空间乱、代码拉不到最新、构建报内存错。这篇把这些坑和对应解法集中记录一遍,命令和配置按原文照抄。
升级与插件源
升级方法:通过 Tomcat 启动 Jenkins 的话,直接下载新的 war 包替换即可,其他部署方式对应替换安装包。

首次安装时下载插件很慢,可以先跳过这步,进后台换国内源。路径是 Jenkins → Manage Jenkins → Manage Plugins → Available,等插件列表完全加载(浏览器顶部搜索栏不再转圈)。登录 Jenkins 服务器确认插件地址文件已下载到本地:
[root@jenkins ~]# find / -name updates
default.json 里记录的是国外下载地址,用 sed 批量改成清华源:
[root@jenkins updates]# sed -i 's/http://updates.jenkins-ci.org/download/https://mirrors.tuna.tsinghua.edu.cn/jenkins/g' default.json && sed -i 's/http://www.google.com/https://www.baidu.com/g' default.json
再到 Manage Plugins → Advanced(高级设置)里把默认地址也换成国内:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json


最后重启:在浏览器里 Jenkins 地址后面直接加 restart 回车即可完成。

进程、工作空间与构建控制
问题一:pipeline 的 jenkinsfile 里定义了 tomcat 启动脚本,视图显示脚本执行了、tomcat 也启动完成,但回到服务器上看进程,什么都没有。


原因是 pipeline 执行完脚本会自动关闭它拉起的后台进程。解决:在 jenkinsfile 里加变量 JENKINS_NODE_COOKIE=dontkillme:
withEnv(['JENKINS_NODE_COOKIE=dontkillme']) {
sh '''
ssh remote_user@remote_ip "/opt/tomcat/bin/start.sh"
'''
}
知识一条:Jenkins-slave 从机上的代码工作空间(workspaces)是配置从机时定义的。

问题二:工作空间里出现两个或多个 @tmp、@2@tmp 这样的目录,前端项目执行 npm install 时报写入目录的问题。这是 JOB 在并行构建,并行时无法操作同一个目录,于是随机产生这些目录。解决:把 JOB 设置为【不允许并发构建】,或每个构建完成后清理工作目录。
问题三:正在构建的 Job 点 X 无法结束。解决:点开当前构建的 ID 进入构建页面,在 url 后面加 kill 回车,强制关闭构建。
目录迁移与主目录修改
刚开始装 Jenkins 没自定义主目录,后期默认目录空间不够,两条路:扩大 Jenkins 所在磁盘的空间;或者改默认工作主目录路径,再把原工作目录的数据整体迁走。改主目录的步骤:停止正在运行的 jenkins;修改 tomcat 的 bin 目录下 catalina.sh 执行文件;创建新目录;把原主目录下所有文件拷到新主目录;重启 jenkins。




改完在系统配置里核对根目录是否已指向新路径。Windows 环境(通过 Jenkins.msi 安装的那种)改 Job 工作空间更简单:停掉正在运行的 Jenkins 程序,编辑安装目录下的 config.xml(默认安装目录 C:Program Files (x86)Jenkins),改完重启 Jenkins。

代码拉取与合并
Jenkins 拉不到 SVN 最新代码,根因是两台服务器时间不一致:SVN 插件用时间标签下载而不是取 HEAD,svn 上提交代码的时间比 Jenkins 当前时间晚时,这部分代码就不会被更新。比如 Jenkins 在 10:56 更新,SVN 上 14、15 版都是 10:56 之后提交的,Jenkins 只能检测到 10:56 之前的最新版本。两个方案:SVN 项目 URL 后面加 @HEAD(如 svn://http:localhost/trunk/BKMC 改成 svn://http:localhost/trunk/BKMC@HEAD,pipeline 脚本里同样要加);或者同步 Jenkins 和 SVN 服务器时间保持一致。
git 合并代码报错,一般是 master 上最新的代码和本地不一样。先 rebase 拉齐再推:
[root@localhost~ ]# git pull --rebase origin master
#然后再次上传代码
[root@localhost~ ]# git push origin master


内存与其他报错
用 Maven Pipeline Plugin 构建时报:
[ERROR] Java heap space -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1]
这是 Maven 构建过程中 JVM 堆空间分配不足。解法是用 mavenOpts 指定最大(或最小最大两个)堆大小:
stage('Build') {
withMaven(
mavenSettingsConfig: '9d2a7048-91b1-47a8-8788-be4b89b71128', jdk: jdk.toString(), maven: 'Maven 3.3.9', mavenOpts: '-Xmx2048m') {
bat 'mvn clean package'
}
}
加堆之前确认物理内存够用。Java 进程拿不到指定堆时会报”VM 初始化期间发生错误。无法为 2097152KB 对象堆保留足够的空间”,可能是机器内存真的不足,也可能是系统限制,比如 Windows 上 32 位 JVM 大约 1.6GB 的堆上限。
访问 Jenkins 提示 AWT is not properly…,多为缺字体组件,安装 fontconfig 解决:
~]# yum install fontconfig


















暂无评论内容