软件测试/测试开发丨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{}
java 复制代码
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'
        }
    }
}

agent:定义pipeline执行节点

  • 必须出现的指令

  • 参数

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

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

    • label:指定运行节点的Label

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

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

    java 复制代码
    pipeline {
    	agent {
    		label 'master'
    		customWorkspace 'myWorkspace'
    	}
    }

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处于"中止"状态时才能运行
    java 复制代码
    post {
    	always {
    		echo 'say always'
    	}
    
    	success {
    		echo 'say success'
    	}
    
    	failure {
    		echo 'say failure'
    	}
    }

options:定义pipeline 的专有属性

  • 不是必须出现的指令

  • 参数:

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

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

  • 不是必须出现的指令
  • 无参数
java 复制代码
	environment {
		PERSON = "Kevin"
	}

	stages {
		stage('pull source code') {
			steps {
				echo "hello ${PERSON}"
				echo PERSON
			}
	}

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

  • 不是必须出现的指令

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

  • 参数:

    • 支持数据类型:booleanParam, choice, credentials, file, text, password, run, string
    • 类似参数化构建的选项,结合environment,可避免首次构建失败
java 复制代码
	parameters {
		string(name: 'PERSON' ,defaultValue:'Jenkins',description:'输入的文本参数')
	}

	environment {
		PERSON = "$params.PERSON"
	}

	stages {
		stage('pull source code') {
			steps {
				echo "hello ${PERSON}"
				echo 'pull source code'
			}
	}

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

  • 不是必须出现的指令

  • 参数:

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

script:定义脚本

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

2.2 语法 Scripts pipeline

流程控制 if-else

java 复制代码
node {
    stage('Example') {
        if (env.BRANCH_NAME == 'master') {
            echo 'I only execute on the master branch'
        } else {
            echo 'I execute elsewhere'
        }
    }
}

流程控制 try-catch

java 复制代码
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."
        }
    }
}

环境变量定义及引用

  • 环境工具变量的定义

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

java 复制代码
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"
    }
}
相关推荐
西岸行者5 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意5 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码5 天前
嵌入式学习路线
学习
毛小茛5 天前
计算机系统概论——校验码
学习
babe小鑫5 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms5 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下5 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。5 天前
2026.2.25监控学习
学习
im_AMBER5 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J5 天前
从“Hello World“ 开始 C++
c语言·c++·学习