PowerShell脚本检测磁盘剩余空间,按结果控制Jenkins Stage退出状态
Jenkins磁盘空间检查逻辑实现
需求点对应实现方式
- 筛选F盘检测结果:在WMI查询阶段直接加入过滤规则,跳过无有效容量的空磁盘项(对应测试输出里D、E盘无size值的情况),从根源避免除零异常,命令为
Get-WmiObject win32_logicaldisk -Filter "DeviceID='F:' AND Size > 0",可直接返回F盘的有效容量数据。 - 剩余百分比四舍五入取整:计算磁盘剩余占比时调用内置数学方法,把长小数计算结果转为整数,逻辑为
$freePercent = [math]::Round(($diskInfo.FreeSpace / $diskInfo.Size)*100, 0),第二个参数0表示无小数位,严格按四舍五入规则计算。 - 阈值比对:提前将固定阈值定义为PowerShell变量,例如
$threshold = 80,直接对比计算得到的$freePercent和阈值的大小关系即可。 - Jenkins步骤状态联动:bat步骤会自动捕获调用进程的退出码,退出码为0时标记Stage成功,非0时自动标记失败。只需在判断到不满足正常运行条件时执行
exit 1,正常场景执行exit 0即可完成状态联动,无需额外的流程控制语句。
替换后的流水线完整配置
将原有bat块内零散的PowerShell语句替换为完整的检查逻辑,最终配置如下:
stage ('test') { agent { node { label "test" customWorkspace "F:\\app" } } steps { script { bat """ f: cd \\app python somescript.py python otherscript.py powershell -Command " \$diskInfo = Get-WmiObject win32_logicaldisk -Filter \"DeviceID='F:' AND Size > 0\"; \$freePercent = [math]::Round((\$diskInfo.FreeSpace / \$diskInfo.Size)*100, 0); Write-Host \"F盘当前剩余空间占比:\${freePercent}%, 设定阈值:80%\"; if (\$freePercent -gt 80) { Write-Host \"当前剩余占比超过阈值,任务标记为失败\"; exit 1 } Write-Host \"当前剩余占比未超过阈值,任务正常退出\"; exit 0 " """ } } }
配置注意事项:bat块嵌套PowerShell命令时,PowerShell内部的自定义变量前需要加转义符
\$,避免Groovy或bat层提前将变量解析为空字符串。
可根据实际业务判断逻辑调整条件方向,如需实现“剩余占比低于20%即报错”的常规磁盘巡检逻辑,只需将判断条件修改为if (\$freePercent -lt 20)即可。
内容的提问来源于stack exchange,提问作者francois P
相关产品推荐
相关产品推荐

