我试图检查文件的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}"
}
}
答案 0 :(得分:4)
看起来你错过了运行脚本的内部数组:
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()
答案 1 :(得分:1)
我想知道你的问题是否是因为在第一行中你使用的是单引号,而不是双引号。即试试
md5Check = sh( script: "md5sum -c ${env.SSH_HOME}/MD5SUM.MD5", returnStdout: true ).trim()