问题
随着时间推移,Jenkins 占用的空间越来越大,快要占满空间时,Jenkins 会提示:
1
|
Jenkins: your Jenkins data directory /var/lib/jenkins (aka JENKINS_HOME) is almost full
|
最开始安装 CentOS 时,使用了默认的配置,导致系统盘只分配了 50GiB 空间,现在很快就用满了。
网上搜索到的方案都是丢弃旧的构建,但这并不可行,需要保留所有构建。正好机器上还有多余的硬盘空间,因此尝试将整个 Jenkins 目录迁移。
环境
- Jenkins 2.249.1
- CentOS 7.6.1810
文档
官方文档给出了修改 JENKINS_HOME
环境变量的解决方法,但是并未给出不同安装方式下的配置修改方法:
查找配置
Jenkins 是通过包管理器安装的:
1
2
3
4
5
6
7
8
9
|
# systemctl status jenkins
● jenkins.service - LSB: Jenkins Automation Server
Loaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled)
Active: active (running) since Fri 2020-09-18 11:09:06 CST; 3 weeks 0 days ago
Docs: man:systemd-sysv-generator(8)
Process: 28850 ExecStop=/etc/rc.d/init.d/jenkins stop (code=exited, status=0/SUCCESS)
Process: 28875 ExecStart=/etc/rc.d/init.d/jenkins start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/jenkins.service
└─28899 /etc/alternatives/java -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --httpPort=5000 --debug=5 --...
|
通过 systemctl status jenkins
的输出可以看到 Jenkins 是从 /etc/rc.d/init.d/jenkins
脚本启动的,并且可以看到当前的 JENKINS_HOME
环境变量的值。
打开脚本,查看逻辑:
1
|
vi /etc/rc.d/init.d/jenkins
|
1
2
3
4
5
6
7
8
9
10
|
# Check for existence of needed config file and read it
JENKINS_CONFIG=/etc/sysconfig/jenkins
# Read config
[ -f "$JENKINS_CONFIG" ] && . "$JENKINS_CONFIG"
# Set up environment accordingly to the configuration settings
[ -n "$JENKINS_HOME" ] || { echo "JENKINS_HOME not configured in $JENKINS_CONFIG";
if [ "$1" = "stop" ]; then exit 0;
else exit 6; fi; }
|
可以看到 JENKINS_HOME
环境变量优先从配置文件 /etc/sysconfig/jenkins
中读取。
1
|
vi /etc/sysconfig/jenkins
|
1
|
JENKINS_HOME="/var/lib/jenkins"
|
转移
停止服务
1
2
|
# systemctl stop jenkins
# systemctl status jenkins
|
转移前
查看磁盘占用
1
2
3
4
|
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 50G 50G 693M 99% /
/dev/mapper/centos-home 873G 210G 663G 25% /home
|
修改配置
1
|
vi /etc/sysconfig/jenkins
|
找到 JENKINS_HOME
配置并修改,=
号前后不要有空格,这是 Bash 的语法:
1
2
|
# JENKINS_HOME="/var/lib/jenkins"
JENKINS_HOME="/home/jenkins"
|
转移
1
2
3
4
5
|
# time mv /var/lib/jenkins /home
real 13m8.768s
user 0m3.429s
sys 0m53.122s
|
使用 time
可以统计命令执行了多长时间。
转移后
查看磁盘占用
1
2
3
4
|
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 50G 36G 15G 71% /
/dev/mapper/centos-home 873G 224G 649G 26% /home
|
启动服务
1
|
# systemctl start jenkins
|
确认
完成所有工作后一定要确认是否真的全部完成。
命令行参数
1
2
3
4
5
6
7
8
9
|
# systemctl status jenkins
● jenkins.service - LSB: Jenkins Automation Server
Loaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled)
Active: active (running) since Fri 2020-10-09 13:13:06 CST; 1min 13s ago
Docs: man:systemd-sysv-generator(8)
Process: 5056 ExecStop=/etc/rc.d/init.d/jenkins stop (code=exited, status=0/SUCCESS)
Process: 6584 ExecStart=/etc/rc.d/init.d/jenkins start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/jenkins.service
└─6628 /etc/alternatives/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/home/jenkins -jar /usr/lib/jenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/wa...
|
通过 systemctl status jenkins
的输出可以看到 JENKINS_HOME
已更新。
系统信息
打开 Jenkins | 系统管理 | 状态信息 | 系统信息 确认环境变量 JENKINS_HOME
已更新
1
2
|
JENKINS_HOME
/home/jenkins
|
提示信息
由于剩余空间变多了,Jenkins 不再提示空间快满了。