如何在Jenkins Pipeline中持久化文件存储的Properties?
解决Jenkins Pipeline中持久化修改Properties文件的问题
嘿,这个坑我之前踩过!确实Pipeline Utility Steps插件只提供了readProperties来读取,却没给对应的写入方法,但咱们用Groovy本身的特性就能轻松搞定,两种方案任你选:
方案1:快速简单(适合不需要保留注释的场景)
如果你的Properties文件没有需要保留的注释或特殊格式,直接把Map转换成键值对字符串写回去就行,用Jenkins自带的writeFile步骤:
node('hozuki-best-girl') { def propertiesPath = "${env.hozuki_properties}" def props = readProperties file: propertiesPath // 修改目标属性 props['versionCode'] = 100500 // 将Map转换成properties格式的文本,每行一个键值对 def propsText = props.collect { key, value -> "$key=$value" }.join('\n') // 写回原文件 writeFile file: propertiesPath, text: propsText }
这个方法简单直接,缺点是会丢失原文件里的注释、空行和原有格式,适合结构简单的Properties文件。
方案2:保留注释和格式(更严谨的场景)
如果你的Properties文件有注释需要保留,那就用Groovy原生的Properties类来处理,它能完整保留原文件的注释和格式:
node('hozuki-best-girl') { def propertiesPath = "${env.hozuki_properties}" // 用Groovy的Properties类读取文件,保留注释 def props = new Properties() def inputStream = new FileInputStream(propertiesPath) props.load(inputStream) inputStream.close() // 修改属性(注意:Properties的setProperty要求值是字符串,所以数字要转成字符串) props.setProperty('versionCode', '100500') // 写回文件,还可以添加修改注释 def outputStream = new FileOutputStream(propertiesPath) props.store(outputStream, "Updated versionCode via Jenkins Pipeline") // 第二个参数是文件头部的注释 outputStream.close() }
注意事项
- 确保Jenkins Agent有该文件的写入权限,不然会报权限错误;
- 如果文件在远程节点上,要确保
propertiesPath是Agent上的有效路径; - 用
setProperty时,值必须是字符串类型,直接传数字会导致类型错误哦。
内容的提问来源于stack exchange,提问作者Hozuki Ferrari
相关产品推荐
相关产品推荐

