Jenkins将shell输出保存为var

时间:2017-06-19 18:05:21

标签: 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}"
     }
}

2 个答案:

答案 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()