写点什么

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

作者:测试人
  • 2023-09-08
    北京
  • 本文字数:2438 字

    阅读完需:约 8 分钟

免费领取:测试资料+测试用例+简历模板+测试文档

本文为霍格沃兹测试开发学社学员学习笔记分享

原文链接: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' } }}
复制代码

agent:定义 pipeline 执行节点

  • 必须出现的指令

  • 参数 any:可以在任意 agent 上执行 pipelinenone:pipeline 将不分配全局 agent, 每个 stage 分配自己的 agentlabel:指定运行节点的 Labelnode:自定义运行节点配置指定 label 指定 customWorkspacedocker:控制目标节点上的 docker 运行相关内容

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 处于“中止”状态时才能运行

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

options {    timeout(time: 30, unit: 'SECONDS')    buildDiscarder(logRotator(numToKeepStr: '10'))    retry(5)}
复制代码

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

  • 不是必须出现的指令

  • 无参数

	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,可避免首次构建失败

	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 将被重新触发

triggers {    cron('H/2 * * * *')}
复制代码

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'        }    }}
复制代码

流程控制 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."        }    }}
复制代码

环境变量定义及引用

  • 环境工具变量的定义设置位置: “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"    }}
复制代码


发布于: 刚刚阅读数: 3
用户头像

测试人

关注

专注于软件测试开发 2022-08-29 加入

霍格沃兹测试开发学社,测试人社区:https://ceshiren.com/t/topic/22284

评论

发布
暂无评论
软件测试/测试开发丨Jenkins Pipeline 学习笔记_软件测试_测试人_InfoQ写作社区