8

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

4

4 回答 4

10

您可以在构建结束时简单地归档完整的工作空间。然后在删除作业时将其删除。

去做这个:

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

如果您想让每次运行都可配置,您可以创建一个构建参数:

  • (如果尚未启用,请启用“这是一个参数化构建”)
  • 添加“选择参数”类型的参数并将其命名ARCHIVE
  • 选择是<blank line>and **(字面意思是,在第一行放一个空白,然后第二行正好是**. 没有引号)
  • ${ARCHIVE}在“归档工件”操作的“高级”设置中用作“要归档的文件”
  • 启用复选框“如果归档不返回任何内容,则不要失败构建”
于 2015-10-23T16:36:51.083 回答
5

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

例如(这是一个不工作的例子):

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

在前面的示例中,stage 内的“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'
            }
        }
    } 
}
于 2019-04-12T18:56:16.733 回答
2

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

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

于 2015-10-22T14:16:37.917 回答
1

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

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

于 2018-08-06T12:20:31.127 回答