我想要检查一个文件的md5sum并将结果存储到一个变量中,然后检查该变量以标记其是否正常,如果不正常则失败构建。
我该如何将md5checksum的结果保存到Jenkins中可以检查的变量中。
我之前找到了这篇文章,但它似乎无法正常工作。每当我尝试运行脚本时,都会从Jenkins中收到错误信息。
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)
更新:
我已经通过下面提供的两个答案来解决问题,但现在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 ./myScript.sh
命令调用该脚本。如果你需要从脚本中获取输出,可以尝试使用类似于env.FAIL=$(sh ./myScript.sh)
的方式。此外,如果密钥和ssh url是敏感信息,你是否考虑将它们放入Jenkins的凭据中? - Wimateeka