本篇主要分享对于Jenkins中Freestyle Project项目和pipeline项目的一些知识分享。如果我们的Jenkins中安装了中文插件,那么它们可能会被翻译为:
下面将会使用中文进行介绍这两种任务的区别。
如果你是刚开始接触Jenkins。那么了解这两个区别才能正确使用Jenkins。
通常我们如果完全新手,可能刚开始接触的都是Freestyle Project类型的任务。我们在新建任务的时候选择:构建一个自由风格的软件项目。就会创建了一个Freestyle project。
而它的特性就是,可以通过各种web表单,配置完整的构建步骤。示例如下:
自由风格的软件会分为以下几个步骤:
Delete workspace before build starts
(在生成前清空构建空间)
简单理解就是,是不是要清除掉上一次构建后,残存的各种文件和构建结果内容等等。(这个功能需要 Workspace Cleanup Plugin插件的支持。你如果没有安装那么就不会有这个选项)
例如:add timestamps to the Console Output
在构建任务的输出清单中显示时间(需要插件 Timestamper 的支持,如果没有安装该插件,就没有该选项)
例如调用Gradle
插件的支持,将源码拉取到得到项目进行构建。然后在task中配置Gradle的Tasks指令,进行项目编译。下图展示的是编译app
最终整个自由风格的项目就配置完毕了。中间每个步骤根据需求和使用的插件,可以进行扩展实现更多自动化的操作。
同时,我们如果在网络中搜索部分的方案时,发现对方介绍的菜单项在我们的Jenkins中不存在。那么应该就在于部分插件没有安装造成的。
自由风格更多的依赖各种插件,然后我们通过插件提供的各种配置项,进行配置。合理搭配插件最终来实现整个任务的构建和输出。
PS:一般新人接触Jenkins 的时候,比较多的使用上面的方式。还有一种方式就是通过流水线Pipeline实现的构建。
自由风格的项目创建和配置内容当我们配置完毕后,Jenkins会生成一个xml文件存储在项目隐藏目录下。
每次点击执行的时候,jenkins是通过读取该xml配置命令,按照步骤进行一步一步的命令读取并执行的。
如果使用过Jenkins 1 版本,那么大家可能接触的比较多的就是Freestyle Project。在Jenkins2 中Pipeline的角色得到了提高。
网上也有更多的教程是用来介绍Pipeline 流水线任务的构建。
PS:要想使用Pipeline流水线构建,必须安装有pipeline插件,否则创建任务的时候将会没有这个选项
有别于自由风格那6个配置项,流水线的配置项比较少。示例如下:
主要是分为以下几个步骤:
流水线创建是通过各种脚本命令来实现的,jenkins会将相关脚本内容转换为jenkinsfile文件进行执行。
同时,流水线功能也是Jenkins 2.0版本开始后的主推的功能。
流水线中的脚本内容分为两种:
如果没有能够理解,可以说声明式流水线就是上面自由风格软件中各种插件的命令式堆积方式。
脚本式流水线更像是一种脚本或编程语言,类似各种代码执行逻辑进行处理。
而声明式更像老版本中web表单中预定义配置项中出入关键信息,代表了特定的目标和预期行为。和web表单的实现方式类似。只是改为了命令的实现方式而已。
PS:我们可以在项目代码中配置jenkinsfile文件,让jenkins拉取项目代码后,自动执行相关的脚本命令。这个知识点将来会有文章进行介绍,这里简单提一下。
例如脚本式流水线的写法为:
node('Text'){
stage('build'){
echo 'Hello zinyan.com'
}
}
例如:声明式流水线的写法:
pipeline{
agent any
stages{
stage("build"){
steps{
echo "Hello zinyan "
}
}
}
}
PS: 不管是哪种脚本,它们的写法和语言方式和Groovy是一样的。只是可能有一些对外插件的调用,可以直接使用各种外部操作命令。
PS:以下内容来源于网络收集。优缺点和实际使用可能会有部分差异,但是整体上来说,应该差异不大。
脚本式流水线具有以下优点:
缺点也明显:
声明式流水线具有以下优点:
缺点也明显:
总的来说,我们可以仍然使用自由项目进行配置我们的jenkins任务,并执行构建操作。
但是jenkins 2.0版本之后官方更多的是推荐我们使用流水线Pipeline进行构建任务。因为它更灵活,更直观。很多时候我们找不到各种配置,或配置项目比较多的时候,在页面中上下滑动找各种选项。
而我们通过脚本方式,可以和编程一样,直观的实现我们的需求。
其次,如果想使用好Pipeline,那么我们需要弄明白一些的基本概念例如:系统system,主节点master,节点node,代理节点agent和执行器executor等。
我在前面的内容中分享过简单的pipeline搭建,只是实现了一串打印内容的输出。后面将会介绍更多的围绕流水线进行的内容。