文件目录相关操作
- deleteDir:删除当前目录
- dir:切换到目录
- 默认流水线工作在工作空间目录下,dir步骤可以让我们切换到其他目录
dir('/tmp'){
deleteDir()
}
- fileExists:判断文件是否存在,结果返回布尔值
- isUnix:判断是非为UNIX系统,如果是则返回true
- pwd:返回当前所在目录
- 有一个布尔类型的可选参数tmp,如果为true,则返回与当前工作空间关联的临时目录
- writeFile:将内容写入指定文件中
- file:文件路径,可以是绝对路径,也可以是相对路径
- text:要写入的文件内容
- encoding:目标文件的编码。如果为空,则使用操作系统默认的编码
- readFile:读取文件
- file:路径,同上
- encoding:编码,同上
script{
writeFile(file:"base64File", text:"amVua2lucyBib29r", encoding:"Base64")
def content = readFile(file:"base64File", encoding: "UTF-8")
echo "${content}"
}
修改Jenkinsfile
执行结果
amVua2lucyBib29r
是jenkins book
的Base64编码
转码
制品相关步骤
- stash:保存临时文件
将文件保存起来,以便同一次构建的其他步骤或阶段使用。 如果整个流水线在同一台机器上执行,那stash是多余的,一般用于跨Jenkins node使用。 stash步骤会将文件存储在tar文件中,对于大文件的stash操作会消耗Jenkins master的计算资源。
- name:字符串类型,保存文件的集合的唯一标识
- allowEmpty:布尔类型,允许stash内容为空
- excludes:字符串类型,排除文件,如果排除多个使用「逗号」分隔
- includes:字符串类型,stash文件,留空表示全部
- useDefaultExcludes:布尔类型,true:使用Ant风格路径默认排除文件
Ant风格
匹配任何单字符匹配项目根路径下所有在project路径下的.a文件最长匹配原则:
/project/dir/file.jsp,现在存在两个路径匹配模式
/**/*.jsp
和/project/dir/*.jsp
那么会根据模式/project/dir/*.jsp
来匹配 - unstash:取出之前stash的文件
pipeline {
agent none
stages {
stage('stash') {
agent {label "master"}
steps {
writeFile file: "a.txt",text: "
stash(name: "abc", includes: "a.txt")
}
}
stage('unstash') {
agent {label "node2"}
steps {
script {
unstash("abc")
def content = readFile("a.txt")
echo "${content}"
}
}
}
}
}
命令相关
- sh:执行shell命令
- script:要执行的shell脚本
- encoding:脚本执行后输出日志的编码,默认为系统编码
- returnStatus:布尔类型,默认返回状态码,如果是非零则流水线执行失败。设置为true后,无论什么状态码,流水线执行都不受影响
- returnStdout:布尔类型,如果为true,任务的标准输出将作为步骤的返回值,而不是打印到构建日志中(如果有错误,则依旧会打印到日志中) ⚠️returnStatus和returnStdout同时使用,只有returnStatus生效
- bat,powershell步骤
- bat步骤执行Windows的批处理命令
- 支持参数类型sh
- powershell执行的是PowerShell脚本
- 支持参数类似sh
其他步骤
- error:主动报错,中止pipeline
error(“there is a error”)
- tool:使用预定义的工具
- name:工具名称
- type(可选):工具类型,指该工具安装类的全路径类名
- 在Global Tool Configuration(全局工具配置)中配置了工具
全局工具配置
片段生成器
- timeout:代码块超时时间
- time:整型
- unit(可选):时间单位,默认分钟。支持NANOSECONDS,MICROSECONDS,MILLISECONDS,SECONDS,MINUTES(默认),HOURS,DAYS
- activity(可选):布尔类型,true时 只有当日志没活动才算真正的超时
- waitUntil:等待条件满足
timeout(50) {
waitUntil{
script{
def r = sh script: 'curl http://exmple',return Status: true
return (r == 0)
}
}
}
- retry:重复执行块
steps {
retry(20){
script{
sh script: 'curl http://exmple',return Status: true
}
}
}
⚠️如果某次retry抛出异常,只中止当次,不会中止整个retry的执行 在执行retry的过程中,用户是无法中止流水线的 - sleep:休眠一段时间
- time:整型,休眠时间
- unit(可选):时间单位,默认秒,与
timeout
类似 - 示例:
sleep(120) // 休眠120秒
,sleep(time:'2',unit:"MINUTES") // 休眠2分钟
编写Jenkinsfile
推荐VS Code扩展:Jenkins Pipeline Linter Connector
- 安装
- 配置扩展,照着提示配就行了
- 配置Jenkins服务器
- 运行
Jenkins Pipeline Linter Connector
配置插件
配置CSRF
运行校验
故意写错了进行校验:
错误进行校验
代码语言:javascript复制Errors encountered validating Jenkinsfile:
WorkflowScript: 14: unexpected token: } @ line 14, column 1.
}
^