• 软件测试/测试开发丨Jenkins Pipeline 学习笔记


    点此获取更多相关资料

    本文为霍格沃兹测试开发学社学员学习笔记分享
    原文链接:https://ceshiren.com/t/topic/26711

    1. Jenkins节点

    1.1 常用的节点

    • 内建节点
    • SSH节点
    • Java Web节点

    1.1.1 SSH节点配置

    • 远程工作目录

      • 节点中必须有该目录,用于下载和运行jenkins
    • 主机

      • 节点的ip

    1.1.2 Java Web节点配置

    • 全局安全配置

      • 代理:勾选Java代理协议

    1.2 节点管理的缺陷

    • 没有负载监控能力(任务数量做的负载均衡)
    • 高可用能力差
    • 资源利用率

    使用k8s和jenkins集成来解决

    1.3 环境变量/工具位置的配置

    • 全局环境变量
    • 节点环境变量:点击配置从节点,进行配置

    1.4 父子job配置

    • 在子job的设置中,构建触发器配置父job

    2. pipeline

    2.1 语法 Declarative pipeline

    语法树

    • 必须包含在一个pipeline块内 pipeline{}
    pipeline {
        agent any  // 定义构建代理
    
        environment {
            param = 'xx'
        }
    
        stages {  // 定义阶段
            stage('pull source code') {
                steps {
                    echo 'pull source code'
                    sleep 5
                }
            }
    
            stage('build'){
                steps {
                    echo 'build source code'
                    sleep 5
                }
            }
        }
    
        post{  // 定义全局后置处理程序
            always {
                echo 'say goodbye'
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    agent:定义pipeline执行节点

    • 必须出现的指令

    • 参数

      • any:可以在任意agent上执行pipeline

      • none:pipeline将不分配全局agent, 每个stage分配自己的agent

      • label:指定运行节点的Label

      • node:自定义运行节点配置

        • 指定 label
        • 指定 customWorkspace
      • docker:控制目标节点上的docker运行相关内容

      pipeline {
      	agent {
      		label 'master'
      		customWorkspace 'myWorkspace'
      	}
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

    stages:定义阶段集

    • 必须出现的指令
    • 包含一个或多个stage的序列
    • 每个Pipeline 代码区间中必须只有一个stages

    stage:定义阶段

    • 必须出现的指令
    • 无参数
    • 包含在stages中
    • Pipeline完成的所有实际工作都需要包含到stage中
    • 需要定义stage的名字

    steps:定义步骤

    • 必须出现的指令
    • 无参数
    • 具体执行步骤,包含在 stage 代码区间中

    post:定义Pipeline或stage运行结束时的操作

    • 不是必须出现的指令

    • 参数:

      • always:无论Pipeline运行的完成状态如何都会运行
      • changed:只有当前Pipeline运行的状态与先前完成的Pipeline的状态不同时,才能运行
      • failure:仅当当前Pipeline处于“失败”状态时才运行
      • success :仅当当前Pipeline具有“成功”状态时才运行
      • unstable:只有当前Pipeline具有“不稳定”状态才能运行
      • aborted:只有当前Pipeline处于“中止”状态时才能运行
      post {
      	always {
      		echo 'say always'
      	}
      
      	success {
      		echo 'say success'
      	}
      
      	failure {
      		echo 'say failure'
      	}
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13

    options:定义pipeline 的专有属性

    • 不是必须出现的指令

    • 参数:

      • buildDiscarder:保持构建的最大个数
      • disableConcurrentBuilds:不允许并行执行pipeline任务
      • timeout:pipeline 超时时间
      • retry:失败后,重试整个Pipeline的次数
      • timestamps:预定义由Pipeline生成的所有控制台输出时间
      • skipStagesAfterUnstable:一旦构建状态进入了“Unstable”状态,就跳过此stage
    options {
        timeout(time: 30, unit: 'SECONDS')
        buildDiscarder(logRotator(numToKeepStr: '10'))
        retry(5)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    environment:定义Pipeline或stage运行时的环境变量

    • 不是必须出现的指令
    • 无参数
    	environment {
    		PERSON = "Kevin"
    	}
    
    	stages {
    		stage('pull source code') {
    			steps {
    				echo "hello ${PERSON}"
    				echo PERSON
    			}
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    parameters:定义pipeline 的专有参数列表

    • 不是必须出现的指令

    • 使用 ${变量名} 进行参数化调用

    • 参数:

      • 支持数据类型:booleanParam, choice, credentials, file, text, password, run, string
      • 类似参数化构建的选项,结合environment,可避免首次构建失败
    	parameters {
    		string(name: 'PERSON' ,defaultValue:'Jenkins',description:'输入的文本参数')
    	}
    
    	environment {
    		PERSON = "$params.PERSON"
    	}
    
    	stages {
    		stage('pull source code') {
    			steps {
    				echo "hello ${PERSON}"
    				echo 'pull source code'
    			}
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    triggers:定义了Pipeline自动化触发的方式

    • 不是必须出现的指令

    • 参数:

      • cron:接受一个cron风格的字符串来定义Pipeline触发的常规间隔
      • pollSCM:接受一个cron风格的字符串来定义 Jenkins 检查SCM源更改的常规间隔;如果存在新的更改,则Pipeline将被重新触发
    triggers {
        cron('H/2 * * * *')
    }
    
    • 1
    • 2
    • 3

    script:定义脚本

    • 在script块内,可执行groovy脚本

    2.2 语法 Scripts pipeline

    流程控制 if-else

    node {
        stage('Example') {
            if (env.BRANCH_NAME == 'master') {
                echo 'I only execute on the master branch'
            } else {
                echo 'I execute elsewhere'
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    流程控制 try-catch

    stage('Test') {
        node{
            echo "This is test stage which run on the slave agent."
            try {
                echo "This is in the try block."           
                sh 'exit 1'
            }catch (exc) {
                echo "Something failed, I'm in the catch block."
            }finally {
                echo "Finally, I'm in the finally block."
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    环境变量定义及引用

    • 环境工具变量的定义

      • 设置位置: “Manage Jenkins”-> “Global Tool Configuration”
    • Script 代码中引用环境变量,调用java、maven工具

    stage('env tools') {
        node('master'){        
            //定义maven java环境
            def mvnHome = tool 'Maven 3.9.3'
            def jdkHome = tool 'jdk1.8_master'
            
            //引用环境变量,配置PATH变量
            env.PATH = "${mvnHome}/bin:${env.PATH}"
            env.PATH = "${jdkHome}/bin:${env.PATH}"
            
            //调用java mvn 工具
            sh "java -version"
            sh "mvn --version"
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  • 相关阅读:
    简述CRM系统软件的作用
    公司为什么要使用OKR,目的是什么?
    1043 输出PATest
    (学习日记)2022.7.26
    使用AIOps进行更好的事件管理
    中国再生纤维行业发展前景战略及投资风险预测分析报告
    postman出现Required request part ‘file‘ is not present
    三峡大学复杂数据预处理day01-day03
    万界星空科技云MES系统生产全流程追溯功能介绍
    【Python从入门到精通】(九)Python中字符串的各种骚操作你已经烂熟于心了么?【收藏下来就挺好的】
  • 原文地址:https://blog.csdn.net/Ceshiren666/article/details/132762545