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

时间:2020-04-02 19:32:37

标签: jenkins jenkins-pipeline jenkins-groovy

我继承了一个真正古老的Jenkins服务器,该服务器需要从OS向上进行重建,而我正要迁移我们的构建。但是,这里有一个多分支流水线,尤其是具有数十个功能/错误修正/等分支和构建,这需要大量的时间和资源。当我最初在测试集群上建立其多分支管道时,所有分支的初始构建会垄断所有资源数小时,直到我杀死它们。

我想发生的事情是最初导入了所有分支,但在没有其他推送或PR之前构建 not 。目前,我已经定义了“抑制自动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 个答案:

答案 0 :(得分:0)

注意:如果您只想要职位,而不关心构建历史,那么Job Import plugin可能会更适合您的用例。< / p>

我花了最后一天的大部分时间来挖掘Jenkins的源代码并打扰整个社区,但是似乎并没有一种好的方法来虚构这样的构建结果。但是, 从技术上来说可以简单地克隆/var/jenkins_home/jobs的全部或部分,这将完全覆盖作业配置和历史记录。之后,您只需要重新启动Jenkins即可识别新的配置。

Jenkins社区中的一些人会正确尝试警告您不要克隆这样的数据,如果您在没有其他选择的情况下陷入困境,则可以遵循以下警告进行工作:

  1. 首先在测试服务器上执行此操作。 我不能保证我的经验是通用的,结果可能疯狂取决于您的特定情况版本和插件。
  2. 您的旧版本可能会引用您可能未在新服务器上安装的插件或不同版本的插件。根据我的经验,Jenkins提出了有关这些“旧数据”的通知,并安装了丢失的插件并重新启动了这些插件。还可以选择简单地丢弃数据。