执行shell命令框后,Jenkins的工作目录是什么?

最后发布: 2014-06-25 15:10:05


问题

我正在看詹金斯的工作并试图理解它。

我的Build部分中有一个Execute shell命令框:

> mkdir mydir 
> cd mydir
> 
> svn export --force https://example.com/repo/mydir .

当Jenkins完成执行该命令后,继续进行下一个构建步骤,它的工作目录是什么? workspece-root/workspace-root/mydir

下一步,我有Invoke顶级Maven目标 (仍然在Build部分)。

我真正想知道的是:为什么要成功执行?
是因为Jenkins在执行shell命令框后自动移回workspace-root/文件夹,还是因为下一个作业是“顶级”作业,因此Jenkins更改回workspace-root/

jenkins working-directory
回答

每个build step都是Jenkins产生的独立过程。 它们不共享任何内容,既不是当前目录,也不是在build step设置/更改的环境变量。 每个新的build step从父进程(运行Jenkins的进程)生成一个新进程开始的。

并不是詹金斯“退回”到$WORKSPACE 这是詹金斯丢弃前一届会议。


回答

我最近看到如果你打印CWD,我会得到Project_NAME。 例如D:\\ jenkins \\ workspace \\ My_Project

您可能正在运行的任何脚本都找不到。 因此,在开始编写脚本之前,我们可以做一个“CD路径”。


回答

Slav的解释非常好,我想通过提供一个真实世界的例子来补充它,它显示了多个Windows批处理命令的外观,即使它们在同一目录中工作:

命令1

REM #ensures that all npm packages are downloaded
cd "%WORKSPACE%"
npm install

命令2

REM #performs a prod-mode build of the project
cd "%WORKSPACE%"
ng build --prod --aot=true -environment=pp

因此,每个都确保当前工作目录指向当前项目目录。