jenkins 之 pipeline

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/
在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值