shell - Jenkins 将 shell 输出保存到 var

标签 shell jenkins jenkins-pipeline

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

相关文章:

jenkins - 构建完成后手动失败

linux - 如何使用 shell 脚本解析 JSON?

bash -//在 bash 中有什么意义?

python - 使用 vim、shell 或 python 移动小数点

java - PowerMock PrepareForTest 注释导致 AmazonSQSClient 构造函数出现问题

git - hudson git https 密码,我该如何指定?

continuous-integration - Xcode 构建错误 Jenkins : Your session has expired. 请登录

git - Jenkins 多分支管道不修剪从远程删除的分支

android - 使用 shell 或/和 uiautomator 检查主屏幕是否在前台

bash - 用于查找机器操作系统的 Shell 脚本