如何在Jenkins中克隆一个任务?

283

Jenkins 已经安装了 Gerrit 插件,这样当我们向 Gerrit 提交代码时,Jenkins 会执行构建操作,如果构建成功,则会验证在 Gerrit 中的修改。如果构建失败,则不进行验证。我理解这是通过在 Jenkins 中设置任务实现的。现在我们创建了一个新的分支 (git),我想克隆指向其他分支的现有任务,以便在每次提交时执行相同的工作流程和构建。请问如何克隆这些任务?我似乎无法通过 UI 完成此操作,甚至找不到通过 UI 列出任务的方法。


10
在“新工作”页面中,你应该可以看到“复制现有工作”选项。请参考 https://dev59.com/0XA75IYBdhLWcg3wubun。 - nofinator
12个回答

215

复制现有作业,请访问 http://your-jenkins/newJob 并使用“复制现有作业”选项。输入现有作业的名称 - Jenkins 将验证其是否存在。

Jenkins 前页的默认选项卡应列出所有现有作业,但也许您的前任删除了该选项卡。您可以从 http://your-jenkins/newView 创建列出所有作业的新选项卡。


3
请注意,在复制现有工作时,您需要提供名称(不编码为URL访问时的名称),因此,如果工作名称中有空格,则会保留这些空格。简而言之,只需输入工作的原始“名称”,不要添加其他内容。 - Yauhen
安装了ez-template插件后,“复制现有作业”应用于模板或使用模板的作业将创建一个依赖于该模板的新作业。如果您实际上想要一个独立的副本,那么您可以删除“使用另一个作业作为模板”的配置。 - user598656

171

您可以克隆一个作业:

  1. 点击“新项目”链接
  2. 为您的作业取一个新名称
  3. 选择单选按钮“复制现有项目”
  4. 给出您想要克隆的作业名称
  5. 点击“确定”

最后,您就拥有了一个新的作业,它反映了您克隆的作业的所有功能。


139

Jenkins 2.9

  1. 点击Jenkins > 新建项目

    Jenkins New Item

  2. 输入项目名称 - 例如 "MY_CLONE"

    Enter an item name

  3. 指定来源 (从复制的任务) > 确定

    当你开始输入名称时,现有值将被找到。注意,这是区分大小写的。

    Copy from OK

  4. 如果您要保留默认值,请单击保存

  5. 现在两个任务都在同一个位置中:

    View jobs


5
图片胜过千言万语。我找不到那个小下拉框。谢谢(Mulțumiri) - michaelok

57

新项目> 项目名称 = abc > 选择 从已经存在的工作名称复制,而不是使用 自由风格工作

如果你在想要从目录中复制的文件夹内部,则使用 ../


2
感谢提到 ../ - Satevg
我希望有一个选项,可以在保存新工作时不复制不存在的分支和标签,逐个删除它们需要很长时间。我只想复制工作并设置不同的存储库。 - Jaroslav Daníček

17
若想将 Jenkins 项目复制到不同的子文件夹中,请创建新项目并使用“从已有项复制”选项。新项目将会被克隆到相同的目录中,然后使用移动选项将其移动到所需的目录中。

2
这是我使用的。仅仅将其复制到相同的文件夹中通常是不够的。谢谢! - donmartin

16

上面的所有回答都很好。但是如果您已经为您的作业创建了“文件夹”,那么情况稍有不同。

点击您想要创建新作业的文件夹。然后在左侧菜单中单击“新建项目”。现在,您的“新作业”URL将如下所示(假设您正在“my-folder”下创建新工作):

http://my-jenkins:8080/job/my-folder/newJob

输入项目名称 下,输入您想要的新作业名称。 然后使用底部的 从复制 文本框。输入源作业的作业路径。

例如,如果您的源作业位于文件夹 src-folder 下,作业名称为 src-job,则需要在“从复制”框中输入 src-folder/src-job

希望这可以帮助您。


我仍在努力寻找一种跨文件夹结构复制作业的方法:Jenkins为每个新项目添加文字“job”,例如,我有一个作业位于http://localhost:8080/job/x/job/y/job_1,其中x和y是文件夹,job_1是真正的作业。我该如何将此作业复制到http://localhost:8080/job/x/job/z/job_1?我尝试了所有源作业的引用,但没有成功。 - Heinz
1
转到 localhost:8080/job/x/job/y/job_1。在该页面上,您应该看到 Full project name。尝试在指定源时使用它。 - Bhushan
如果您在同一级别上有2个文件夹folder1folder2,并且您想将folder1\job1复制到folder2\job1,则可以在文件夹folder2中创建一个新项目,然后使用..返回文件夹结构并复制../folder1/job1 - DRz

13

在我的情况下,我需要将一个任务(job)从一个 Jenkins 实例复制到另一个。

所以首先我在旧的 Jenkins 目录结构下查找(任务/目录名称;同时注意到 config.xml),然后在新的 Jenkins 目录结构下创建了一个同名/同任务的目录,并将 config.xml 复制到这个新创建的目录中。

然后,在“管理 Jenkins”下,我点击“从磁盘重新加载配置”。就是这样。


感谢您提供“从磁盘重新加载配置”的提示! - Aliza
1
是的,当我需要批量复制多个项目时,可以像这样操作,在“从磁盘重新加载”之前,您还可以在CLI中执行一些必要的手动操作,例如在config.xml中搜索/替换某些参数、文本片段等。请注意,包含config.xml的目录名称是作业的名称(因此,如果您需要创建新作业而不像Rohit那样,请给它一个不同的名称)。 - RAM237
我认为,在你的文件夹中有多个层级和许多作业时,这是最好的选择。 - cabreracanal

10
您还可以使用复制项目链接插件。这将在您的项目左侧面板上添加一个链接: 以下屏幕会要求输入新的工作名称:

3
创建一个新项目,然后找到复制现有项目的选项,只需输入你当前工作的名称,就能得到一个相同的项目副本来进行工作。

1
我无法从子文件夹复制Jenkins作业。 copy from选项没有显示我要查找的建议。如果不使用建议,复制作业名称将无法正常工作。
因此,如果您想从外部文件夹创建作业,则需要先在子文件夹中创建作业,然后将其移动到需要放置它的不同文件夹中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接