首页 > 其他 > 详细

jenkins pipeline

时间:2019-04-16 14:27:41      阅读:173      评论:0      收藏:0      [点我收藏+]

1.Freestyle project
这个是jenkins的基础功能,可以用它来执行各种构建任务,他只能构建在一个电脑上,如果没有太多的需求,这个job基本够用了,它包含了所有基础功能.
2.Pipeline
真实的工作环境有很多job,比如先编译,然后执行静态代码检查、单元测试、然后部署服务器、服务器重启、进行ui测试等。我们需要对这些job进行一些设置将它们的上下游关系配置好。这个时候就需要pipeline配置了.详细的可以参考这篇文章

3.External job
用来监视外部执行的job.

4.Multi-configuration project
可以让job跑在不同的机器上.这个需要添加机器(节点),流程的话可以参考这篇文章

后面还有一些,这里不一一介绍了,有需要的可以自己google.
我们选择最基础的freestyle创建一个job,点击ok按钮.

1)代码上线要经历四个场景:Dev开发环境-->Test测试环境-->Beta验收环境-->Online线上环境
Dev开发环境:开发人员在开发机上自行开发,开发后将代码上传到svn/git版本控制系统里。
Test测试环境:将代码从svn下载并同步到测试机(Test环境发版),通知测试同事进行上线前的业务测试。
Beta验收环境:测试同事测试ok后,将代码同步到Beta机上(Beta环境发版),然后通知产品/运营同事进行上线前的验收。
Online线上环境:待Beta验收ok后,再将代码同步到线上机器上,最终完成Online发版。

 

声明式和脚本化的流水线语法

Jenkinsfile 能使用两种语法进行编写 - 声明式和脚本化。

声明式和脚本化的流水线从根本上是不同的。 声明式流水线的是 Jenkins 流水线更近的特性:

  • 相比脚本化的流水线语法,它提供更丰富的语法特性,

  • 是为了使编写和读取流水线代码更容易而设计的。

然而,写到`Jenkinsfile`中的许多单独的语法组件(或者 "步骤"), 通常都是声明式和脚本化相结合的流水线。 在下面的 [pipeline-concepts][pipeline-syntax-overview] 了解更多这两种语法的不同。

Why Pipeline?

本质上,Jenkins 是一个自动化引擎,它支持许多自动模式。 流水线向Jenkins中添加了一组强大的工具, 支持用例 简单的持续集成到全面的CD流水线。通过对一系列的相关任务进行建模, 用户可以利用流水线的很多特性:

  • Code: 流水线是在代码中实现的,通常会检查到源代码控制, 使团队有编辑, 审查和迭代他们的交付流水线的能力。

  • Durable: 流水线可以从Jenkins的主分支的计划内和计划外的重启中存活下来。

  • Pausable: 流水线可以有选择的停止或等待人工输入或批准,然后才能继续运行流水线。

  • Versatile: 流水线支持复杂的现实世界的 CD 需求, 包括fork/join, 循环, 并行执行工作的能力。

  • Extensible:流水线插件支持扩展到它的DSL [1]的惯例和与其他插件集成的多个选项。

然而, Jenkins一直允许以将自由式工作链接到一起的初级形式来执行顺序任务, [4] 流水线使这个概念成为了Jenkins的头等公民。

构建一个的可扩展的核心Jenkins值, 流水线也可以通过 Pipeline Shared Libraries 的用户和插件开发人员来扩展。 [5]

下面的流程图是一个 CD 场景的示例,在Jenkins中很容易对该场景进行建模:

技术分享图片

 

流水线概念

下面的概念是Jenkins流水线很关键的一方面 , 它与流水线语法紧密相连 (参考 overview below).

流水线

流水线是用户定义的一个CD流水线模型 。流水线的代码定义了整个的构建过程, 他通常包括构建, 测试和交付应用程序的阶段 。

另外 , pipeline 块是 声明式流水线语法的关键部分.

节点

节点是一个机器 ,它是Jenkins环境的一部分 and is capable of执行流水线。

阶段

stage 块定义了在整个流水线的执行任务的概念性地不同的的子集(比如 "Build", "Test" 和 "Deploy" 阶段), 它被许多插件用于可视化 或Jenkins流水线目前的 状态/进展. [6]

步骤

本质上 ,一个单一的任务, a step 告诉Jenkins 在特定的时间点要做_what_ (或过程中的 "step")。 举个例子,要执行shell命令 ,请使用 sh 步骤: sh ‘make‘。当一个插件扩展了流水线DSL, [1] 通常意味着插件已经实现了一个新的 step

