【问题标题】:Jenkinsfile ,by using sh, says No such file or directory, but it existsJenkinsfile,通过使用 sh,说没有这样的文件或目录,但它存在
【发布时间】:2019-08-30 16:38:46
【问题描述】:

我正在研究jenkins,试图将maven项目打包到war中,然后将其移动到之前启动的tomcat webapps目录(/opt/tomcat/latest/webpass),但它报告'没有这样的文件或目录' .

已经找出原因,但不知道为什么。詹金斯不使用与原始文件系统相同的文件系统?

这是我的故障排除:

1、我在我的linux服务器下/下创建了一个目录temp20190808

2、然后在jenkins文件中添加sh 'ls / -l',没有temp20190808,而且每个文件在ls形式中的描述与原文件有差异(详见下方)。

3、使用jenkins文件,我在/下创建一个文件为jenkinstmp2019,然后ls / -l,它就在那里,但是在rm之后创建jenkinstmp2019的代码,然后rebuild,ls / -l,@987654330 @ 不再存在,所以 jenkins 文件系统是一次性工作?

这里是第 1,2 点的​​代码阐述:

在我的 linux 服务器中,使用 ls / -l,有一个我刚刚创建的 tmp20190808。

total 24
lrwxrwxrwx.   1 root root    7 Jun 19 16:53 bin -> usr/bin
dr-xr-xr-x.   5 root root 4096 Aug  1 04:55 boot
drwxr-xr-x.  17 root root 2860 Aug  7 02:48 dev
drwxr-xr-x.  86 root root 8192 Aug  7 20:52 etc
drwxr-xr-x.   4 root root   46 Jul 12 08:12 home
lrwxrwxrwx.   1 root root    7 Jun 19 16:53 lib -> usr/lib
lrwxrwxrwx.   1 root root    9 Jun 19 16:53 lib64 -> usr/lib64
drwxr-xr-x.   2 root root    6 Apr 11  2018 media
drwxr-xr-x.   2 root root    6 Apr 11  2018 mnt
drwxr-xr-x.   5 root root   53 Jul 23 08:11 opt
dr-xr-xr-x. 101 root root    0 Aug  7 02:47 proc
dr-xr-x---.   7 root root  215 Aug  6 02:53 root
drwxr-xr-x.  28 root root  920 Aug  8 02:03 run
lrwxrwxrwx.   1 root root    8 Jun 19 16:53 sbin -> usr/sbin
drwxr-xr-x.   2 root root    6 Apr 11  2018 srv
dr-xr-xr-x.  13 root root    0 Aug  7 02:47 sys
drwxr-xr-x.   2 root root    6 Aug  8 01:50 temp1
drwxrwxrwt.  20 root root 4096 Aug  8 02:23 tmp
drwxr-xr-x.   2 root root   22 Aug  8 01:39 tmp20190808
drwxr-xr-x.  13 root root  155 Jun 19 16:53 usr
drwxr-xr-x.  20 root root 4096 Jul 12 07:36 var

在詹金斯中。

total 8448
drwxr-xr-x.   1 root root      19 Jun  9  2016 bin
drwxr-xr-x.   2 root root       6 May 30  2016 boot
-rw-------.   1 root root 8646656 Jun  9  2016 core
drwxr-xr-x.   5 root root     360 Aug  8 01:58 dev
drwxr-xr-x.   1 root root      66 Aug  8 01:58 etc
drwxr-xr-x.   2 root root       6 May 30  2016 home
drwxr-xr-x.   1 root root      45 Jun  9  2016 lib
drwxr-xr-x.   2 root root      34 Jun  8  2016 lib64
drwxr-xr-x.   2 root root       6 Jun  8  2016 media
drwxr-xr-x.   2 root root       6 Jun  8  2016 mnt
drwxr-xr-x.   2 root root       6 Jun  8  2016 opt
dr-xr-xr-x. 123 root root       0 Aug  8 01:58 proc
drwx------.   1 root root      33 Aug  8 01:58 root
drwxr-xr-x.   3 root root      30 Jun  8  2016 run
drwxr-xr-x.   2 root root    4096 Jun  8  2016 sbin
drwxr-xr-x.   2 root root       6 Jun  8  2016 srv
dr-xr-xr-x.  13 root root       0 Aug  7 02:47 sys
drwxrwxrwt.   1 root root      29 Jun  9  2016 tmp
drwxr-xr-x.   1 root root      30 Jun 10  2016 usr
drwxr-xr-x.   1 root root      41 Jun  9  2016 var

如您所见,它就像两个完全不同的 linux 服务器,但它是同一个。 所以我想知道詹金斯是否创建了一个临时虚拟文件服务器来执行它的工作,所以除了它自己的目录之外无法访问原始文件。

【问题讨论】:

  • Jenkins 没有创建虚拟文件系统或类似的东西,这感觉就像是在不同的节点上执行。我建议将“ls / -l”替换为“/bin/hostname”并查看返回的内容。
  • 非常感谢,通过搜索,我发现这也可能是与节点有关的问题。使用/bin/hostname 在 linux 服务器和 jenkins 之间显示不同的主机名,并且 jenkins 显示一个 id ebf8c40f8ed1 。现在至少我有正确的方向来解决问题,并且对 jenkins 有了更多的了解。让我感到困惑的是,我仍然在主节点中,自从安装 jenkins 后,对它的配置没有做任何改变。

标签: linux jenkins


【解决方案1】:

自己找出原因。 真正的原因是agent,我之前用过agent { docker { image 'XXX' } },它让jenkins在docker image上运行它的工作。然后我把它改成agent any,这样工作就会在部署jenkins的服务器上运行。

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多