我在研究jenkins,试图打包一个maven项目到war,然后将它移动到之前启动的tomcat webapps目录(/opt/tomcat/latest/webpass),但是它报告'No such file or directory' .
已经找出是什么原因造成的,但不知道为什么。 Jenkins 不使用与原始文件系统相同的文件系统?
这是我的故障排除:
1、我在我的 linux 服务器的 /
下创建一个目录作为 temp20190808
。
2、然后在jenkins文件中添加sh 'ls/-l'
,没有temp20190808
,并且ls形式的各个文件的描述与原创(下面有详细介绍)。
3、使用 jenkins 文件,我在 /
下创建一个文件作为 jenkinstmp2019
,然后 ls/-l
,它就在那里,但是之后rm创建jenkinstmp2019
的代码,然后rebuild,ls/-l
,jenkinstmp2019
已经没有了,所以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
在 Jenkins 。
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 是否创建了一个临时虚拟文件服务器来执行它的工作,所以除了它自己的目录之外无法访问原始文件。
最佳答案
自己找原因。
真正的原因是 agent
,我之前使用过 agent { docker { image 'XXX' } }
,这使得 jenkins 在 docker image 上运行它的工作。然后我将它更改为 agent any
,因此作业将在部署了 jenkins 的服务器上运行。
关于linux - Jenkinsfile ,通过使用 sh,说没有这样的文件或目录,但它存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57404513/