如何将 Jenkins 从一台 PC 移动到另一台 PC

Posted

技术标签:

【中文标题】如何将 Jenkins 从一台 PC 移动到另一台 PC【英文标题】:How to move Jenkins from one PC to another 【发布时间】:2012-02-02 05:46:37 【问题描述】:

我目前在我的开发 PC 上使用 Jenkins。我将它安装在我的开发 PC 上,因为我对这个工具的了解有限;所以我在我的开发PC上对其进行了测试。现在,我对 Jenkins 作为我在构建过程中的长期“合作伙伴”感到满意,并希望将此 Jenkins “移动”到专用服务器。

在此之前,我已经完成了一些构建,并从每个构建中存档了工件。特别是,内部版本号对我来说对于版本控制非常重要。

如何将所有 Jenkins 信息从我当前的 PC 导出到我的新服务器?

【问题讨论】:

我刚做了这个。我按照 Cédric Julien 的回答中的步骤进行操作,但我发现在 Windows 上,我必须先运行修复安装,然后 Jenkins 才能在移动后成功启动。修复后一切正常。 【参考方案1】:

假设我们正在将 Jenkins LTS 从 PC1 迁移到 PC2(LTS 版本与升级相同)。 使用ThinBackUp插件实现Jenkins版本的迁移或升级,非常方便。

第 1 步:准备 PC1 进行迁移

管理 Jenkins -> ThinbackUp -> 设置 选择正确的选项和目录进行备份 如果您需要作业历史记录并且需要添加工件,请同时选择“Back build results”选项。

返回点击立即备份。

注意:此 Thinbackup 还将采用可选的插件备份。

检查 ThinbackUp 文件夹必须有一个包含当前日期和时间戳的文件夹。 (等待几分钟,可能需要一些时间。) 您已准备就绪,将其压缩并复制到 PC2 中的 PARTICULAR(将是“备份目录”)目录。 解压 ThinbackUp 压缩文件夹。 停止 PC1 中的 Jenkins 服务。

第二步: 在 PC2 中安装 Jenkins(使用 .war 文件或粘贴存档版本安装)。

使用命令sc create <Jenkins_PC2Servicename> binPath="<Path_to_Jenkinsexe>/jenkins.exe" 创建 Jenkins 服务 如果需要,在 PC2 中修改 JENKINS_HOME/jenkins.xml。 在 PC2 中运行 windows 服务 管理 Jenkins -> ThinbackUp -> 设置 确保将步骤 1 中的特殊路径作为 ThinBackup 设置中的备份目录。 ThinbackUp -> 恢复会给你一个下拉列表,选择正确的备份(用日期和时间戳标识)。

等待几分钟,您将获得最新的备份配置,包括 PC2 中的作业历史记录和插件。 如果 JENKINS_HOME/Jenkins.xml 中需要其他更改(来自不需要的 PC1 ThinbackUp),则需要手动进行此修改。

注意:如果您在 Jenkins 作业中使用 SCM 的数据库设置,那么您需要格外小心,因为所有 SCM 插件不支持借助 ThinbackUp 插件进行数据库设置。 例如如果您正在使用 PTC Integrity SCM 插件,并且某些 Jenkins 作业正在使用使用 Integrity 的数据库,那么它将创建一个目录 JENKINS_Home/IntegritySCM,ThinbackUp 在备份时不会包含此数据库。

解决方案:直接将这个JENKINS_Home/IntegritySCM文件夹从PC1复制到PC2。

【讨论】:

【参考方案2】:

