如何用Jenkins/Hudson创建真正的pipeline
1个回答
推荐于2016-05-14 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:117538
获赞数:517176
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。
向TA提问 私信TA
关注
展开全部
第一步,我们先创建一个最简单的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已经compile过代码,但在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运行在同一份代码中了。
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已经compile过代码,但在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运行在同一份代码中了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询