Bash   发布时间:2022-05-13  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了bash – 无法在Jenkins管道作业中通过DSL(groovy)存储sh命令输出大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在管道jenkins作业中获得最后的构建输出并附加在电子邮件中(使用emailext插件). Curl工作正常,并提供正确的构建输出,但我不能存储在变量中以附加在电子邮件中.我正在使用最新的jenkins版本.

我可以看到有几个简单的sh命令的相关帖子,但这对curl响应存储不起作用.

试过的代码:

1.

@H_618_7@def consoLeoutput = sh(returnStdout: true,script: 'curl http://' + jenkinsUser + ':' + jenkinsUserToken + '@' + jenkinsServer + ':8080/job/' + 'myJob/lastBuild/consoleText').trim() echo consoLeoutput

2.

@H_618_7@sh 'curl http://' + jenkinsUser + ':' + jenkinsUserToken + '@' + jenkinsServer + ':8080/job/' + "${env.JOB_NAME}" + '/lastBuild/consoleText; echo $? > status' def consoLeoutput = readFile('status').trim()

3.

@H_618_7@def consoLeoutput = sh(script: 'curl http://' + jenkinsUser + ':' + jenkinsUserToken + '@' + jenkinsServer + ':8080/job/' + '/myJob/lastBuild/consoleText',returnStatus: truE).split("\r?\n") echo consoLeoutput
看起来你错过了内部数组和一些双引号并转义了双引号来运行脚本: @H_618_7@sh([ script: "curl \"http://${jenkinsUser}:${jenkinsUserToken}@${jenkinsServer}:8080/job/myJob/lastBuild/consoleText\"").trim()

还有多种方法可以执行sHell脚本,这取决于您使用jenkins管道的类型.

jenkins declarative pipeline中,您需要为所有脚本类型代码和设置变量包含一个脚本{…}块,如下所示:

@H_618_7@pipeline { agent { ... } parameters { ... } environment { ... } stages { stage('Run required Scripts') { steps { ... script { NOTIFIER_BULD_NAME = sh([script: "./getNotifier.sh",returnStdout: true]).trim() EMAIL_TEXT = sh([script: "./printEmailText.sh ${CURRENT_BUILD} ${PREVIoUS_BUILD}",returnStdout: true]).trim() BODY= sh([ script: "curl \"http://${jenkinsUser}:${jenkinsUserToken}@${jenkinsServer}:8080/job/myJob/lastBuild/consoleText\"").trim() } } } stage('Send Email') { when { expression { // Only send when there is text. "${EMAIL_TEXT}" != ""; } } steps{ emailext ( to: 'software@company.com',subject: "You have mail - ${EMAIL_TEXT}",body: """${NOTIFIER_BULD_NAME} - ${EMAIL_TEXT}: ... ${BODY} """,attachLog: false ) } } }

jenkins scripted pipeline中,您不需要脚本{}块,实际上可以将它放在大多数地方.大多数情况下,我把它放在舞台块阶段(‘某个舞台’){…},我这样做了

@H_618_7@V5_DIR = WORKSPACE + '/' + sh([script: "basename ${V5_GIT_URL} .git",returnStdout: true]).trim()

然我也使用curl命令(对于脚本管道)并且不需要内部数组…

@H_618_7@lastsuccessfulCommit = sh( script: "curl -sL --user ${jeNKINS_API_USER}:${jeNKINS_API_PSW} \"${lastsuccessfulCommitUrl}\" | sed -e 's/<[^>]*>//g'",returnStdout: true )

作为参,回声变量在两者中都是这样的

@H_618_7@sh([script: "echo \"Value: ${someVariablE}\""])

希望this documentation有点帮助,但我知道最近jenkins的文档可能非常参差不齐,所以我也找到了a great gist about how to not do things for jenkins Declarative pipelines.祝你好运!

大佬总结

以上是大佬教程为你收集整理的bash – 无法在Jenkins管道作业中通过DSL(groovy)存储sh命令输出全部内容,希望文章能够帮你解决bash – 无法在Jenkins管道作业中通过DSL(groovy)存储sh命令输出所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: