gpt4 book ai didi

shell - Jenkins 将 shell 输出保存到 var

转载 作者:行者123 更新时间:2023-12-05 00:51:17 29 4
gpt4 key购买 nike

我正在尝试检查文件的 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com