devops Pipeline Doc 中文版-1-Getting-Started-With-Pipeline

rocl · December 15, 2017 · Last by rocl replied at September 13, 2018 · 4050 hits

对应英文版请参见:https://jenkins.io/doc/book/pipeline/getting-started/
本系列主贴直达:https://testerhome.com/topics/11265

前言(笔者自己添加部分)

最好的资料莫过于新版官方文档,旧文档不再维护,旧文档请参见这里
所以本文其实是翻译并实践学习pipeline,对应的pdf文档,已上传到csdn

本文直接从Pipeline开始,如果对Jenkins不熟悉,请参见Jenkins官方文档或者本系列的第一章Installing Jenkins。

Pipeline

本章将会学习Jenkins Pipeline的所有特性,从运行Pipeline到写Pipeline代码,甚至扩展到Pipeline本身。

本章可以被Jenkins各个水平的用户使用,但是初学者可能要参考下本书”Using Jenkins”的章节去理解本章的一些专有名词。

如果还没有熟悉最基本的Jenkins技术和特点,请从”Getting Started with Jenkins”开始。

What is Jenkins Pipeline?

Jenkins Pipeline(或者简单用一个大写字母P代替”Pipeline”)是一套插件,这套插件支持实现和整合持续集成pipelines(continuous delivery pipelines)到Jenkins中。

持续集成Pipeline (continuous delivery pipelines)是一个程序自动进行的过程, 用您的用户和客户的版本控制权获取软件。对软件的每次更改(在源代码管理中提交)经过一个复杂的过程, 用它的方式发布软件(release)。这个过程包括以一个可靠地可重复的方式去构建软件,就像通过测试和发布(deployment)的多个步骤去构建(build)软件过程一样。

Pipeline提供一套可扩展的工具集,用代码去模型化简单到复杂的(simple-to-complex)发布pipelines,代码使用Pipeline Domain Specific Language(DSL)语法。

通常, Jenkins Pipeline的定义被写入文本文件 (称为 Jenkinsfile),文件被放到项目的源代码管理存储库中[3: Source Control Management]。这是Pipeline代码(Pipeline-as-Code)的基础;把持续集成作为应用的一部分用版本控制,并且像其他代码一样可以review。创建Jenkinsfile有很多好处:

  • 自动为所有的分支和pull requests创建Pipelines
  • 在Pipeline中进行代码审查和迭代(review/iteration)
  • Pipeline的审核和跟踪
  • Pipeline唯一的真相源 [4: en.wikipediaorg/wiki/Single_Source_of_Truth],可以由项目的多个成员查看和编辑。 定义Pipeline的语句,要么在web UI中,要么在一个Jenkinsfile文件中,一般认为最好的体验是,定义Pipeline在Jenkinsfile文件中,并且放到源代码版本控制中(例如git,svn等)。 这是一个Jenkinsfile文件例子:

① agent表明Jenkins要为Pipeline的这部分分配一个执行器和工作空间。
② stage表明是这个Pipeline的一个stage。
③ steps这个stage将要运行的一个步骤。
④ sh执行给与的shell语句。
⑤ junit是一个Pipeline步骤,Junit插件提供用来搜集测试报告。

Why Pipeline?

Jenkins基本上是一个自动化引擎, 它支持许多自动化模式。Pipeline添加了一套强有力的自动化工具集到Jenkins,支持从简单持续集成到综合持续集成的用例,到Pipeline。通过将一系列相关任务模型化,用户能充分利用Pipeline许多特性的优势。

  • Code:Pipeline是用代码实现,能做版本控制,可以给团队编辑/检查/迭代Pipeline的能力。
  • Durable:Pipeline可以在计划的和未计划的Jenkins主机重启中不受影响。
  • Pausable:Pipeline在继续运行之前,可以选择停止/等待输入或者批准。
  • Versatile:Pipeline能满足现实世界复杂的持续集成需求,包括并行执行fork/join/loop。
  • Extensible:Pipeline插件支持定制化的扩展到它自己的DSL[2: Domain-Specific Language]。

虽然Jenkins一直允许基本形式的链接自由式Jobs[5: Additional plugins have been used to implement complex behaviors utilizing Freestyle Jobs such as the Copy Artifact, Parameterized Trigger, and Promoted Builds plugins],一起执行顺序任务, Pipeline使这个概念成为Jenkins的一流插件。
基于Jenkins可扩展的核心价值,Pipeline同样是可扩展的。
下图是一个持续集成的例子,可以很容易被模型化。

Pipeline 关键字

Step

一个独立的任务;一般来说steps告诉Jenkins做什么。例如执行shell命令,用sh执
行make:sh ‘make’。当插件扩展Pipeline DSL,这意味着插件能执行一个新的step。

Node

Pipeline执行的大多数工作是在一个或多个声明的Node的上下文中完成的。限制Node

步骤内的工作有两点:

(1).将块中包含的steps,通过向Jenkins添加项来运行队列.一旦一个执行器在一个节点上是空闲的, 这些steps就会运行。

(2).创建工作区 (特定于该特定Pipeline的目录),在工作区里,工作能被完成。

注意:

取决于你的Jenkins配置,经过一段时间的不活动时期之后,一些工作区不能被自
动清除。可以查看JENKINS-2111得到更多的信息。

Stage

Stage是定义整个Pipeline概念上子集的一个步骤,例如”Build”,”Test”,和”Deploy”,这被许多插件使用来可视化或者表现pipeline状态/进度。[5: Blue Ocean, Pipeline Stage View plugin]

开始Pipeline(Getting Started with Pipeline)

Jenkins Pipeline是一套支持持续集成的插件。Pipeline提供扩展的工具,通过Pipeline DSL去模型化简单到复杂的代码发布Pipeline。

本部分介绍一些Jenkins Pipeline的基本概念,例如基本的定义,用Pipeline执行任务。

前提条件

使用Jenkins Pipeline,你会需要:

  • Jenkins 2.x或者更高版本(更老版本1.642.3可能可以,但是不推荐)
  • Pipeline插件[6: Pipeline plugin]

想知道怎样安装和管理,请参见 Managing Plugins。

定义Pipeline

Pipeline脚本是用Groovy语言撰写。于是本文会介绍一些相关的Groovy语法,理解Groovy是有帮助的,但并不是必需的。

一个基本的Pipeline能按照以下两种方式创建:

  • Jenkins web UI上直接输入脚本
  • 创建一个Jenkinsfile文件,这个能被放到代码版本控制软件中。

用任意方法定义Pipeline的语法是相同的, 但Jenkins支持将Pipeline直接输入到 web UI 中, 通常认为最好的做法是定义在Jenkinsfile的Pipeline, Jenkins将直接从源代码管理加载。

在web UI中定义一个Pipeline

在web UI中创建一个基本的Pipeline。跟随以下步骤:

  • 点击Jenkins首页上的”New Item”。

  • 为Pipeline输入一个名字,选择Pipeline,然后点击OK。

注意:Jenkins用Pipeline的名字在硬盘上创建目录。包含空格的Pipeline名字可能会有bugs,脚本并不支持包含空格的路径。

  • 在Script区域,输入一个Pipeline,然后点击Save。

  • 点击”Build Now”去运行Pipeline。

  • 点击”build History”下的#1,然后点击Console Output去查看Pipeline完整的输出。

上面的例子展示了一个成功的Pipeline运行情况,用了两步。

① node分配一个执行器和工作空间。
② echo在Console Output输出字符串。

在SCM中定义一个Pipeline

复杂的Pipeline很难在Pipeline配置区域去写和维护。为了让这个更容易一些,Pipeline同样可以用文本编辑器写并放到版本控制中,通过Pipeline Script from SCM选项,Jenkins可以装载Jenkinsfile文件。

要做到这一点,当定义一个Pipeline时,选择”Pipeline Script from SCM”选项。

