我正在尝试检查文件的 md5sum 并将 Okay 导出到 var。然后检查该 var 以标记其正常,如果它不是则构建失败。
我如何将 md5checksum 的结果保存到我可以在 Jenkins 中检查的变量。
我早些时候发现了这个,但它没有看到工作。每当我尝试运行脚本时,我都会收到 jerkins 的错误消息。
md5Check = sh( script: 'md5sum -c ${env.SSH_HOME}/MD5SUM.MD5', returnStdout: true ).trim()
sh "sudo ssh -i ${env.SSH_KEY} ${env.SSH_URL} -tt \"cd ${env.SSH_HOME}/; echo ${md5Check}\""
它根本不喜欢第一行。有没有其他方法可以做到这一点?
错误:
WorkflowScript: 44: Expected a step @ line 44, column 17.
md5Check = sh "sudo ssh -i ${env.SSH_KEY}
${env.SSH_URL} -tt \"cd ${env.SSH_HOME}/; md5sum -c
${env.SSH_HOME}/MD5SUM.MD5;\""
^
1 error
at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:310)
更新:
我能够使用下面提供的 2 个答案解决此问题,但现在 sh 命令在 Jenkins 端运行,而不是通过 ssh。
我还发现我需要将代码包装在脚本和节点中才能运行脚本。
script{
node(){
unstash 'build'
env.FAIL=sh([script: "md5sum -c ${env.SSH_HOME}/MD5SUM.MD5", returnStdout: true ]).trim()
sh "sudo ssh -i ${env.SSH_KEY} ${env.SSH_URL} -tt \"cd ${env.SSH_HOME}/; echo ${env.FAIL}\""
}
}
因此,使用 echo ${env.FAIL} 它现在调用正确的命令但无法找到该文件,因为我认为它在 Jenkins shell 中运行它而不是 ssh。
更新 2
好的,所以如果我将 ssh 内容移动到定义的脚本中,然后从 Jenkins shell 调用 echo 它会正确地在远程服务器上找到该文件。这是我使用的最终代码。
script{
node(){
unstash 'build'
env.FAIL=sh([script: "sudo ssh -i ${env.SSH_KEY} ${env.SSH_URL} -tt \"cd ${env.SSH_HOME}/; md5sum -c ${env.SSH_HOME}/MD5SUM.MD5\"", returnStdout: true ]).trim()
sh "sudo echo ${env.FAIL}"
}
}
最佳答案
看起来您缺少用于运行脚本的内部数组:
sh([ script: 'md5sum -c ${env.SSH_HOME}/MD5SUM.MD5', returnStdout: true ]).trim()
每当我在 Jenkins 脚本管道中使用脚本设置变量时,我都是这样做的:
env.V5_DIR = WORKSPACE + '/' + sh([script: "basename ${V5_GIT_URL} .git", returnStdout: true]).trim()
关于shell - Jenkins 将 shell 输出保存到 var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44637152/