Lazy loaded image
运维管理
Jenkin Pipeline 语法和 Jenkinsfile
Words 7491Read Time 19 min
2026-1-3
2026-1-3
date
related_level
slug
type
relate_date
summary
status
tags
category
last_updated
Jan 3, 2026 10:56 PM
是否已更新
orginal_page
是否推荐
参考资料
Jenkins 流水线核心价值
  • 代码化:流水线用代码编写,通常纳入版本控制,便于团队协作修改和优化
  • 持久性:即使 Jenkins 主机重启(计划内或意外),流水线仍能继续运行
  • 可暂停:支持在关键步骤暂停,等待人工确认后再继续
  • 灵活性:支持分支/合并、循环、并行执行等复杂持续交付场景
  • 可扩展:支持自定义 DSL 扩展,并能与其他插件集成
Jenkins 流水线核心概念:pipeline, node, stage, step
  • Pipeline(流水线):用户定义的持续交付流程,用代码描述整个构建、测试和部署过程
    • 声明式语法中,用 pipeline { } 块定义
  • Node(节点):能运行流水线的机器(如服务器或代理)
    • 脚本式语法中,用一个或多个 node { } 块指定在哪执行任务
    • 声明式语法中,用 agent { } 块指定在哪执行任务
  • Stage(阶段):流水线中的一个逻辑步骤,比如“构建”、“测试”、“部署”,用于组织任务并方便可视化进度
    • stages { } 块可以包含多个 stage { }
  • Step(步骤):具体的单个操作,比如运行命令 sh 'make'
    • steps { } 块可以包含多个具体操作
    • 通常通过安装插件新增步骤来扩展流水线功能
Jenkinsfile 流水线即代码(Pipeline as Code)
  • Jenkinsfile 文件必须放在代码仓库的根目录,包含完整的 Pipeline 脚本(声明式或脚本式),定义构建、测试、部署等步骤
  • 通过其中一种 item 类型来发现 Jenkinsfile 并管理作业
    • Pipeline 使用 Jenkinsfile 定义 CI/CD 流程,支持并行、条件、回滚
    • Multibranch Pipeline 自动按 Jenkinsfile 构建单个代码库的多个分支
    • Organization Folder 扫描 GitHub 组织或 Bitbucket 团队 ,以发现组织的存储库,并自动为其创建托管的多分支流水线作业
      • 可以通过插件拓展到 Gitea 等组织
  • Jenkins 其他 Item 类型
    • Freestyle Project(自由风格项目)
      • 传统任务类型,通过 Web UI 配置构建步骤,灵活但可维护性较差,不支持 Jenkinsfile
    • Folder(文件夹)
      • 用于对 Jenkins 任务进行分组管理,本身不执行构建,便于权限和结构化管理
Jenkins 流水线引用变量
默认提供的常用全局变量:env, params, currentBuild
  • env:访问环境变量,如 env.PATHenv.BUILD_ID
  • params:以只读 Map 形式获取流水线参数,如 params.MY_PARAM_NAME
  • currentBuild:获取当前构建信息,如 currentBuild.resultcurrentBuild.displayName 等
常用全局 env 变量
  • BUILD_NUMBER / BUILD_ID:当前构建编号
  • BUILD_TAG:格式为 jenkins-作业名-编号,便于标识
  • BUILD_URL:当前构建结果的网页链接
  • JOB_NAME:当前任务名称
  • NODE_NAME:运行节点名称(控制器为 "master")
  • WORKSPACE:工作区绝对路径
  • JAVA_HOME:若配置了 JDK,则指向其路径
  • EXECUTOR_NUMBER:当前执行器编号(从 0 开始)
  • JENKINS_URL:Jenkins 服务地址(需在系统设置中配置)
environment { } 块或 withEnv 步骤设置 env 变量
  • 声明式流水线可以使用 environment { }
  • 脚本式流水线必须使用 withEnv 步骤
  • 作用范围
    • 在顶级 pipeline 块中使用 environment 指令将应用于管道内的所有步骤
    • 在 stage 中定义的 environment 指令只会将给定的环境变量应用于该 stage 内的步骤
可以动态设置 env 变量
  • returnStdout 返回字符串结果的结尾会包含一个空格
parameters { } 块设置 params 变量
五种可用变量类型:string, text, booleanParam, choice, password
  • parameters { string(name: 'DEPLOY_ENV', defaultValue: 'staging', description: '') }
  • parameters { text(name: 'DEPLOY_TEXT', defaultValue: 'One\nTwo\nThree\n', description: '') }
  • parameters { booleanParam(name: 'DEBUG_BUILD', defaultValue: true, description: '') }
  • parameters { choice(name: 'CHOICES', choices: ['one', 'two', 'three'], description: '') }
    • 首个选项为默认项
  • parameters { password(name: 'PASSWORD', defaultValue: 'SECRET', description: 'A secret password') }
params 变量样例
字符串变量插值与 Groovy 语法一致,仅双引号支持变量插值
  • 前者仅输出 Hello Mr. ${username}
避免将用户输入或凭据变量直接用于 shbatpowershell 等命令步骤的插值
  • 存在风险:命令注入风险,凭证泄露或失效
    • 用户输入含特殊字符(如 ;&|)时,会被当作额外命令执行
      错误用法
      修改为单引号,让 sh 自行处理
      凭证含特殊字符(如 %$)时,经 Groovy 插值后可能被 shell 错误解析
      错误用法
      修改为单引号,让 sh 自行处理
  • 对用户输入或环境变量,使用单引号(如 sh 'echo ${STATEMENT}'),让 shell 自行解析变量,而非 Groovy
Jenkins 流水线引用凭据
参考资料
  • environment { } 块里通过 credentials() 方法安全使用凭证
三种常用凭证类型:secretText, secretFile, usernamePassword
secretText
  • 如 AWS 密钥,直接映射为环境变量
  • 示例:AWS_SECRET_ACCESS_KEY = credentials('id')
  • 在日志中自动屏蔽为 ***,防止意外泄露
secretFile
  • 用于上传的文件类凭证(如 kubeconfig、GPG 文件)
credentials('id') 返回临时文件路径,供命令行工具使用
usernamePassword
  • 一个凭证 ID 会生成三个变量
    • VAR → username:password
    • VAR_USR → 用户名
    • VAR_PSW → 密码
usernamePassword 样例
  • 生成以下三个变量
    • BITBUCKET_COMMON_CREDS
    • BITBUCKET_COMMON_CREDS_USR
    • BITBUCKET_COMMON_CREDS_PSW
  • 同样自动屏蔽敏感内容
其他凭证类型需使用 withCredentials 代码块:basicSSHUserPrivateKey, certificate, x509ClientCert
  • 支持在同一个 withCredentials 中绑定多个凭证
basicSSHUserPrivateKey 私钥以及对应 SSH 用户名
  • 可选 Passphrase 用于加密私钥
certificate 指定 PKCS#12 证书
  • 可选 Password 用于解密证书
x509ClientCert 包含 cert.pem, key.pem, ca.pem,用于 mtls 认证
  • 由 Docker Common 插件提供,之前叫 dockerCert
Jenkins 错误处理
声明式流水线通过 post { } 定义不同条件下的操作
  • post 条件块
    • always { } 无论成功失败都执行
    • success / failure / unstable / aborted 仅当流水线在对应状态时执行
    • unsuccessful { } 只要不是成功(即失败、不稳定或中止)就执行
    • changed { } 当前结果与上次不同时执行
    • fix { } 本次成功,且上次失败或不稳定时执行
    • regression { } 本次失败/不稳定/中止,而上次成功时执行
    • cleanup { } 在所有其他 post 条件执行完毕后运行,常用于清理资源
  • 脚本式流水线依赖 Groovy 的 try/catch/finally 控制流程,可精细处理异常并确保清理操作(如收集报告)执行
错误处理步骤
  • catchError 捕获错误但不让流水线立即中断
  • error 主动抛出错误并中止
  • unstable 标记构建为“不稳定”(不失败但有问题)
  • warnError 将错误降级为警告,继续执行
多代理处理和使用 parallel 步骤并行执行
  • 每个 stage 可指定不同 agent,通过 stash/unstash 在节点间传递文件
样例:在标记为“linux”和“windows”的代理上测试构筑结果
  • 使用 parallel 步骤并行执行
样例:重构之前的测试样例为并行处理
Jenkins 流水线片段复用 Shared Libraries
  • Pipeline 支持创建共享库(Shared Libraries),并加载到现有的 Pipeline 中
共享库(Shared Library) 定义时需指定:
  • 名称:简短标识符,供脚本引用
  • 源码来源(SCM):推荐使用支持“Modern SCM” API 的插件(如新版 Git、SVN),可直接检出任意版本
    • 若 SCM 插件不支持 Modern 模式,需用 Legacy SCM,并在 SCM 配置中包含 ${library.库名.version} 变量(如 SVN URL 中写 .../tags/${library.mylib.version})以动态切换版本
  • 默认版本:可选,可设为分支、标签或提交哈希(如 mainv1.0
  • 加载方式:可选是否自动加载(全局可用)或需脚本显式引入
  • 版本锁定:可在 Jenkins 配置中固定版本,禁止脚本覆盖
共享库目录结构 src, vars, resources
目录样例
  • src/ 存放标准 Java/Groovy 包结构的类文件
    • 如 org/foo/Bar.groovy → 对应 org.foo.Bar 类
    • 自动加入流水线的 classpath,可在脚本中通过 new org.foo.Bar() 使用
  • vars/ 定义全局变量/函数,文件名即变量名
    • 如 foo.groovy → 流水线中可用 foo.xxx()
    • 可附带同名 .txt 文件提供文档(支持 Markdown/HTML),在成功运行一次后显示在“全局变量参考”页面
  • resources/ 存放非代码资源文件(如 JSON、配置文件)
    • 通过 libraryResource 'org/foo/bar.json' 加载(仅限外部共享库,内部库不支持)
不同层级的共享库以及可信等级
可信等级分为两类:Trusted(可信)和 Untrusted(不可信)
  • trusted(可信):可调用任意 Java/Groovy/Jenkins 内部 API
    • 需 Overall/RunScripts 权限(通常仅管理员)
    • 任何能够向此 SCM 存储库推送提交的人都可能获得对 Jenkins 的无限制访问权限
  • untrusted(不可信):运行在 Groovy 沙箱中,权限受限
    • 仅需 Overall/Manage 权限
  • 全局共享库(Global Shared Libraries)
    • 在 Manage Jenkins > System 中配置,对所有流水线可用
    • 可以设置为 untrusted 或 trusted
  • 文件夹级共享库(Folder-level)
    • 绑定到特定文件夹,仅该文件夹及子文件夹内的流水线可用
    • 始终为 untrusted
  • 自动共享库(Automatic)
    • 由插件动态加载(如 GitHub 库插件),无需预先配置,但为 untrusted
共享库版本
  • 在 Jenkins 全局配置中设置默认版本
    • 脚本中只写库名或者隐式加载(开启 "Load implicitly")时使用
  • 如果启用 “Allow default version to be overridden”,可通过 @Library('mylib@v2') 覆盖默认版本
library 步骤支持动态版本(变量、参数、分支名等)
  • 不能用 library 步骤覆盖已隐式加载的库版本(隐式库在脚本运行前已加载,且同名库不可重复加载)
  • 共享库一般在编译阶段加载(支持类型检查),vars/ 中的全局变量在运行时解析
使用@Library 注解引入共享库
隐式加载:若库标记为 “Load implicitly”,可直接使用其变量或类
  • 会使用默认版本
显式加载:通过 @Library('库名') 注解引入
@Library('xxx') _ 是使用 vars/ 全局变量的标准方式
  • 适用于
    • 仅定义全局变量 (vars/) 的共享库
    • 仅需要全局变量的 Jenkinsfile
加载后通过 import 使用 src/ 中的类
使用 library 步骤动态加载共享库
仅用 vars/ 全局变量
使用 src/ 中的类(无静态类型支持)
  • 不能 import(脚本已编译完成),必须通过全限定名动态调用
  • 使用类似 Java 的语法调用 static 方法
    • library('my-shared-library').com.mycorp.pipeline.Utils.someStaticMethod()
Jenkins 流水线:声明式和脚本式
参考资料
  • 脚本式流水线支持完整的 Groovy 语法(如循环、异常处理、函数等)
声明式流水线样例
脚本式流水线样例
Jenkins 声明式流水线语法
参考资料
  • pipeline { }node { } 作为最外层容器
Jenkins 声明式流水线语法组成:Sections, Directives, Steps
  • Sections 包含一个或多个 Directives,Directives 又包含一个或多个 Steps
Stages 结构
Sequential Stages 定义按顺序执行的嵌套子阶段
  • 每个 stage 必须且只能包含以下之一:stepsstagesparallel 或 matrix
  • 在顺序阶段中,可以嵌套并行(parallel)或矩阵(matrix)阶段
Parallel Stages 定义同时执行的多个子阶段
  • 不能在已经处于 parallel 或 matrix 中的 stage 内再嵌套 parallel 或 matrix
可通过以下方式启用“快速失败”(fail-fast)
  • 在并行 stage 中设置 failFast true
  • 或在 pipeline 的 options 中使用 parallelsAlwaysFailFast(),使所有并行阶段都启用 fail-fast
Matrix Stages 定义一个多维参数组合,每个组合并行执行一组顺序阶段
  • 不能在已经处于 parallel 或 matrix 中的 stage 内再嵌套 parallel 或 matrix
一个 matrix 必须包含以下两部分:axes, stages
axes:定义一个或多个维度(axis),每个维度有名称和值列表
  • 所有维度的值进行笛卡尔积,生成所有单元格
  • 示例:3 个 axis(3×4×2)→ 24 cells
  • stages:定义在每个单元格中顺序执行的一组 stage
可在 matrix 块内直接定义适用于每个单元格的 stage 指令
  • 如:agentenvironmenttoolswhenoptionsinputpost 等
  • 在运行时引用当前单元格的 axis 变量(如 ${PLATFORM}
  • 条件判断(如 when)可用于动态控制哪些单元格实际执行
excludes 可选,可移除不需要的单元格(即“稀疏化”矩阵)
  • 每个 exclude 定义一组匹配条件,满足该条件的单元格将被剔除。
    • 支持 values(排除指定值)和 notValues(排除指定值)
  • 多个 exclude 规则独立生效,可组合使用
可通过以下方式启用“快速失败”(fail-fast)
  • 在并行 stage 中设置 failFast true
  • 或在 pipeline 的 options 中使用 parallelsAlwaysFailFast(),使所有并行阶段都启用 fail-fast
Matrix 样例
可用 Sections
agent 指定整个流水线或某个 stage 在哪个 Jenkins 节点(或容器)上执行
  • 可位于 pipeline 顶层(全局)或单个 stage 内(局部)
关键参数类型
  • none:不分配全局 agent,要求每个 stage 自行声明。
  • any:在任意可用节点执行
label:在具有指定标签的节点上运行
  • 可以使用 label 条件
docker:在 Docker 容器中运行
  • 支持通过 args 参数来指定 docker run 参数
  • 支持 registryUrl 和 registryCredentialsId 来使用私有仓库
dockerfile:用源仓库中的 Dockerfile 构建容器来执行流水线或阶段
  • 通常使用源存储库根目录中的 Dockerfile,通过 dir 'someSubDir’ 指定其他文件夹路径
kubernetes:在 Kubernetes Pod 中运行
  • Pod 模板在 kubernetes { } 块内定义
一些选项
label 指定 Jenkins 节点的标签(或标签表达式),用于选择符合条件的执行节点
  • node 必须,对 docker, dockerfile 有效
customWorkspace 覆盖默认的工作空间路径,指定自定义工作目录
  • 对 node, docker, dockerfile 有效
  • 可以指定绝对路径和相对路径(自定义工作区将位于节点上的工作区根目录下)
reuseNode 是否复用节点
  • 若设为 true,容器将在顶层 agent 已分配的同一节点上启动,并复用其工作空间,而不是重新分配新节点
  • 对 docker, dockerfile 有效
args 向 docker run 命令传递额外的运行时参数
  • 挂载目录:-v /host/path:/container/path
  • 设置环境变量:-e MY_VAR=value
  • 指定用户:--user 1000
  • 对 docker, dockerfile 有效
  • 注意:顶层 agent 的分配时间 不计入 options { timeout };而 stage 级 agent 的分配时间 会计入超时限制
stages 包含一个或多个 stage,是流水线主体逻辑所在
  • pipeline / node 包含至少一个 stages 区块
  • 结构:stages → 多个 stage → 每个 stage 包含 steps
  • 建议:按 CI/CD 阶段划分,如 Build → Test → Deploy
steps 定义在某个 stage 中实际执行的操作
  • steps 必须位于每个 stage 内部
  • 由一个或多个 step 命令组成
    • sh '...'(执行 shell)
    • bat '...'(Windows 批处理)
    • junit '...'(发布测试报告)
    • input(人工确认)
    • archiveArtifacts(归档产物)
  • 可以通过安装插件添加更多可用 step 命令
post 定义在流水线或 stage 结束后根据其状态执行的清理或通知操作
  • 位置:可在 pipeline 顶层或 stage 内
  • post 条件块
    • always { } 无论成功失败都执行
    • success / failure / unstable / aborted 仅当流水线在对应状态时执行
    • unsuccessful { } 只要不是成功(即失败、不稳定或中止)就执行
    • changed { } 当前结果与上次不同时执行
    • fix { } 本次成功,且上次失败或不稳定时执行
    • regression { } 本次失败/不稳定/中止,而上次成功时执行
    • cleanup { } 在所有其他 post 条件执行完毕后运行,常用于清理资源
可用 Directives
environment 用于定义环境变量
  • 作用范围
    • 在 pipeline 顶层定义 → 对所有 steps生效。
    • 在 stage 内定义 → 仅对该 stage 内的 steps 生效
  • 支持一个特殊的辅助方法 credentials()  集成 Jenkins 凭据
    • 详见 Jenkins 流水线引用凭据部分
options 用于配置流水线或特定阶段(stage)的运行行为
  • 作用范围
    • 在 pipeline 顶层定义 → 影响整个流水线
    • 在 stage 内定义 → 影响该 stage
  • 优先级:options 中的逻辑(如 timeout先于 agent 分配和 when 条件判断执行
pipeline 常用选项
选项
作用
示例
timeout
设置流水线的超时时间
timeout(time: 30, unit: 'MINUTES')
retry
流水线失败时重试指定次数
retry(2)
disableResume
控制器重启后不恢复流水线
disableResume()
quietPeriod
设置静默期(秒)
quietPeriod(10)
timestamps
在控制台输出前添加时间戳
timestamps()
overrideIndexTriggers
允许覆盖分支索引触发器的默认处理方式
overrideIndexTriggers(false)
skipDefaultCheckout
跳过默认的 SCM 代码检出
skipDefaultCheckout()
checkoutToSubdirectory
在工作区的子目录中执行自动源代码控制检出
checkoutToSubdirectory('foo')
skipStagesAfterUnstable
当构建状态变为 UNSTABLE 时,跳过相应阶段
skipStagesAfterUnstable()
preserveStashes
保留 stash 供“从阶段重启”使用
preserveStashes(buildCount: 3)
buildDiscarder
保留最近 N 次构建记录/产物
buildDiscarder(logRotator(numToKeepStr: '5'))
newContainerPerStage
配合 Docker agent,每个 stage 用新容器
newContainerPerStage()
parallelsAlwaysFailFast
启用并行阶段的 failfast
parallelsAlwaysFailFast()
disableConcurrentBuilds
禁止并发构建(可选是否中止旧构建)
disableConcurrentBuilds(abortPrevious: true)
stage 常用选项
选项
作用
示例
timeout
设置该阶段的超时时间
timeout(time: 1, unit: 'HOURS')
retry
流水线失败时重试指定次数
retry(3)
timestamps
在控制台输出前添加时间戳
timestamps()
skipDefaultCheckout
跳过从源代码控制系统检出代码
skipDefaultCheckout()
parameters 用于定义用户在手动触发流水线时需提供的输入参数
  • 仅允许在 pipeline 顶层定义一次
五种可用变量类型:string, text, booleanParam, choice, password
  • parameters { string(name: 'DEPLOY_ENV', defaultValue: 'staging', description: '') }
  • parameters { text(name: 'DEPLOY_TEXT', defaultValue: 'One\nTwo\nThree\n', description: '') }
  • parameters { booleanParam(name: 'DEBUG_BUILD', defaultValue: true, description: '') }
  • parameters { choice(name: 'CHOICES', choices: ['one', 'two', 'three'], description: '') }
    • 首个选项为默认项
  • parameters { password(name: 'PASSWORD', defaultValue: 'SECRET', description: 'A secret password') }
triggers 用于定义自动触发流水线执行的机制
  • 支持触发器类型
    • cron 按 Jenkins cron 表达式定期触发流水线
      • cron('H */4 * * 1-5') → 工作日每 4 小时一次
    • pollSCM 定期轮询 SCM(如 Git)是否有新提交,有则触发构建
      • pollSCM('H/15 * * * *')
    • upstream 当指定的上游任务以特定结果(如 SUCCESS)完成时触发本流水线
      • upstream(upstreamProjects: 'build-job', threshold: SUCCESS)
    stage 定义流水线中的一个逻辑步骤
    • stages 至少需要一个 stage
    • 必须提供名称作为参数
      • stage('Example') {}
    tools 自动安装并配置预定义的构建工具(如 Maven、JDK、Gradle),并加入 PATH
    • 支持工具:mavenjdkgradle
      • 工具必须已在 Jenkins → Manage Jenkins → Tools 中预先配置
    • 作用范围
      • 在 pipeline 顶层定义 → 影响整个流水线
      • 在 stage 内定义 → 影响该 stage
    input 在 stage 开始前暂停流水线,等待用户确认或输入参数
    可用参数
    • message 必填,提示用户的问题
    • id 可选,iput 元件的 ID
      • 默认值为 stage 的名称
    • ok 可选,确认按钮文字
      • 默认为 “Proceed”
    • submitter 可选,允许审批的用户/组
      • 如 "admin,dev-team"
    • submitterParameter 可选,将审批人用户名存入指定环境变量
    • parameters 可选,让用户填写额外参数
    样例
    when 用于条件控制:决定某个 stage 是否应被执行
    • 逻辑规则:
      • 多个并列条件 → 全部为 true 才执行(等价于隐式 allOf
      • 使用 anyOf → 任一为 true 即执行
      • 使用 not → 取反条件
    • 嵌套支持:notallOfanyOf 可任意深度嵌套,构建复杂逻辑
    常用内置条件:多数条件 comparator 支持 EQUALS / GLOB / REGEXP 匹配方式
    branch:按分支名判断(仅多分支流水线)
    • when { branch pattern: "release-\\d+", comparator: "REGEXP"}
    buildingTag / tag:按 Git tag 构建判断
    • when { buildingTag() }
    • when { tag pattern: "release-\\d+", comparator: "REGEXP"}
    changeset / changelog:按代码变更文件或日志匹配
    • when { changeset pattern: ".TEST\\.java", comparator: "REGEXP" }
    • when { changeset pattern: "*/*TEST.java", caseSensitive: true }
    • when { changelog '.*^\\[DEPENDENCY\\] .+$' }
    changeRequest:针对 PR / MR / Gerrit Change
    • when { changeRequest authorEmail: "[\\w_-.]+@example.com", comparator: 'REGEXP' }
    environment:按环境变量值判断
    • when { environment name: 'DEPLOY_TO', value: 'production' }
    equals:值相等判断
    • when { equals expected: 2, actual: currentBuild.number }
    expression:自定义 Groovy 表达式
    • when { expression { return params.DEBUG_BUILD } }
    triggeredBy:按触发方式(SCM、定时、用户等)
    • when { triggeredBy 'SCMTrigger' }
    • when { triggeredBy 'TimerTrigger' }
    • when { triggeredBy 'BuildUpstreamCause' }
    • when { triggeredBy cause: "UserIdCause", detail: "vlinde" }
    执行时机控制:默认情况下,when进入 agent 之后、input/options 之前 评估
    • beforeAgent true:条件通过才进入 agent
    • beforeInput true:条件通过才显示 input
      • 默认
    • beforeOptions true:条件通过才应用 options
    样例:多条件嵌套
    可用 Steps
    • 声明式流水线可以使用 Pipeline Steps 参考文档中列出的所有标准步骤
    script 允许在声明式流水线中嵌入 Scripted Pipeline(脚本式流水线)代码块
    • 对于简单或临时逻辑可使用 script
    • 若代码块较大或复杂,应将其移至 Shared Libraries(共享库) 中
    其他:Jenkins Cron 语法
    • 格式:MINUTE HOUR DayOfMonth MONTH DayOfWeek
    • 支持操作符:
      • *:所有值
      • M-N:范围(如 9-17
      • /X 或 M-N/X:步长(如 /10 表示每 10 分钟)
      • A,B,C:枚举多个值
    • 推荐使用 H(Hash)代替具体数字,避免多任务同时执行造成资源争抢
      • H 基于任务名哈希生成稳定但分散的时间点(非随机)
    Jenkins 脚本式流水线语法
    • Scripted Pipeline 是基于 Groovy 语言构建的通用领域特定语言(DSL),运行在 Jenkins Pipeline 子系统之上
    • 使用标准 Groovy 控制结构实现逻辑分支:
      • 条件判断:if/else
      • 异常处理:try/catch/finally(Pipeline 步骤失败时会抛出异常)
    • Scripted Pipeline 不引入专属 step,完全依赖 Pipeline 及插件提供的通用 step
    • 与普通 Groovy 的差异
      • 为支持 持久化(durability)(即 Jenkins 控制器重启后能恢复运行中的流水线),Scripted Pipeline 需要将数据序列化回控制器。
      • 因此,某些 Groovy 习惯用法(如 collection.each { ... }可能不被完全支持,需注意兼容性问题
    与 Declarative Pipeline 的对比
    特性
    Scripted Pipeline
    Declarative Pipeline
    编程范式
    命令式(Imperative)
    声明式(Declarative)
    语法灵活性
    高(几乎无限制,仅受 Groovy 约束)
    低(结构严格、预定义)
    学习曲线
    较陡(需了解 Groovy)
    平缓(简洁、易读)
    适用场景
    复杂、定制化需求
    简单、标准化 CI/CD 流程
    VSCode 安装插件 jenkins-pipeline-linter-connector 执行 Jenkinsfile 语法检查
    • 相当于使用 curl 通过 HTTP POST 向 jenkins 服务器发送代码检查请求
    • 在 settings 里添加 jenkins url, user, token 即可
      • token 在 /user/<username>/security 里创建
    • Shirt + Alt + V 快捷键调用插件进行验证
    • 或者 Shirt + Ctrl + P 调出命令行,选择 Validate Jenkins
     
    上一篇
    traefik basic auth 认证处理
    下一篇
    OpenstackClient 使用指南

    Comments
    Loading...