流水线语法概述

下面的流水线代码骨架说明了声明式流水线语法脚本化流水线语法之间的根本差异。

请注意 阶段 and 步骤 (上面的) 都是声明式和脚本化流水线语法的常见元素。

声明式流水线基础

在声明式流水线语法中, pipeline 块定义了整个流水线中完成的所有的工作。

Jenkinsfile (Declarative Pipeline)
pipeline {
    agent any #1
    stages {
        stage(‘Build‘) { #2
            steps {
                // #3
            }
        }
        stage(‘Test‘) { #4
            steps {
                // #5
            }
        }
        stage(‘Deploy‘) { #6
            steps {
                // #7
            }
        }
    }
}
 1 在任何可用的代理上,执行流水线或它的任何阶段。
 2 定义 "Build" 阶段。
 3 执行与 "Build" 阶段相关的步骤。
 4 定义"Test" 阶。
 5 执行与"Test" 阶段相关的步骤。
 6 定义 "Deploy" 阶段。
 7 执行与 "Deploy" 阶段相关的步骤。

 

脚本化流水线基础

在脚本化流水线语法中, 一个或多个 node 块在整个流水线中执行核心工作。 虽然这不是脚本化流水线语法的强制性要求, 但它限制了你的流水线的在`node`块内的工作做两件事:

  1. 通过在Jenkins队列中添加一个项来调度块中包含的步骤。 节点上的执行器一空闲, 该步骤就会运行。

  2. 创建一个工作区(特定为特定流水间建立的目录),其中工作可以在从源代码控制检出的文件上完成。
    Caution: 根据你的 Jenkins 配置,在一系列的空闲后,一些工作区可能不会自动清理 。参考 JENKINS-2111 了解更多信息。

Jenkinsfile (Scripted Pipeline)
node {  #1
    stage(‘Build‘) { #2
        // #3
    }
    stage(‘Test‘) { #4
        // #5
    }
    stage(‘Deploy‘) { #6
        // #7
    }
}

  

 1

在任何可用的代理上,执行流水线或它的任何阶段。
 2 定义 "Build" 阶段。 stage blocks 在脚本化流水线语法中是可选的。 然而, 在脚本化流水线中实现`stage` 块 ,可以清楚的显示Jenkins UI中的每个`stage`的任务子集。
 3 执行与 "Build" 阶段相关的步骤。
 4 定义 "Test" 阶段。
 5 执行与 "Test" 阶段相关的步骤。
 6 定义 "Deploy" 阶段。
 7 执行与 "Deploy" 阶段相关的步骤。

 

流水线示例

这有一个使用声明式流水线的语法编写的`Jenkinsfile` 文件 - 可以通过点击下面 Toggle Scripted Pipeline 链接来访问它的等效的脚本化语法:

Jenkinsfile (Declarative Pipeline)
pipeline { #1
    agent any #2
    stages {
        stage(‘Build‘) { #3
            steps { #4
                sh ‘make‘ #5
            }
        }
        stage(‘Test‘){
            steps {
                sh ‘make check‘
                junit ‘reports/**/*.xml‘ #6
            }
        }
        stage(‘Deploy‘) {
            steps {
                sh ‘make publish‘
            }
        }
    }
}
 1 pipeline 是声明式流水线的一种特定语法,他定义了包含执行整个流水线的所有内容和指令的 "block" 。
 2 agent是声明式流水线的一种特定语法,它 指示 Jenkins 为整个流水线分配一个执行器 (在节点上)和工作区。
 3 stage 是一个描述 stage of this Pipeline的语法块。在 Pipeline syntax 页面阅读更多有关声明式流水线语法的`stage`块的信息。如 above所述, 在脚本化流水线语法中,stage 块是可选的。
 4 steps 是声明式流水线的一种特定语法,它描述了在这个`stage`中要运行的步骤。
 5 sh 是一个执行给定的shell命令的流水线 step (由 Pipeline: Nodes and Processes plugin提供) 。
 6 junit 是另一个聚合测试报告的流水线 step (由 JUnit plugin提供)。
 7 node 是脚本化流水线的一种特定语法,它指示 Jenkins 在任何可用的代理/节点上执行流水线 (和包含在其中的任何阶段)这实际上等效于 声明式流水线特定语法的`agent`。

jenkins pipeline

原文:https://www.cnblogs.com/linuxws/p/10716616.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!