devops系列002——jenkins-pipeline介绍

至于安装jenkins 这里就不多说了 ,如果熟悉docker 的话 一条命令就解决了。

<code>docker run -d -u root -p 8080:8080 -p 5000:5000 --name jenkins -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai -v /data/jenkins_home/:/var/jenkins_home $(cat /etc/hosts|awk -F ' ' '{if(NR>2){print "--add-host "$2":"$1}}') -v /etc/localtime:/etc/localtime -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean:1.19.0/<code>

说到Jenkins 不可避免的就是pipeline ,即pipeline as code。Groovy语言被选择作为基础来实现pipeline,为用户提供了巨大的灵活性和可扩展性。

流水线的运行系统

1.主节点master :

是一个Jenkins实例的主要控制系统,它能够完全访问所有Jenkins配置选项和任务列表,如果没有指定其他系统,它也是默认的任务执行节点。

不过不推荐在主节点上执行高负载任务,任何需要大量处理的任务都应该在主节点之外的系统上运行。

这样做的另外一个原因是,凡是在主节点上执行的任务,都有权限访问所有的数据,配置和操作,这样会造成安全风险。


2.节点node :

在Jenkins2中,节点是一个概念,代表了任何可以执行Jenkins任务的系统。节点包括了主节点和从节点,也可以指一个容器,如Docker。

在任何Jenkins实例中主节点都会存在。


3.代理节点agent

在早先的版本的Jenkins中,代理节点被称为从节点(slave),其代表了所有非主节点系统。这类系统由主系统管理,按需分配或者指定执行特定的任务。

随着代理节点和节点之间关系的演进,代理节点在节点上运行。在脚本式流水线中,'节点'特指一个运行代理节点的系统,而在声明式流水线中,其指代一个

特定的代理节点来分配节点。


4.执行器executor

简单的说,执行器就是节点/代理节点用于执行任务的一个插槽。一个节点可以有任意多个执行器。执行器的数量定义了该节点可以执行的并发任务的数量。

当主节点将任务分配给特定节点时,该节点上必须有可用的执行器插槽来立即执行该任务,否则任务会一直处于等待状态,直到一个执行器变为可用。

执行器的数量和其他参数可以在创建节点的时候进行配置。

新建pipeline

新建任务现在流水线


执行pipeline方式

直接使用pipeline>


使用Jenkinsfile



pipeline 语法选择

脚本式:语法灵活、可扩展,但是也意味着更复杂。

优点:

更少的代码段落和弱规范要求更强大的程序代码能力更灵活的自定义代码操作能够构建更复杂的工作流和流水线

缺点:

要求更高的编程水平语法受限于goovy语法和环境比声明式语法更复杂

<code>node { stage("build") { // 执行构建 } stage("test") { // 执行测试 } stage("deploy") { try { // 执行部署 }catch(err){ currentBuild.result = "FAILURE" mail body: "project build error is here:${env.BUILD_URL}", from: 'xxx@yy.com', replyTo: 'xxxx@yy.com', subject: 'project build failed', to: 'xxxxx@yy.com' } }}/<code>

优点:

更结构化、贴近传统的jenkins web表单形式可以通过Blue Ocean图形化界面自动生成更友好的语法检测和错误识别

缺点:

对迭代逻辑比较弱部分功能缺乏支持对于复杂的流水线支持弱

<code>pipeline { agent any stages { stage("build") { steps { echo 'building...' } } stage("test") { steps { echo 'testing...' } } stage("deploy") { stpes { echo 'deploying...' } } } post { failure { mail to: 'xx@yy.com', subject: 'the pipeline failed' } }}/<code>

下一节开始 pipeline 语法

如果对您有帮助,记得不要忘了给个关注哦!!!

还可以关注我之前的文章: