背景:
使用 CLI 实用程序将某些状态保存在用户的主目录中 - 在 Linux 和 Unix 上使用"$HOME"
环境变量中的位置。该程序在 Jenkins 作业中的 shell 脚本中执行。每当运行的两个作业使用不同的程序输入时,就会发生冲突,因为程序的状态保存在$HOME
目录中。
尝试将实用程序与作业运行隔离,我想到了更改$HOME
环境变量,这似乎适用于有限的测试:
if [ -d "newhome" ]; then
echo "newhome dir already exists"
rm -r newhome
fi
mkdir newhome
old_home="$HOME"
HOME="./newhome"
# rest of shell script is here
HOME="$old_home"
可能有多个作业使用相同的实用程序,甚至同一作业的多个并发运行。这种变化会对其他环境、其他工作等产生什么影响吗?我应该使用chroot
还是其他方法?
答案1
除了脚本实际上删除了newhome
脚本中的静态字符串这一事实之外,我认为此解决方法没有严重问题。
newhome
如果有并发进程运行同一脚本,则删除该目录将是一个问题,因为该目录可能会被新进程删除,而旧进程仍在使用它。