我已将 Jenkins 设置为运行并发构建,因此我最终得到了工作区、工作区@2、工作区@3 等。如果 Jenkins 认为构建已完成,新的构建将覆盖工作区。有没有办法偶尔防止这种情况?例如,在我说之前不要覆盖 workspace@3。我们有各种场景,这将非常有用。
4 回答
您可以在构建结束时简单地归档完整的工作空间。然后在删除作业时将其删除。
去做这个:
- 添加构建后操作->“归档工件”
- 输入
**
为“要归档的文件”
如果您想让每次运行都可配置,您可以创建一个构建参数:
- (如果尚未启用,请启用“这是一个参数化构建”)
- 添加“选择参数”类型的参数并将其命名
ARCHIVE
- 选择是
<blank line>
and**
(字面意思是,在第一行放一个空白,然后第二行正好是**
. 没有引号) ${ARCHIVE}
在“归档工件”操作的“高级”设置中用作“要归档的文件”- 启用复选框“如果归档不返回任何内容,则不要失败构建”
您可以在孔管道中定义代理,因此詹金斯将仅使用“工作区”目录。
例如(这是一个不工作的例子):
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'
}
}
}
}
Jenkins 将当前工作空间存储为环境${WORKSPACE}
变量。只要您还将重命名的绝对目录路径设置为${WORKSPACE}
构建中的变量,您就可以在作业的任何时刻重命名它。现在什么时候做是你的选择。
另一种选择是安排下游作业并将其${WORKSPACE}
作为参数传递给该作业,以便您可以重命名它。
这个答案来的有点晚,可能对你的问题不是完全正确的答案,但这是我在为我的问题寻找解决方案时发现的第一张票。
我有两个文件夹 JobName_XXXX 和 JobName_XXXX@2 有问题。起初我的构建运行良好,我为另一个 Jenkins 节点添加了并行构建。删除并行构建后,我遇到了构建问题。它不再起作用了。我使用 blueocean 的管道编辑器来创建 Jenkinsfile。通过删除并行构建,我为每个步骤设置了“代理:任何”。它导致詹金斯在步骤内重置 scm。所以我不能使用前面步骤的构建结果并且构建崩溃了。 解决方案是从 steps/stages 中删除“agent: any”。可以有代理:任意;直接在管道内。使用管道编辑器,您不能删除那些“代理:任何”的东西——至少现在不能?所以手动编辑 Jenkinsfile。