随着”Pipeline Script from SCM”选项被选择,在Jenkins界面上,你不能直接输入任何Groovy代码;你只能输入一个源代码路径,从这个路径可以找到pipeline文件。当更新代码库的时候,一个新的编译被触发,只要Pipeline被配置使用SCM polling触发。

提示:

Jenkinsfile的第一行应该是#!/usr/bing/env groovy,这样文本编辑器,IDEs,GitHub等可以按照Groovy代码来语法高亮Jenkinsfile文件。

内建文档(Built-in Documentation)

随着Pipeline一起发布的内建的文档,使得创建复杂的Pipelines更加容易。内建的文档可以根据安装在Jenkins实例中的插件,被自动生成和更新。

内建的文档可以通过链接被找到: localhost:8080/pipeline-syntax/。假设你已经有了一个正运行在本地8080端口上的实例。同样的文档可以连接到这里,通过任何项目的左边菜单”Pipeline Syntax”。

代码段生成器(Snippet Generator)

内建的代码段生成器(Snippet Generator)功能对于以下功能很有帮助,创建独立步骤地代码,发现插件提供的新步骤,对于一个特定的步骤实验不同的参数。

代码段生成器是动态填充的, 其中列出了可供Jenkins使用的步骤。可用的步骤数取决于安装的插件, 它显式地公开了Pipeline可使用的步骤。

使用代码生成器,生成步骤

(1).导航到Pipeline Syntax链接。

(2).在Sample Step下达菜单中,选择需要的步骤。

(3).使用Sample Step下拉菜单下面的动态区域去配置选定的步骤。

(4).点击Gemerate Pipeline Script生成一个代码段,拷贝到Pipeline中。

存取选定步骤的附加信息,点击Help按钮()上图红色箭头所指部分。

Global Variable Reference

除了代码段生成器(Snippet Generator)只能生成步骤之外,Pipeline同样提供了一个内建的”Global Variable Reference”。像代码段生成器(Snippet Generator)一样,它也是被插件动态生成的。不像代码段生成器(Snippet Generator)的是,Global Variable Reference仅仅包含Pipeline或者插件提供的变量文档,只对Pipeline有效。

Pipeline默认提供的变量有:

env

环境变量可以被Pipeline脚本,例如env.PATH或者env.BUILD_ID。可以到Global Variable Reference寻找,到目前为止,完整的,最新的,Pipeline中可以使用的变量列表。

params

将为Pipeline定义的所有参数公开为只读映射, 例如:params.MY_PARAM_NAME

currentBuild

可以被用来发现当前正在执行的Pipeline的相关信息,例如currentBuild.result,currentBuild.displayName等等。可以到Global Variable Reference寻找,到目前为止,完整的,最新的,可以用的currentBuild列表。

Further Reading

本章节仅仅只说出了Jenkins Pipeline能做的一小部分,但已经为你提供了足够多的基础,去开始实验Jenkins实例。

下一节Jenkinsfile,更多的Pipeline步骤将被讨论。

Additional Resources

  • Pipeline Steps Reference, 包含发布插件提供的所有步骤
  • Pipeline Examples,可拷贝社区版的Pipeline例子集合。

参考资料:

  1. https://jenkins.io/doc/book/pipeline/
  2. https://en.wikipedia.org/wiki/Domain-specific_language
  3. https://en.wikipedia.org/wiki/Version_control
  4. https://en.wikipedia.org/wiki/Single_source_of_truth
  5. https://wiki.jenkins-ci.org/display/JENKINS/Pipeline+Stage+View+Plugin
  6. https://plugins.jenkins.io/workflow-aggregator
  7. ../managing/plugins.pdf

本系列主贴直达:https://testerhome.com/topics/11265

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 2 条回复 时间 点赞
rocl [Jenkins Pipeline 插件] Pipeline Doc 中文版合集 中提及了此贴 18 Dec 10:43
rocl 如何攻破 Web 软件 (How to break web software) 中提及了此贴 09 May 11:32
Author only
刘大头 回复

这句话,我的理解:jenkins可以有master和agent,他们是通过agent连接,master重启的话并不影响agent上的project的运行

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up