pipeline介绍

Jenkins Pipeline是Jenkins 2中推出的新增特性,可以帮助用户在Jenkins中实现Continuous Delivery Pipeline(持续交付管道)。它构建了大量需要在Jenkins中实现持续集成的配置工具,它允许用户通过代码来配置和测试任务,以及自动化部署。使用Jenkins Pipeline,用户可以在GitHub等代码托管平台上开发代码,然后将代码提交到Jenkins中运行,以及部署此代码到正式环境中。

为什么需要pipeline

软件开发的本质就是一个流水线,从编码一直到部署到生产环境,而jenkins正好通过流水线的方式覆盖了这个流程,传统的jenkins使用,首先不够灵活,每个job都需要单独配置,耗费时间比较久,另外没有一个可视化的流程,pipeline可以将整个流程都代码化方便配置。

pipeline的核心思想

Jenkins的Pipeline通过Jenkinsfile文件进行描述,Jenkinsfile文件包含的是将配置转换为代码

pipeline的语法

Pipeline 支持两种语法 1.声明式(jenkins2.5新加入的语法)

特点: 1.最外层必须由pipline{ //do something }来进行包裹 2.不需要分好作为分隔符,每个语句必须在一行内 3.不能直接使用groovy语句(例如循环判断等),需要被script {}包裹

2.脚本式

特点: 1.最外层有node{}包裹 2.可直接使用groovy语句

推荐使用声明式语法

Declarative Pipeline(声明式)核心概念

核心概念用来组织pipeline的运行流程 1.pipeline :声明其内容为一个声明式的pipeline脚本 2.agent:执行节点(job运行的slave或者master节点) 3.stages:阶段集合,包裹所有的阶段(例如:打包,部署等各个阶段) 4.stage:阶段,被stages包裹,一个stages可以有多个stage 5.steps:步骤,为每个阶段的最小执行单元,被stage包裹 6.post:执行构建后的操作,根据构建结果来执行对应的操作

Declarative Pipeline(声明式)常用关键字

如下介绍一些常用的jenkins关键字,具体用法可以参考 : Jenkins流水线语法官网

Pipeline:Pipeline是Jenkins用来实现CI/CD流程的一种技术,它可以使用编程的方式指定构建、测试、部署等流程的操作步骤。Agent:Agent是Pipeline的一部分,用于在Jenkins中分配指定的任务。它让Jenkins有条件地执行一个或多个步骤,在不同的环境中运行任务,比如在一个另外的服务器上运行构建任务,然后回收运行的结果等。Options:Options是Pipeline的一部分,它可以构建一个可重用、复用的pipeline,它可以用来指明pipeline的运行规则,例如并发线程池大小、构建超时时间等。Stages:Stages是Pipeline的一部分,它允许分散一个pipeline的复杂流程,使其可以在构建、测试、部署等步骤中使用简单的语法,把它们分割成不同的阶段。Stage:Stage是Pipeline的一部分,它用于定义每个阶段的构建、测试、部署任务,并在每个阶段中设置变量、范围等。Steps:Steps是Pipeline的一部分,它可以用于定义有序的每个步骤,每个步骤将逐一执行,构建步骤可以自定义,并展示在Pipeline根节点中。Parameters:Parameters是Pipeline的一部分,它可以定义参数,然后参数值可以在指定的Pipeline中传递,也可以在整个流水线中自由传递。Triggers:Triggers是Pipeline的一部分,它表示Jenkins Pipeline触发器,以满足不同类型的情况下,触发不同的Pipeline,并且可以控制每次触发的频率。Input:Input是Pipeline的一部分,它用于让用户输入一些参数,从而实现用户的输入和参数的同步,并实现参数的控制和动态化,比如部署到生产环境时候不想自动进行,这时候可以可以添加input添加根据用户的输入触发。When:When是Pipeline的一部分,它用于定义条件,以实现只有满足条件才执行某个步骤,从而达到控制流程中某些步骤的执行策略等目的。Parallel:Parallel是Pipeline的一部分,它用于将整个Pipeline中的步骤进行分块,实现在多个分块的步骤之间进行并发的功能。Script:Script是Pipeline的一部分,它允许在构建、部署等步骤中运行任何脚本,用户可以定义任务的行为,构建和完成一个复杂的流程,比如在声明式语法中想使用脚本式语法可以嵌套该关键字Post:Post是Pipeline的一部分,它用于在Pipeline运行完成后,执行指定的操作,可以是发送通知邮件,记录构建日志等工作。Environment:Environment是Pipeline的一部分,它用于管理环境的变量,并将其传递给其他Pipeline的步骤。Tool:Tool是Pipeline的一部分,它用于指定执行任务的工具,比如需要使用什么编译器来编译代码等。

如下代码是通过关键字生成的pipeline框架

pipeline{

agent any

stages{

stage("get code"){

steps{

echo "get code from scm"

}

}

stage("package"){

steps{

echo "package code"

}

}

stage("deploy"){

steps{

echo "deploy package to node1"

}

}

}

}

脚本生成器

通过jenkins的关键字可以定义出大概的框架,具体配置的语法可以借助脚本生成器完成,脚本生成器在创建jenkins job后,点开job便可以找到。 如下是填充了配置细节的pipeline

pipeline {

agent {

// 运行环境

label 'api_test'

}

options{

// 保留最大的构建历史

buildDiscarder(logRotator(numToKeepStr: '2'))

// 设置流水线运行时间最长不超过10Min,如果超过,则自动中止

timeout(time:10,unit:'MINUTES')

// 打印当前时间戳

timestamps()

// 增加重试3次

retry(3)

}

environment{

code_path="$WORKSPACE\\API_Test_Project\\main"

}

parameters {

choice(name: 'env', choices: ['dev', 'test', 'prod'], description: '选择流水线运行的环境')

booleanParam(name: 'DEBUG', defaultValue: true, description: '控制安全测试是否开启')

}

stages{

stage('拉取代码'){

steps{

// 拉取pytest自动化项目仓库代码

git credentialsId: '80cff850-de44-4be7-a874-d6d59a7712fd', url: 'https://gitee.com/jinjiancode/training_pytest.git'

}

}

stage('自动化测试'){

steps{

// 拉取pytest自动化项目仓库代码

dir('D:\\training\\py3_env\\Scripts'){

bat "activate.bat && cd $env.code_path && dir $env.code_path && python $env.code_path\\run_testcase_by_allure.py"

}

}

}

stage('非功能性测试'){

parallel{

stage('性能测试'){

when { equals expected: "test", actual: params.env }

steps {

echo "执行性能测试"

build job: 'test_job1', parameters: [string(name: 'env', value: 'dev')]

}

}

stage('安全测试'){

when { expression { return params.DEBUG } }

steps {

echo "执行安全测试"

build job: 'test_job2', parameters: [string(name: 'env', value: 'dev')]

}

}

}

}

stage('生成报告'){

steps{

allure includeProperties: false, jdk: '', results: [[path: 'API_Test_Project\\\\main\\\\allure-result']]

}

}

stage('部署到生产环境'){

steps{

input '是否部署到生产环境?'

echo "执行部署。。。"

}

}

}

post{

always{

echo "发送邮件"

}

success {

echo "发钉钉"

}

failure {

echo "发微信"

}

}

}

Blue Ocean

Jenkins Blue Ocean 是 Jenkins CI/CD 工具的新 UI 面板,旨在提供更直观的图形化界面来编写构建,流水线和其他 CI/CD 相关的任务。它提供了一个可缩放的、可视化的环境,可以通过建立简单的 UI 组件可以创建一个复杂的导管构建。Jenkins Blue Ocean 负责将复杂的 Jenkins 流水线可视化,这样可以更直观地了解它是如何运行以及如何进行管理和优化。还提供了一种“拖放”编程模型,可以更轻松地编写复杂的管道。它还支持将多个管道组合成一个工作流,以近似聚合的方式定义复杂的部署模式。此外,Jenkins Blue Ocean 还具有监控功能,可以查看各个管道步骤的实时状态。 安装方式:通过插件安装 官网文档:https://www.jenkins.io/zh/doc/tutorials/create-a-pipeline-in-blue-ocean/

推荐阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: