当前位置: 首页 > 知识库问答 >
问题:

迁移多分支管道而不重建所有分支

祁承嗣
2023-03-14

我继承了一台真正古老的Jenkins服务器,需要从操作系统开始重新构建,我正准备将我们的构建迁移过来。然而,有一个多分支管道,特别是有几十个特性/错误修复/etc分支和构建,需要大量的时间和资源。当我最初在测试集群上设置其多分支管道时,所有分支的初始构建占用了所有资源数小时,直到我杀死它们。

我想做的是让所有分支最初都导入,但在分支再次推送或PR之前不会构建。目前,我已经应用了定义的“抑制自动SCM触发”策略,但一旦我删除它,Jenkins就会尝试构建所有分支。

我认为可行的解决方案是将每个分支的状态设置为“未构建”以外的状态,然后删除抑制策略。

我遇到了下面的Groovy脚本,它将更改特定构建的结果,但它似乎要求实际存在一个以前的构建来更改的状态。

import com.cloudbees.groovy.cps.NonCPS
import jenkins.model.*
import hudson.model.Result

@NonCPS
def getProject(projectName) {
    // CloudBees folder plugin is supported, you can use natural paths:
    // in a postbuild action use `manager.hudson`
    // in the script web console use `Jenkins.instance`
    def project = jenkins.model.Jenkins.instance.getItemByFullName(projectName)
    if (!project) {error("Project not found: $projectName")}
    return project
}

project = getProject('foo/bar')
build = project.getBuildByNumber(2443)
// build = project.getBuild(project, '2443')

build.@result = hudson.model.Result.SUCCESS
// build.@result = hudson.model.Result.NOT_BUILT
// build.@result = hudson.model.Result.UNSTABLE
// build.@result = hudson.model.Result.FAILURE
// build.@result = hudson.model.Result.ABORTED

资料来源:https://stackoverflow.com/a/45708131/1064767

有没有办法改变项目本身的状态,或者有没有办法创建一个具有特定状态的“虚拟”构建?

共有1个答案

钱旻
2023-03-14

注意:如果您只想要作业而不关心构建历史,作业导入插件可能会更整齐地适合您的用例。

最后一天的大部分时间里,我都在挖掘詹金斯的资料来源,让社区感到不安,但似乎没有一个好办法来捏造这样的构建结果。然而,从技术上讲,可以简单地克隆/var/jenkins_home/jobs的全部或部分内容,这将完全覆盖作业配置和历史记录。之后,你只需要重新启动Jenkins,这样它就能识别新的配置。

虽然詹金斯社区的一些人会正确地警告你不要克隆这样的数据,但如果你没有其他选择,它可以按照以下警告的方式工作:

  1. 首先在测试服务器上执行此操作。我不能保证我的经验是通用的,根据您的特定构建和插件,结果可能会大相径庭
  2. 旧版本可能会引用新服务器上可能没有安装的插件,或者不同版本的插件。根据我的经验,詹金斯提出了关于这些问题的“旧数据”通知,并安装了丢失的插件并重新启动修复了这些问题。还有一个简单的选择就是丢弃数据
 类似资料:
  • 我设置了一个简单的Jenkinsfile,它只响应了几个步骤。我在Bitbucket(git)和两个名为master和develop的分支上建立了一个新的回购。 当我提交一些东西要掌握时,两个分支都会检查并在jenkins中构建。开发分支的行为相同。 一旦有“提交到主”分支,是否可以限制只有主版本才能在Jenkins中构建?类似行为的发展?

  • 我对使用Jenkins文件和GIT插件的Jenkins多分支pipleline有一个问题。 问题是,每次向暂存分支推送都会触发master管道。所需的行为是,推送到暂存分支仅触发用于暂存的管道,而推送到主分支仅触发主管道 这是我的詹金斯档案 我将分享一些日志:这是主分支的日志 这是主分支的日志,但只有暂存有一个新的提交: 注意“已发现更改”,即使主分支上的头未更改 詹金斯·弗。2.190.1 Gi

  • 对于一个新项目,我想使用Jenkins CI的新管道功能。我们的Git存储库中有几个分支,应该以同样的方式进行测试。它还应该自动跟踪和处理新的分支。因此,我创建了一个多分支管道作业。但它的配置有两个问题: 1) 为了被Jenkins标记为有效,分行需要一个“Jenkinsfile”。如果这不存在,詹金斯将忽略该分支。有没有办法标记与模式匹配的所有分支,而不需要在其中包含此文件? 2) 每个分支都应

  • 我有一个场景,但我有两个项目(a和B),都在Jenkins中配置了多分支管道作业,问题是项目B依赖于项目a。 所以我发现有时候当我在项目A中签入代码时,我也需要在项目A构建后构建项目B。现在,在我开始调查管道构建之前,我将每个分支都有一个作业,然后在Jenkins中为相应的分支触发项目B的适当作业。 我想在Jenkins文件中设置什么,这样当ProjectA/develop执行时,它就会触发Pro

  • 现在多分支管道作业类型已经成熟,还有什么理由再使用简单的管道作业类型吗?即使您现在只有一个分支,考虑到未来多个分支的可能性可能是明智的,那么假设您将Jenkins管道存储在SCM中,那么为您的Jenkins管道使用管道作业类型与始终使用多分支管道作业类型的动机是什么?现在这两种作业类型之间是否存在功能平价?

  • 是否可以将多分支管道限制为一次只构建一个分支? 我有一个管道,它包含签出、构建、测试,然后部署的步骤。部署阶段在特定的机器上复制/执行一些文件,这些工作无法与其他分支作业并行完成。 我尝试过: 但这只限制了基于分支的并发,因此仍然有多个分支将并行运行。 此外,在常规非流水线Jenkins作业中,有一个选项复选框: “必要时执行并发生成” 但这在多分支配置中也不可用。 是否有其他配置来实现这一点,或