2013-02-22 305 views
2

我有一个存储库中的代码。现在我想创建一个作业,它将从存储库构建代码并将其部署到两台服务器上。Jenkins:如何在两台服务器上构建和部署单个作业

现在我创建两个具有完全相同配置的作业。唯一的变化是它需要部署的服务器。

单个工作可以做到这一点吗?

+1

您是否可以在一份工作上制作后续作业以调用其他作业? – vikingsteve 2013-02-22 19:08:27

+0

重点是我不想保持两份工作。我不想两次构建相同的代码,因为它是相同的战争文件。我只想部署在两台服务器上。 – javaMan 2013-02-22 19:10:52

+0

然后你可以配置一个Jenkins构建并添加2个'任务'来完成部署。 – vikingsteve 2013-02-22 19:13:33

回答

2

我可以建议使用这个maven插件。您可以配置可以附加到正常的Maven作业的批处理任务(Maven目标或脚本)。

https://wiki.jenkins-ci.org/display/JENKINS/Batch+Task+Plugin

首先,你通常建立你的工作詹金斯工作。

然后,使用这个插件,您可以在同一个Jenkins作业上配置两个额外的任务,例如“Deploy-server-1”和“Deploy-server-2”。

构建作业后,单击“任务”按钮即可轻松运行部署任务。

所以这个过程是:

-> build 
    -> deploy server 1 
    -> deploy server 2 

如果我加入了对批量塔什插件的链接一看,他们有所谓的“释放”的单个任务。想象一下,你可以在它下面完成更多的任务,做你想做的任何事情。

你可能需要您的詹金斯服务器上的管理权限才能安装这个插件,如果它已经不存在......

0

您可以使用Copy Artifact Plugin,在那里你可以复制文物建一个项目到另一个。所以你只需要完成你所需要的工作,并且可以在其他工作中共享。

0

我解决了ant任务的类似问题 - 从build.properties文件获取服务器url作为输入参数。在我的情况下,有几个环境需要使用相同的脚本支持,每个环境需要1-2个服务器。

<target name="deploy.application"> 
    <groovy> 
    if (properties['app.server'] &amp;&amp; properties["app.server"] != "") { 
     ant.project.executeTarget('deploy.server1') 
    } 
    if (properties['app.server2'] &amp;&amp; properties["app.server2"] != "") { 
     ant.project.executeTarget('deploy.server2') 
    } 
    </groovy> 
</target> 
1

我解决了这个问题,添加了Flexible Publish插件,并且作为一个条件操作,使用Run:'Always'。现在可以在灵活发布条件操作中添加尽可能多的操作,并且所有这些操作可以是'将WAR/EAR部署到容器'。

+0

欢呼的队友! – 2016-08-05 11:08:24

1

您可以使用Node and Label parameter plugin部署到多个服务器。

添加要部署使用詹金斯节点代码的服务器:管理詹金斯>管理节点>新节点

一定要为每个节点添加一个标签,以便您可以将它们分组在一起并部署到该组。

创建一个新的自由式项目并检查该项目是参数化选项。添加一个参数并选择标签,并添加刚刚为您的服务器(节点)创建的标签。

从这里开始,每个构建步骤都会在每个标记节点中自行复制,因此您可以使用SCM插件,GitHub,GitLab等或直接从您的服务器获取存储库代码,这取决于您,代码将被部署在每个节点上。

请注意,如果您的代码需要编译,它将在远程服务器上编译。而且,每次将此构建部署到节点时,都会在构建队列中创建一个附加构建。

相关问题