jenkins构建实例时出现“No space left on device”问题

问题如下:

 

Caused by:java.io.IOException: No space left on device
    at java.io.FileOutputStream.writeBytes(Native Method)
    at java.io.FileOutputStream.write(FileOutputStream.java:345)
    at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1793)
    at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1769)
    at org.apache.commons.io.IOUtils.copy(IOUtils.java:1744)
    at hudson.util.IOUtils.copy(IOTuils.java:40)
    at hudson.FilePath.readFromTar(FilePath.java:2318)
 

 

背景:

出现这个问题,其实也有好一阵子了,查了硬盘空间之后发布是因为jenkins 当时在部署时,放在了/dev/mapper/centos-root盘,这个盘只有50G,后来项目越来越多,加上构建数太大,之前是保留最近7次构建数,这里提醒大家,jenkins 有提供了回滚功能,所以每个构建记录,其实里面都有保留了你的war包,可见下图:

 

举个例子,如果有10个项目,对应有10个实例,每个实例保存7个构建数,那个就有至少70个war包,   如果你war包一个几百m,那占用的内存可真的不小;

 

如果没有多余的硬盘,那只能通过把构建数的值,设小一些,只保留2次或者3次,如果有多余的硬盘空间,那么迁移到更大的硬盘,更能长远解决该问题,以下主要是介绍迁移jenkins 到新地址的操作步骤:

 

 

先查询硬盘占用内存:

#df -hl

 红框标识的,是要迁移的目标硬盘;

通过查询jenkins 目录下各子目录占用内存大小,可知jobs 和worksapces 两个文件夹的占用量是比较大的

du -h --max-depth=1 /var/lib/jenkins/
 

 

 

以下是最终的目标:将var/lib/jenkins   迁移到 /home/ 目录下,并修改相应的配置;

具体步骤列举如下 ,供同样遇到该问题的人参考:

1、将/var/lib/jenkins 复制到目标目录 /home

cp -rp /var/lib/jenkins/ /home/

注意要加上 p,  代表保留源文件或目录的所有者和组,原封不动复制到目录位置了,如果不加的话,复制成功之后,文件会显示root用户;

当然也可以选择复制之后,再使用chown 命令更改所有者和组:

chown -R /home/jenkins

 

2、修改/etc/sysconfig/jenkins文件(主要就是修改jenkins 的主目录映射地址)

 

[root@localhost ]# vim /etc/sysconfig/jenkins

 

把原来的JENKINS_HOME注释掉,新添加

JENKINS_HOME="/home/jenkins"
 

3、修改/etc/passwd文件,搜索jenkins定位到位置

jenkins:x:991:986:Jenkins Automation Server:/var/lib/jenkins:/bin/false

改为

jenkins:x:991:986:Jenkins Automation Server:/home/jenkins:/bin/false

 

4、重新启动jenkins

service jenkins restart

至此,成功将jenkins 迁移到新的硬盘,温馨提醒,操作过程难免有风险,为了保险起见,迁移完成之后,要自己试一下“新建实例”和构建项目,看看是否一切正常,还有新建的实例,是否有在新的workspaces里生成实例文件目录,一切正常之后,才可删除原来的/var/lib/jenkins

 

5、验证主目录是否修改成功

进入jenkins,在系统管理==》系统设置里可看到主目录是否正确

 

 

迁移好之后的内存如下:

 

 

PS:

一开始解释这个问题的时候 ,想做这个迁移的工作,但是在修改主目录上费了不少时间和精力,其实就是上面的第二个步骤,原因是因为我从网上找到的教程,都是让我做以下的操作:

用root用户登录
编辑profile文件:vi /etc/profile
在最后加入:export JENKINS_HOME=xxxx
保存,退出后执行:source  /etc/profile
让配置生效

本质上应该就是修改全局的环境变量,我通过命令

echo @JENKINS_HOME

 确实是有打印出/home/jenkins的地址,但不知道为什么 ,在jenkins的系统设置里,主目录就是不生效,不知道是我操作有问题,还是什么原因,如果有懂的,欢迎讨论交流;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值