为何Jenkins任务执行后Pre-send Script会被清空?
问题原因及解决方法
核心原因
你用脚本修改Pre-send Script后,只修改了Jenkins内存中的对象,没有将配置持久化到磁盘。当任务运行时,Jenkins会重新从磁盘加载任务配置,或是任务运行过程中自动保存配置时覆盖了内存中临时修改的内容,最终导致Pre-send Script被清空。
修正后的脚本
在遍历修改每个任务的publisher后,需要调用job.save()方法将任务配置保存到磁盘,确保修改永久生效:
for(job in Hudson.instance.items) { def list = job.getPublishersList() for (publisher in list) { if (publisher instanceof hudson.plugins.emailext.ExtendedEmailPublisher) { def preSendScript = "your script here" publisher.setPresendScript(preSendScript) } } // 保存任务配置到磁盘,持久化修改 job.save() }
额外注意事项
- 若你的Jenkins版本较新,建议用
Jenkins.instance替代Hudson.instance,两者功能一致,但Jenkins是后续版本的标准类名。 - 修改脚本后重新在Jenkins脚本控制台执行,执行后手动查看任务配置确认Pre-send Script已保存,再运行任务验证是否生效。
内容的提问来源于stack exchange,提问作者聂超群
相关产品推荐
相关产品推荐

