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


154

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

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

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


6
我就是这么做的 我遵循了塞德里克·朱利安(CédricJulien)的回答,但是我发现,在Windows上,我必须先运行“修复”安装,然后Jenkins才能成功启动。维修后,一切都很好。
Smurph269

Answers:


175

跟随Jenkins Wiki,您必须:

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

JENKINS_HOME默认情况下位于~/.jenkins上安装Linux,但准确找到它的位置,走的HTTP:// your_jenkins_url /配置页,并检查第一个参数的值:Home directory; 这是JENKINS_HOME。


1
当我启动新的詹金斯时,我的节点正在显示,这是正确的。但是,当我单击某个节点上的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?
merlachandra

13
得到了我之前的评论中提到的问题的解决方案:转到管理Jenkins>配置系统。在“詹金斯位置”部分的“詹金斯URL”字段下的此处,更改URL使其指向新的詹金斯服务器。
merlachandra

3
确保也复制隐藏的文件夹!
mohi 2015年

7
哈哈+1的“不要忘记更改文档/链接到您的新詹金斯实例”
伊恩·史密斯

2
我在使用正确的文件权限和所有权时遇到问题,要解决该问题,我使用了以下Docker脚本(设置所有权/权限的部分):hub.docker.com/r/appcontainers/jenkins/~/dockerfile
marcinj

53

如果您的JENKINS_HOME目录太大而无法复制,并且您只需要设置相同的Jobs,Jenkins插件和Jenkins配置(并且不需要旧的Job工件和报告),则可以使用ThinBackup插件

  1. 在源和目标Jenkins服务器上都安装ThinBackup
  2. 都配置备份目录(在Manage Jenkins-> ThinBackup->设置中)

  3. 在Sourse Jenkins上,转到ThinBackup->立即备份

  4. 从Jenkins源备份目录复制到Jenkins目标备份目录
  5. 在目标Jenkins上,转到ThinBackup->恢复,然后重新启动Jenkins服务。
  6. 如果缺少某些插件或作业,请将备份内容直接复制到目标JENKINS_HOME。

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


2
为什么JENKINS_HOME目录太大而无法复制?我们在说什么尺寸?
wotanii

9
我的jenkins_home是100Gb左右,不想将其复制到新服务器上,因为它主要是被扔掉的东西
user230910

3
我的Jenkins_home是〜4TB,因此仅包含配置且没有构建历史记录或/ usercontent的精简副本很有用。
VolleyJosh

太棒了,插件...确实节省了很多时间..应对100 GB的存储不是一件容易的事
Swapnil Kotwal

11

这使我从Ubuntu 12.04(Jenkins版本1.628)迁移到Ubuntu 16.04(Jenkins版本1.651.2)。我首先从存储库安装了Jenkins

  1. 停止两个Jenkins服务器
  2. JENKINS_HOME从旧服务器复制(例如/ var / lib / jenkins)到新服务器。从新服务器的控制台中:

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

  3. 启动新的Jenkins服务器

您可能不需要这个,但是我不得不

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

新的詹金斯版本与旧版本的版本相同吗?
Jakub Czaplicki

@JakubCzaplicki-两个詹金斯都是1.6,但版本不完全相同。答案已更新。然后,我将Ubuntu 16.04更新为Jenkins 2.6,替换了jenkins.war文件,它运行良好。stackoverflow.com/questions/11062335/…–
卡图

完成上述操作并访问之后,/configureSecurity我得到了java.lang.AssertionError: InstanceIdentity is missing its singleton
maxisme

@maxisme,很晚,但是此线程表明您提到的问题与Java版本有关。issues.jenkins-ci.org/browse/JENKINS-46182
卡图

1

Jenkins服务器自动化:

第1步:

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

第2步:

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

第三步:

使用上面的Jenkins-puppet配置启动新机器。安装完所有组件后,将Jenkins配置从Git存储库中获取/克隆到Jenkins主页目录,然后重新启动Jenkins。

第4步:

转到Jenkins URL,管理Jenkins管理插件,然后更新所有需要更新的插件。

完成了

您可以使用Docker SwarmKubernetes自动缩放从节点。


1

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

对于插件迁移:

  1. GET request:{SOURCE_JENKINS_SERVER}/pluginManager/api/json?depth=1将为您提供安装了其版本的插件列表。
  2. 您可以发送带有以下参数的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
    

对于工作迁移:

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

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

您可以从此URL 引用JenkinsMigration.docx


尽管此链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。如果链接的页面发生更改,仅链接的答案可能会失效。
2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.