如何用Jenkins/Hudson创建真正的pipeline

发布时间:2019-08-15 19:19:44

如何用Jenkins/Hudson创建真正的pipeline

推荐回答

  第一步,我们先创建一个最简单的pipeline。所谓pipeline,顾名思义,就是一个流水线,由多个步骤(steps)组成。每走完一步,就来到下一步。用Build Pipeline Plugin就可以很方便地实现。  UnitTest是我们的初始任务。UnitTest结束之后,自动触发AC Test。如果通过了AC Test,团队可以有选择地部署到任意测试环境。  在配置这个插件时,最重要的就是选择Initial Job。    然后,在每一个step(job)中选择downstream step。可以是自动触发(Build Other Projects),也可以选择手动触发(Manually Execute Downstream Project)。  第二步  第一步中我们实现了一个流水线,但这个只是看上去的流水线而已。在工厂的流水线中,历经流水线上游到下游的,应该是同一个产品。但上例中显然不是,Unit Test和Acceptance Test所运行的可能是不同版本的代码。  要让几个step的代码运行在同一个版本,可以使用一个叫做Parameterized Trigger Plugin。  选择把Subversion revision传到下面的steps,则接下来的Steps都会checkout同一个版本的代码。但这个也有限制,就是这些Steps必须有相同的subversion URL配置。  另外,你应该还注意到我们还传了另一个参数:PL_BUILD_NUMBER。这个参数会另有用途。  除了希望保持相同版本,我们很可能希望重用upstream step生成的artifact。比如,在AC Test step会生成一些artifacts,这些artifacts经过测试之后,希望可以用于Deploy步骤。一方面,这会节省重新构建artifact的时间;另一方面,这些artifact是已经经过测试的,是可用的,而重新构建生成的却是未经测试的,可用与否未知。(虽然他们应该是一样的,但谁知道呢。。)我们可以使用ArtifactDepolyerPlugin实现。  第三步  在上例中,Unit Test和Acceptance Test虽然运行在同一个版本的代码之上,但它们并不真正工作在同一份代码中,而且它们之间没有复用任何东西。比如,Unit Test已经pile过代码,但在AC Test步骤中还是要Compile。如果我们希望几个step工作在同一份代码之上,而且后面的step可以享用前面step的成果,可以使用Clone Workspace SCM plugin:  在upstream step中,比如Unit Test,把整个workspace打包。在downstream step中,比如Acceptance Test中,clone workspace,如下图:  在上图配置中指定parent project: Unit Test。如果我们使用了Clone Workspace,那么就没必要在steps之间传递Subversion revision了。  第四步  通过前三步,我们已经实现了一个实际意义上的pipeline。但还可以做一些增强。  首先,我们可以使用统一的build number来指定一个pipeline上的所有step。需要用到Build Name Setter Plugin (以及它所依赖的Token Marco Plugin)来为所有steps指定相同的名字  另外,我们还可以加一个check来检查是否这些steps都运行在同一个workspace,这里需要用到Conditional BuildStep Plugin。可以使用的方法有多种,比如在upstream step中在workspace里生成一个跟此次build相关的特定名称的文件,然后在downstream step中使用这个plugin来检查这个文件是否存在,这样就可保证所有steps运行在同一份代码中了。
以上问题属网友观点,不代表本站立场,仅供参考!