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

我目前在我的开发PC上使用Jenkins。 我把它安装在我的开发PC上,因为我对这个工具知之甚less。 所以我在我的开发PC上进行了testing。 现在,我觉得Jenkins是我在构build过程中的长期“伙伴”,并且希望将这个Jenkins“移动”到一个专用的服务器。

在此之前,我已经做了几个构build,并从每个构build存档的文物。 具体来说,内部版本号对我来说是非常重要的版本控制。

我怎样才能将我当前PC上的所有Jenkins信息导出到我的新服务器上?

继Jenkins维基之后 ,您将不得不:

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

编辑:JENKINS_HOME是默认在Linux安装位于~/.jenkins ,但要find它的位置,进入http:// your_jenkins_url /configuration页面,并检查第一个参数的值: Home directory ,这是JENKINS_HOME。

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

  1. 在源Jenkins服务器和目标Jenkins服务器上安装ThinBackup
  2. configuration备份目录(在pipe理Jenkins – > ThinBackup – >设置)

  3. 在Sourse Jenkins进入ThinBackup – >立即备份

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

  7. 如果你在源Jenkins上有用户身份validation,并且现在locking在目标Jenkins上,那么编辑Jenkins config.xml,将<useSecurity>设置为false,然后重新启动Jenkins。

这工作对我来说,从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 LocationJenkins URL被正确地分配给新的Jenkins服务器。

Jenkins服务器自动化:

步骤1:

设置一个存储库,将Jenkins主页[作业,configuration,插件等]存储在Git-lab本地或GitHub专用存储库中,并通过推送对Jenkins作业或插件等的任何新更改来定期更新。

第2步:

为Jenkinsconfiguration一个puppet主机组/angular色,用于启动新的Jenkins服务器。 做一个木偶配方的所有基本configuration,并确保它安装了最新版本的Jenkins,并为JENKINS_HOME设置了一个单独的目录/挂载

第3步:

使用上面的Jenkins-puppetconfiguration旋转一台新机器。 当所有东西都安装完成后,将Jenkinsconfiguration从Git Repository抓取/复制到Jenkins主目录并重新启动Jenkins。

步骤4:

转到jenkinsurl,pipe理jenkins – >pipe理插件和更新所有需要更新的插件。

完成

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

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

对于插件迁移:

  1. GET请求: {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> (其中,最新将获取最新版本的plugin_name)

    auth = (destination_jenkins_username, destination_jenkins_password)

    header = {crumb_field:crumb_value,"Content-Type":"application/xml”} (其中crumb_field = Jenkins-Crumb并使用API​​调用获取crumb值{DESTINATION_JENKINS_SERVER} / crumbIssuer / api / json

对于JOB迁移:

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

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

你可以参考JenkinsMigration.docx从这个urljenkins jenkinsmigration jenkinsrestapi