jenkins - 迁移多分支管道而不重建所有分支
问题描述
我继承了一个真正古老的 Jenkins 服务器,它需要从操作系统上进行重建,而我正处于迁移我们构建的地步。然而,有一个多分支管道,特别是具有数十个功能/错误修复/等分支和构建需要大量时间和资源。当我最初在测试集群上设置它的多分支管道时,所有分支的初始构建都垄断了所有资源几个小时,直到我杀死它们。
我想要发生的是所有分支最初都导入但直到分支有另一个推送或 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
有没有办法改变项目本身的状态,或者有办法创建一个具有特定状态的“虚拟”构建?
解决方案
注意:如果您只想要工作而不关心构建历史,那么Job Import 插件可能更适合您的用例。
我在最后一天的大部分时间都在挖掘 Jenkins 源代码并打扰社区,但似乎没有一个好的方法来模拟这样的构建结果。但是,从技术上讲,可以简单地克隆全部或部分内容,/var/jenkins_home/jobs
从而将整个作业配置和历史记录全部提取出来。之后,您只需要重新启动 Jenkins,它就会识别新的配置。
虽然 Jenkins 社区中的一些人会正确地尝试警告您不要像这样克隆数据,但如果您在没有其他选择的情况下陷入困境,它可以在遵循以下警告的情况下工作:
- 首先在测试服务器上执行此操作。我不能保证我的经验是普遍的,结果可能会因您的特定构建和插件而有很大差异。
- 您的旧版本可能会引用您可能未在新服务器上安装的插件,或不同版本的插件。根据我的经验,詹金斯提出了关于这些的“旧数据”通知,并安装缺少的插件并重新启动修复了这些。也可以选择简单地丢弃数据。
推荐阅读
- aws-lambda - 我对 AWS Lambda 无服务器架构的理解是否正确?
- reactjs - react native 理解 textInput 组件
- phpmyadmin - 如何将 127.0.0.1.sql 文件导入本地主机
- c# - 使用命名管道将图像从 C++ 发送到 C# 应用程序
- php - 如何将 Soap Env API 响应转换为 PHP 数组或 JSON 数组
- macos - 无法转换“NSStoryboardSegue.Identifier”类型的值?到预期的参数类型“字符串”
- javascript - Firebase 函数 setInterval 和 clearInterval 分别调用
- java - 如何将此jsonarray解析为字符串或数组java
- python - django.core.exceptions.FieldDoesNotExist:BuildingAddress 没有名为“False”的字段
- angularjs - 使用 URL 状态参数中的 ID 传递整个值