如果您的 JENKINS_HOME 目录太大而无法复制,而您只需要设置相同的作业、Jenkins 插件和 Jenkins 配置(并且不需要旧的作业工件和报告),那么你可以使用ThinBackup Plugin:

    在源和目标 Jenkins 服务器上安装 ThinBackup

    在两者上配置备份目录(在 Manage JenkinsThinBackupSettings

    在源 Jenkins 上,转到 ThinBackup立即备份

    从Jenkins源备份目录复制到Jenkins目标备份目录

    在目标 Jenkins 上,进入 ThinBackupRestore,然后重启 Jenkins 服务。

    如果缺少某些插件或作业,请将备份内容直接复制到目标 JENKINS_HOME。

    如果您在源 Jenkins 上进行了用户身份验证,但现在锁定在目标 Jenkins 上,则编辑 Jenkins config.xml,将 <useSecurity> 设置为 false,然后重新启动 Jenkins。

【讨论】:

为什么 JENKINS_HOME 目录太大而无法复制?我们在谈论什么样的尺寸? 我的 jenkins_home 是 100Gb 左右,不想将它复制到新服务器,因为它大多是扔掉的东西 我的 Jenkins_home 约为 4TB,因此仅包含配置且没有构建历史记录或 /usercontent 的精简副本是有用的。 感谢 @halfer 指出这一点,但我相信 SO 最初是为技术答案而设计的。只要我的答案是明确的(代表点表明它是) - 在没有技术改进的情况下修复语法,即使不是滥用也是一件麻烦事。 我将它回滚到固定版本。它进行了许多非装饰性的修复并提高了可读性。请不要在没有充分理由重新引入错别字的情况下回滚。谢谢。【参考方案3】:

有时我们可能无法访问 Jenkins 机器来将文件夹直接复制到另一个 Jenkins 实例中。所以我编写了一个菜单驱动的实用程序,它使用 Jenkins REST API 调用将插件和作业从一个 Jenkins 实例安装到另一个实例。

插件迁移:

    GET 请求:SOURCE_JENKINS_SERVER/pluginManager/api/json?depth=1 将为您提供与其版本一起安装的插件列表。

    您可以发送带有以下参数的 POST 请求来安装这些插件。

    final_url=`DESTINATION_JENKINS_SERVER/pluginManager/installNecessaryPlugins`
    
    data=`<jenkins><install plugin="PLUGIN_NAME@latest"/></jenkins>` (where, latest will fetch the latest version of the plugin_name)
    
    auth=`(destination_jenkins_username, destination_jenkins_password)`
    
    header=`crumb_field:crumb_value,"Content-Type":"application/xml”` (where crumb_field=Jenkins-Crumb and get crumb value using API call DESTINATION_JENKINS_SERVER/crumbIssuer/api/json
    

对于工作迁移:

    您可以使用 REST 调用 SOURCE_JENKINS_URL/view/All/api/json 获取安装在 SOURCE_JENKINS_URL 上的作业列表 然后您可以使用作业 URL SOURCE_JENKINS_URL/job/JOB_NAME 从 SOURCE_JENKINS_URL 上的作业中获取每个作业 config.xml 文件。 使用此 config.xml 文件在 DESTINATION_JENKINS_URL 上发布 XML 文件的内容,这将在 DESTINATION_JENKINS_URL 上创建一个作业。

我在 Python 中创建了一个菜单驱动的实用程序,它要求用户启动插件或 Jenkins 迁移并使用 Jenkins REST API 调用来执行此操作。

您可以从此网址引用JenkinsMigration.docx jenkinsjenkinsmigrationjenkinsrestapi

【讨论】:

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生变化,Link-only 的答案可能会失效。【参考方案4】:

Jenkins 服务器自动化:

第 1 步:

设置一个存储库以将 Jenkins 主页(作业、配置、插件等)存储在 GitLab 本地或 GitHub 私有存储库中,并通过推送对 Jenkins 作业、插件等的任何新更改来定期更新。

第 2 步:

为 Jenkins 配置一个 Puppet 主机组/角色,可用于启动新的 Jenkins 服务器。在 Puppet 配方中进行所有基本配置,并确保它安装最新版本的 Jenkins 并为 JENKINS_HOME 设置单独的目录/挂载。

第 3 步:

使用上面的 Jenkins-puppet 配置启动一台新机器。安装完所有内容后,将 Jenkins 配置从 Git 存储库抓取/克隆到 Jenkins 主目录并重新启动 Jenkins。

第 4 步:

转到 Jenkins URL,Manage JenkinsManage Plugins 并更新所有需要更新的插件。

完成

您可以使用Docker Swarm 或Kubernetes 来自动扩展从节点。

【讨论】:

【参考方案5】:

按照Jenkins wiki,您必须:

在新服务器上安装新的 Jenkins 实例 确保新旧 Jenkins 实例均已停止 归档旧 Jenkins 实例的 JENKINS_HOME 的所有内容 将存档解压到新的 JENKINS_HOME 目录中 启动新的 Jenkins 实例 不要忘记将文档/链接更改为新的 Jenkins 实例 :) 不要忘记更改新 Jenkins 文件的所有者:chown -R jenkins:jenkins $JENKINS_HOME

JENKINS_HOME 在 Linux 安装中默认位于 ~/.jenkins,但要准确找到它的位置,请转到 http://your_jenkins_url/configure 页面并检查第一个参数的值:Home directory;这是 JENKINS_HOME。

【讨论】:

当我启动我的新 jenkins 时,我的节点显示出来了,这是正确的。但是当我点击某个节点时,那里的 URL 指向旧 jenkins,如下所示: 从从属命令行运行:javaws old-jenkins-server:8080/computer/slaveMachine1/slave-agent.jnlp 或者如果从属是无头的:java -jar slave.jar -jnlpUrl old-jenkins-server:8080/computer/slaveMachine1/slave-agent.jnlp 现在我应该怎么做让每个节点的这些 URL 指向 new-jenkins-server? 得到了我之前评论中提到的问题的解决方案:转到管理 Jenkins > 配置系统。在“Jenkins 位置”部分的“Jenkins URL”字段下,更改 URL 以将其指向新的 jenkins 服务器。 确保也复制隐藏文件夹! 哈哈 +1 “不要忘记更改文档/链接到您的新 Jenkins 实例” 我在正确的文件权限和所有权方面遇到了问题,为了解决这个问题,我使用了这个 docker 脚本(设置所有权/权限的部分):hub.docker.com/r/appcontainers/jenkins/~/dockerfile【参考方案6】:

这对我从 Ubuntu 12.04(Jenkins 版本 1.628)迁移到 Ubuntu 16.04(Jenkins 版本 1.651.2)很有帮助。我先installed Jenkins from the repositories。

    Stop both Jenkins servers

    JENKINS_HOME(例如/var/lib/jenkins)从旧服务器复制到新服务器。从新服务器中的控制台:

    rsync -av username@old-server-IP:/var/lib/jenkins/ /var/lib/jenkins/

    Start your new Jenkins server

你可能不需要这个,但我必须

Manage JenkinsReload Configuration from Disk。 断开并重新连接所有从站。 检查Configure System &gt; Jenkins Location 中的Jenkins URL 是否已正确分配给新的Jenkins 服务器。

【讨论】:

新的 Jenkins 和旧的版本一样吗? @JakubCzaplicki - 两个 Jenkins 都是 1.6,但版本不完全相同。答案已更新。然后我将 Ubuntu 16.04 更新为 Jenkins 2.6,替换了 jenkins.war 文件,它运行良好。 ***.com/questions/11062335/… 完成上述操作并访问/configureSecurity我得到java.lang.AssertionError: InstanceIdentity is missing its singleton @maxisme,迟到了,但这个帖子表明你提到的问题与 java 版本有关。 issues.jenkins-ci.org/browse/JENKINS-46182

以上是关于如何将 Jenkins 从一台 PC 移动到另一台 PC的主要内容,如果未能解决你的问题,请参考以下文章

从一台 PC 到另一台 PC 的存储过程调用不一致

如何将 redis 数据库从一台服务器移动到另一台服务器?

如何将 redis 数据库从一台服务器移动到另一台服务器?

如何将弹性数据从一台服务器传输到另一台服务器

将所有内容从一台服务器移动到另一台服务器

如何将推送通知从一台 iPhone 设备发送到另一台设备? [关闭]