如何在Jenkins的Groovy后置构建脚本中传递参数?
解决Jenkins Groovy后置脚本无法获取VERSION_CURR参数的问题
错误原因
- 原代码中使用了不存在的
manager对象,在Groovy后置构建脚本环境中,直接通过build对象即可访问构建变量。 - 单引号字符串在Groovy中不会执行变量插值,因此
'${VERSION_CURR}'无法被替换为实际参数值。 - 直接引用
VERSION_CURR变量会失败,因为脚本环境未直接暴露该参数,需通过build.buildVariables方法获取。
修复后的脚本
import java.io.BufferedReader import java.io.InputStreamReader import java.io.OutputStreamWriter import java.net.URL import java.net.URLConnection def sendPostRequest(urlString, paramString) { def url = new URL(urlString) def conn = url.openConnection() conn.setDoOutput(true) def writer = new OutputStreamWriter(conn.getOutputStream()) writer.write(paramString) writer.flush() String line def reader = new BufferedReader(new InputStreamReader(conn.getInputStream())) while ((line = reader.readLine()) != null) { println line } writer.close() reader.close() } // 正确获取构建参数VERSION_CURR def versionCurr = build.buildVariables.get("VERSION_CURR") // 使用双引号字符串进行插值,同时保留Telegram的Markdown格式 def result = "Project: *Autotests* \n Version *${versionCurr}* \n" sendPostRequest("https://api.telegram.org/bot{token}/sendMessage", "parse_mode=Markdown&chat_id={id_Chat}&reply_to_message_id=&text=${result}")
额外说明
- 如果你的Groovy脚本运行在Pipeline环境中,获取参数的方式应为
env.VERSION_CURR,替换后的代码片段如下:def versionCurr = env.VERSION_CURR - 确保Telegram的Markdown格式符合要求,避免出现未转义的特殊字符导致消息发送失败。
内容的提问来源于stack exchange,提问作者Otto Rahn
相关产品推荐
相关产品推荐

