2017-07-24 96 views
0

公司,我对正在评估詹金斯2.71的工作,特别是管道蓝海插件相关的2个项目。我们已经测试了GoCD,我们需要像在GoCD这样一个管道自动从其他两个管道获取工件的方式(以他们每个人的最后一个成功结果为例),这里是我们的情况。管道使用的文物由相同的Git分支名称

我们这些初始管道(建立&运行测试),这反映了2个项目:

  • 前端,〜15分钟
  • 后端,〜10分钟

我创建了一个名为的流水线配置(〜1分钟),例如一个名为的参数名为,该参数将后端和前端文件放在一起,然后应用特定的客户特定配置和自定义,并生成可部署的工件。我可以并行执行此项工作,而不是“客户名称”,以便为每个客户一次创建所有工件,并将其分离到不同的目录中。

下一个管道将部署在为每个客户分开的不同测试服务器上。这可能是也同样配置管道的一部分,我们还是要看看如何把东西放在一起在詹金斯...

理想情况下,我需要配置管道是自动触发(或还需要)在每个前端或后端成功之后并将这两个管道中最后一个成功的工件作为输入,但不仅仅是最后一次成功构建,我们需要依赖于依赖git分支名称

E.g.我们有:

后端分支:

  • 发布/ 2017.2

前端设有分公司:

  • 发布/ 2017.2

在管道编辑器,我发现了一个构建触发选项,并进行如下设置:生成后其他项目的构建>项目看:前端,后端>检查触发只有建立稳定或更好在我的测试环境中充满故障即使构建不稳定也会触发

进一步搜索,我发现Copy Artifact Plugin

但现在最大的问题,如何与相同的git分支名获取这些管道上一次成功的假象?

因为我们不想混合例如后端版本为“release/2017.2”,前端为“master”,它必须找到具有相同关系或参数的最后一个成功版本,或者任何你想要调用的版本,在我们的例子中,关联是git分支名称。

有没有可能做到这一点?如果是,如何?

复制神器插件似乎在自由式项目中工作。它会在管道中工作吗?这也是一个问题......

感谢

+0

是的,这可以做到。当我有更多时间时,我会尝试提供更详细的答案,但请看一下'copyArtifact'函数。另外,当您在Pipeline项目上时(左侧导航栏上有一个Pipeline Syntax链接)(您可能必须已经在配置页面上,我记不起手),详细说明如何进行这些操作东西的。 – Kdawg

回答

0

是,复制神器插件确实在两个自由泳和管道项目工作;管道使用我在评论中引用的copyArtifact函数。请注意,如果您转到管道语法链接,它是隐藏的:您必须首先从下拉列表中选择"step: General Build Step",然后它会为您提供复制工件管道命令构建器。

我打算假设您的frontendbackend项目是作为多分支管道构建的,因为这可能最容易维护,因此您不必为每个版本创建新项目。您可以通过参考<project name>/<branch name>来引用这些项目(有时我必须用%2f代替/,我想主要是在自由式项目中)。然后,您可以将您的configure项目设置为参数化构建(流水线或自由式),例如使用字符串参数PROJECT_BRANCH_NAME。然后把在你的前/后端工程管线脚本以下触发您configure项目的建设

build job: 'configure', parameters: [[$class: 'StringParameterValue', name: 'PROJECT_BRANCH_NAME', value: ${env.BRANCH_NAME}]]

那么你就应该能够使你configure项目frontend/%PROJECT_BRANCH_NAME%backend/%PROJECT_BRANCH_NAME%(或${env.PROJECT_BRANCH_NAME}中引用一个管道脚本)在复制工件时。

另外,是否有一个特别的原因,你为什么评估特别是詹金斯2.7? 2.7现在已经有一年了,从那时起就有一些新的LTS发布。我建议保持合理的最新,除非你知道你想要2.7的特定原因。

+0

谢谢,明天我会在这工作!关于jenkins版本,我很困惑,我习惯了SEMVER,所以我认为它是2.7.0,但它是** 2.70 **,我在一个星期前下载它,今天已经更新到2.71 :)我也编辑过避免混淆的问题......是的,我们可能会在前端放置一个Jenkins文件,并在后端放置一个文件。 – firepol

+0

你的回答真的帮了我很多,谢谢。我只是需要避开/编码问题和变量名称......我必须使用'value:env.BRANCH_NAME'(而不是* $ {env.BRANCH_NAME} *,no * $ {} *)。 另外我还需要创建一个额外的变量:'def branchname =“$ {PROJECT_BRANCH_NAME}”。replace(“/”,“%2f”)'因为它没有被上游管道正确传递。这似乎是一个已知的问题... 同样在copyArtifact步骤中,我不得不使用:'projectName:“前端/ $ {branchname}”'(而不是*前端/%PROJECT_BRANCH_NAME%* - * %% * don' t工作) – firepol

+0

Kdawg:我有一个关于这个设置的新问题,也许你可以帮我吗? https://stackoverflow.com/questions/45377411/jenkins-copyartifact – firepol