我有一个以这种方式执行的管道:
Stage 1 -----> Stage 2 ----> Stage4
clone repo | exec email
| results
--> Stage 3
exec
第1阶段,第2阶段和第3阶段都在docker映像中执行,它们都共享工作区的网络目录。
我的问题是,第3阶段启动时会失败,因为克隆的文件不存在。第3阶段创建了一个名为MyJobName@2
的新工作空间,它是空的。
我该如何解决?
并行启动Stage 3
时,jenkins compl
答案 0 :(得分:0)
您可以将多个步骤划分为一个阶段。然后,这些步骤将在Workspace上共享。
如果只有stage3可以通过电子邮件发送结果,则应使用存档工件,然后通过电子邮件发送结果。
答案 1 :(得分:0)
您可以分别设置每个阶段的工作空间,因此在您的示例中,阶段2和4将共享相同的工作空间。对于第3阶段,您必须设置一个不同的customWorkspace
代码如下:
stage('Pipeline Test')
{
stage('Test')
{
agent
{
node
{
customWorkspace 'workspace/justATest'
}
}
steps
{
//everything is executed in the workspace declared above
}
答案 2 :(得分:0)
好吧,以下是我的原始答案,但仍然失败。我的安装使用的是较旧的Docker版本,并且总是收到错误消息:
Docker version is older than 17.12, working directory will be /var/jenkins_home/workspace/ICP-bdm-Revisao not /var/jenkins_home/workspace/ICP-bdm-Revisao@2
我认为问题已经解决,但是当我开始使用更多并行阶段时,问题又回来了。
此问题要求3个解决方案失败:
我更棘手的解决方案是在执行每个shell命令之前,将每个命令更改为使用绝对路径,或更改为cd
到目录。
如果您有较新的泊坞窗,旧答案应该起作用:这是我非常棘手的解决方案。我无法阻止詹金斯为每个阶段创建不同的管道,所以我的解决方案是:
myWorkspace
的全局变量中dir (myWorkspace) {...}
内答案 3 :(得分:0)
我遇到了类似的问题。我有一个Jenkinsfile,其中each stage runs in its own containter和某些阶段并行运行。
主要区别在于,我使用了声明性管道,在git克隆之后为其定义了工作空间。这意味着工作空间MyJobName
(阶段2)和MyJobName@2
(阶段3)都包含具有最新提交的仓库。
这基本上已经解决了您所说的问题,但是我还需要更多。
在阶段4中,我需要阶段2和阶段3的结果。但是在阶段4中,只有工作空间MyJobName
可用,而没有工作空间MyJobName@2
。
为此,我使用了caching data for containers技巧。