Jenkins在Azure Windows 10代理执行PowerShell脚本时RemoteException的排查与解决
解决Jenkins Azure Windows代理执行PowerShell脚本时的启动盘序列号警告
背景与原因
当使用Jenkins流水线的powershell指令执行外部.ps1文件时,Jenkins的Durable Task插件会尝试读取Windows启动盘的序列号,用于生成任务的持久化标识。但Azure虚拟机的托管磁盘默认不暴露该序列号,因此触发了这个非致命警告——仅会在日志中产生冗余信息,不会导致脚本执行失败。
解决方案
1. 禁用磁盘序列号检测(推荐)
通过给Jenkins Windows代理添加系统属性,直接跳过该检测步骤:
- 命令行启动代理:修改
jenkins-agent.exe的启动命令,添加参数:jenkins-agent.exe -Dhudson.os.windows.hideDriveSerialNumber=true -url <Jenkins服务器地址> <代理密钥> <代理名称> - 服务运行代理:编辑代理安装目录下的
jenkins.xml,在<arguments>标签中插入上述参数:<arguments>-Xrs -Dhudson.os.windows.hideDriveSerialNumber=true -jar "%BASE%\agent.jar" -url <Jenkins服务器地址> <代理密钥> <代理名称></arguments>
修改完成后重启Jenkins代理,警告将不再出现。
2. 过滤日志中的警告信息
如果无法修改代理配置,可以在流水线指令中过滤目标警告:
将原指令:
powershell "./path/to/my/script.ps1"
替换为:
powershell "& './path/to/my/script.ps1' 2>&1 | Where-Object { $_ -notmatch 'Unable to retrieve boot drive serial number' }"
该命令会将错误输出合并到标准输出,并过滤掉包含警告文本的行,同时保留脚本的正常日志内容。
3. 为Azure磁盘添加序列号(可选)
若需要保留磁盘序列号检测功能,可手动为Azure托管磁盘设置序列号:
- 停止目标Azure虚拟机
- 进入Azure门户的磁盘详情页,点击「配置」选项卡
- 在「磁盘序列号」字段中输入自定义字符串(如
AZURE-VM-DISK-001) - 保存配置并重启虚拟机
此方法需要停机操作,适合有维护窗口的场景。
内容的提问来源于stack exchange,提问作者Link
相关产品推荐
相关产品推荐

