保留Jenkins工作区

时间:2015-10-22 13:55:32

标签: jenkins jenkins-workflow

我让Jenkins设置为运行并发构建,因此我最终得到了工作区,工作区@ 2,工作区@ 3等。如果Jenkins认为构建已完成,则新构建将覆盖工作区。有没有办法偶尔防止这种情况?例如。在我说之前,不要覆盖工作区@ 3。 我们有各种各样的情况,这将是非常有用的。

4 个答案:

答案 0 :(得分:5)

您可以在构建结束时简单地归档整个工作区。删除作业后,它将被删除。

要做到这一点:

  • 添加构建后操作 - > "存档工件"
  • 输入**作为"要归档的文件"

如果要在每次运行中进行可配置,可以创建构建参数:

  • (启用"这是参数化构建"如果尚未启用)
  • 添加类型"选择参数"的参数并将其命名为ARCHIVE
  • 选项为<blank line>**(字面意思是,第一行是空白,第二行是**。没有引号)
  • 使用${ARCHIVE}作为&#34;要归档的文件&#34; in&#34; Advanced&#34;设置&#34;归档文物&#34;动作
  • 启用复选框&#34;如果归档没有返回任何内容,请不要失败构建&#34;

答案 1 :(得分:0)

Jenkins将当前工作空间存储为环境${WORKSPACE}变量。 只要您还将重命名的绝对目录路径设置为构建中的${WORKSPACE}变量,您就可以在作业的任何时刻重命名它。何时这样做是你现在的选择。

另一种选择是安排下游作业并将${WORKSPACE}作为参数传递给该作业,以便您可以重命名。

答案 2 :(得分:0)

这个答案来得有点晚,可能对您的问题不是完全正确的答案,但这是我在寻找问题的解决方案时发现的第一张票。

我在拥有两个文件夹JobName_XXXX和JobName_XXXX @ 2时遇到问题。 最初,我的构建工作良好,并为另一个Jenkins节点添加了并行构建。删除并行构建后,我遇到了构建问题。它不再工作了。 我使用blueocean的管道编辑器来创建Jenkinsfile。通过删除并行构建,我为每个步骤设置了“ agent:any”。它导致詹金斯在步骤内重置scm。因此,我无法使用先前步骤的构建结果并使构建崩溃。 解决方案是从步骤/阶段中删除“ agent:any” 。可以有代理人:任何;直接在管道内部。使用管道编辑器,您无法删除那些“代理:任何”东西-至少现在不是吗?因此,请手动编辑Jenkinsfile。

答案 3 :(得分:0)

您可以在Hole管道中定义代理,因此jenkins将仅使用“工作区”目录。

例如(这是“不工作”示例):

pipeline {
    agent any 
    environment {
        // Environment variables
    }    
    stages {
        stage('Clear dir') {
            steps {
                deleteDir()
            }
        }
        stage('Make checkout') {
            agent any    // **THIS IS WRONG!!!!** 
            steps {
                echo 'Making checkout'
            }
        }
    } 
}

在前面的示例中,舞台内部的“ agent any”将允许jenkins创建“ workspace @ 2”文件夹。

为防止这种情况,请仅将代理保留在管道中。 正确的例子:

pipeline {
    agent any   // This is right! leave only this mention of agent 
    environment {
        // Environment variables
    }    
    stages {
        stage('Clear dir') {
            steps {
                deleteDir()
            }
        }
        stage('Make checkout') {
            steps {
                echo 'Making checkout'
            }
        }
    } 
}