重庆专业网站推广平台下载百度官方版
点此获取更多相关资料
本文为霍格沃兹测试开发学社学员学习笔记分享
原文链接: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上执行pipeline
-
none:pipeline将不分配全局agent, 每个stage分配自己的agent
-
label:指定运行节点的Label
-
node:自定义运行节点配置
- 指定 label
- 指定 customWorkspace
-
docker:控制目标节点上的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"}
}