我遇到一个我不明白的问题,我编写了一个简单的Groovy脚本,当从命令行调用该脚本时,它可以按预期工作
#!/usr/bin/env groovy
def jsonParse(def json) {
new groovy.json.JsonSlurperClassic().parseText(json)
}
def ticketNumbers = ["MYSTATS-2695", "MYSTATS-2694"]
ArrayList<String> jiraLinks = new ArrayList<String>();
for(int i =0; i < ticketNumbers.size(); i++) {
def jira_json = "curl -o /dev/null -X GET -H Content-Type: application/json --cert-type PEM --key-type PEM -E /Users/Jenkins/.jenkins/workspace/certificates/cert.pem --key /Users/Jenkins/.jenkins/workspace/certificates/cert.pem https://jira.dev.org.co.uk:443/rest/api/2/issue/${ticketNumbers[i]}".execute().text;
def json = jsonParse(jira_json);
def summary = json['fields']['summary'].toString();
jiraLinks.add("[" + ticketNumbers[i] + "](https://jira.dev.org.co.uk/browse/" + ticketNumbers[i] + ")" + " - " + summary);
}
println "${jiraLinks}"
所以当我做 groovy myscript.groovy
这将打印出来
[[MYSTATS-2695 ](https://jira.dev.org.co.uk/browse/MYSTATS-2695 ) - Jenkins build pipeline should ignore draft and pre-releases, [MYSTATS-2694 ](https://jira.dev.org.co.uk/browse/MYSTATS-2694 ) - Android Jenkins pipeline should populate the comscore SDK version automatically]
所以这是预期的。
然后我得到的是一个Groovy脚本,我称之为jenkins管道构建的一部分
class Helpers {
def jsonParse(def json) {
new groovy.json.JsonSlurperClassic().parseText(json)
}
def createJiraLinks(def ticketNumbers) {
ArrayList<String> jiraLinks = new ArrayList<String>();
for(int i =0; i < ticketNumbers.size(); i++) {
def jira_json = "/usr/bin/curl -o /dev/null -X GET -H Content-Type: application/json --cert-type PEM --key-type PEM -E /Users/Jenkins/.jenkins/workspace/certificates/cert.pem --key /Users/Jenkins/.jenkins/workspace/certificates/cert.pem https://jira.dev.org.co.uk:443/rest/api/2/issue/MYSTATS-2695".execute().text;
def json = jsonParse(jira_json);
def summary = json['fields']['summary'].toString();
jiraLinks.add("[" + ticketNumbers[i] + "](https://jira.dev.org.co.uk/browse/" + ticketNumbers[i] + ")" + " - " + summary);
}
return jiraLinks;
}
}
return new Helpers();
作为我的詹金斯建筑的一部分,我有
def groovyMethod = load("${env.WORKSPACE}/groovy_scripts/release_pipeline.groovy")
def jira = groovyMethod.createJiraLinks(ticketNumberCommits);
echo "JIRA LINKAS ARE $jira"
// $jira is always returned as empty string
我在这里误会了什么吗?但是似乎curl请求永远都没有回来
谢谢
groovy
String.execute()返回可能仍在运行的进程(取决于系统负载和天气)
如果要等到过程结束,请执行以下操作:
def txt = "cmd /c dir c:\\".execute().with{
def output = new StringWriter()
def error = new StringWriter()
//wait for process ended and catch stderr and stdout
it.waitForProcessOutput(output, error)
//check there is no error
assert error.toString().size()==0: "$error"
//println it.exitValue() //we can do check with error code
//return stdout from closure
return output.toString()
}
为jenkins pipeline
避免错误,请java.io.NotSerializableException
使用以下代码:
node {
def res = runAndWait("cmd /c dir c:\\")
echo res
}
@NonCPS
String runAndWait(Object cmd){
def proc = cmd.execute()
def output = new StringWriter()
def error = new StringWriter()
//wait for process ended and catch stderr and stdout
proc.waitForProcessOutput(output, error)
//check there is no error
assert error.toString().trim().size()==0: "$error"
//assert proc.exitValue()==0 //we can do check with error code
//return stdout from closure
return output.toString()
}
问题内容: PHP必须正确地转义任何可能引起问题的字符。为BASH模仿此功能的最佳方法是什么? 无论如何,有使用bash做准备好的mysql语句吗?这似乎是最好的方法。 我的大多数变量都不会(不应)具有特殊字符,但是我为用户提供了完全自由的密码密码。它可能包含’和’之类的字符。 我可能正在执行多个SQL语句,所以我想创建一个包含参数并随后运行该语句的脚本。这是我到目前为止的内容: doSQL.sh
我想在詹金斯中强制执行以下场景: 我有工作A和工作B 我想在执行作业B时禁用作业A,在执行作业B后,我想再次启用作业A。 为了启用/禁用作业A,我使用了Groovy插件:Groovy插件 Groovy插件提供了两种可能性:执行Groovy脚本和执行系统Groovy脚本。 在开始执行作业B时,我添加了以下代码片段: 执行工作B后: 当我运行作业B时,它失败了,出现以下异常: 当我运行作业B时,它失败
我正试图用脚本方法安装一个模块,但我不知道如何用节点脚本语言安装,或者如果你有任何想法请与我分享。
问题内容: 我在Windows提示符下运行以下命令: 我收到以下错误: 我搜索了解决方案并找到了替代方法,例如将json数据放入文件中,但是由于某些原因,我无法使用它。 谢谢! 问题答案: Windows 不支持单引号的字符串。使用和逃避内部的。
IM 创建一个 groovy 脚本,用于从 docker 容器执行 SQL 脚本。这是我要执行的命令 当我从终端执行它时,它是有效的,但是当我调用我的groovy脚本来执行那一行时,我得到一个mysql帮助,就像命令不正确一样。 这就是我从groovy执行命令的方式: 有人知道为什么结果不一样或者为什么命令无法识别吗?