Jenkins 2.x的核心能力是Pipeline as code。在Jenkins 1.x中,我们通过简单便捷的配置,可以快速完成基本CI、CD的Job创建和管理,但对于复杂的流程,Jenkins 1.x则无从下手。在软件的发布过程中,通常会有一整套复杂的流程,来支持从代码提交到最终的软件交付。通过Jenkins pipeline,我们可以用代码的方式,定义我们的工作流,从而在代码中编写工程的CI、CD业务逻辑。同时,Pipeline支持在不同节点运行不同的步骤,使得整个DevOps流程更加灵活。
Jenkins pipeline支持两种模式,一种是Declarative Pipeline,另一种是Scripted Pipeline。两种模式都遵循的是groovy语法,但在编写上会有差别。
Declarative Pipeline
Declarative Pipeline必须被包含在pipeline语句块中:
pipeline { /* insert Declarative Pipeline here */ }
一个完整的Hello World!示例如下:
pipeline { agent any stages { stage('Example') { steps { echo 'Hello World' } } } post { always { echo 'I will always say Hello again!' } } }
agent指定整个Pipeline或特定stage将在Jenkins环境中被执行的节点,如Jenkins 的master节点或某个cluster节点。
在Declarative Pipeline模式的代码中,可能会在一个stages{…}中声明一窜嵌套的stages{…}, 并以顺序执行。需要指出的是,一个stage{…}必须有且只有一个steps{…}, 或者parallel{…} 或者stages{…}。
post用来定义将在Pipeline结束或stage结束时运行的操作。支持的post有: always,changed,failure,success,unstable,
和aborted
。这些块允许在Pipeline运行或stage结束时执行步骤,具体取决于Pipeline的状态。
还可以在parallel
块中声明多个嵌套stage,这些stage将并行执行。需要注意的是一个stage有且只能有一个steps