Linux Jenkins可运行的Groovy脚本在Windows Jenkins因无curl失效求解决方案
解决Windows Jenkins上Groovy脚本无法执行curl命令的问题
你的问题核心是Windows系统默认没有预装curl命令,导致依赖系统curl的脚本无法运行。我们可以改用Groovy内置的HTTP请求能力来替代curl,这样脚本就能跨Linux和Windows平台运行了,不需要依赖外部工具。
下面是修改后的完整脚本:
import groovy.json.JsonSlurper import java.net.URL import java.net.HttpURLConnection import java.util.Base64 try { List<String> artifacts = new ArrayList<String>() // Jira API请求地址 def artifactsUrl = 'https://companyname.atlassian.net/rest/api/2/search?jql=project=11411%20and%20issuetype%20in%20(Story)%20and%20labels%20in%20(demo)+&fields=summary' // 处理Basic认证:将用户名和token编码为Base64 def auth = "someusername@xxxx.com:tokenkey" def encodedAuth = Base64.getEncoder().encodeToString(auth.getBytes()) def authHeader = "Basic ${encodedAuth}" // 创建HTTP连接并配置请求 URL url = new URL(artifactsUrl) HttpURLConnection connection = (HttpURLConnection) url.openConnection() connection.setRequestMethod("GET") connection.setRequestProperty("Authorization", authHeader) connection.setRequestProperty("Content-Type", "application/json") connection.setRequestProperty("Accept", "application/json") // 读取响应内容 def artifactsObjectRaw = new BufferedReader(new InputStreamReader(connection.getInputStream())).text // 解析JSON并提取摘要 def parser = new JsonSlurper() def json = parser.parseText(artifactsObjectRaw) for(item in json.issues){ artifacts.add(item.fields.summary) } // 返回结果列表 return artifacts } catch (Exception e) { println "There was a problem fetching the artifacts: ${e.message}" e.printStackTrace() // 可选:打印完整栈信息方便调试 }
关键改动说明:
- 移除curl依赖:不再调用系统的
curl命令,改用Java标准库的HttpURLConnection发起HTTP请求,Groovy可以直接使用这些API,完全跨平台。 - 手动处理Basic认证:原来curl的
-u username:token参数,等价于在请求头中添加Authorization: Basic <base64编码的用户名:token>,这里我们手动完成了Base64编码和请求头设置,和curl的效果完全一致。 - 兼容性拉满:所有代码基于Java/Groovy标准库,不需要额外安装依赖,在Linux和Windows Jenkins环境下都能稳定运行。
内容的提问来源于stack exchange,提问作者shaharnakash
相关产品推荐
相关产品推荐

