如何将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插件 :
- 在源Jenkins服务器和目标Jenkins服务器上安装ThinBackup
-
configuration备份目录(在pipe理Jenkins – > ThinBackup – >设置)
-
在Sourse Jenkins进入ThinBackup – >立即备份
- 从Jenkins源备份目录复制到Jenkins目标备份目录
- 在目标Jenkins转到ThinBackup – >恢复,然后重新启动Jenkins服务。
-
如果缺less一些插件或作业,请将备份内容直接复制到目标JENKINS_HOME。
-
如果你在源Jenkins上有用户身份validation,并且现在locking在目标Jenkins上,那么编辑Jenkins config.xml,将
<useSecurity>
设置为false,然后重新启动Jenkins。
这工作对我来说,从Ubuntu 12.04(jenkins版本1.628)到Ubuntu 16.04(jenkins版本1.651.2)。 我首先从存储库安装Jenkins 。
- 停止两个Jenkins服务器
-
从旧服务器复制
JENKINS_HOME
(例如/ var / lib / jenkins)到新的服务器。 从新服务器中的控制台:rsync -av username@old-server-IP:/var/lib/jenkins/ /var/lib/jenkins/
-
启动您的新Jenkins服务器
你可能不需要这个,但我必须
-
Manage Jenkins
和Reload Configuration from Disk
。 - 再次断开并连接所有从站。
- 检查在
Configure System > Jenkins Location
,Jenkins 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实例安装到另一个。
对于插件迁移:
- 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>
(其中,最新将获取最新版本的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迁移:
- 您可以使用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}上创build作业
我在python中创build了一个菜单驱动实用程序,要求用户select启动插件或jenkins迁移,并使用Jenkins REST API调用来执行此操作。
你可以参考JenkinsMigration.docx从这个urljenkins jenkinsmigration jenkinsrestapi