当前位置: 首页 > 知识库问答 >
问题:

如何从Jenkinsfile(groovy)获取shell命令的输出?

黄高爽
2023-03-14
sh "ls -l"

我该如何做到这一点,特别是因为您似乎无法真正运行jenkinsfile中的任何类型的groovy代码?

共有1个答案

赵超
2023-03-14

管道sh步骤的最新版本允许您执行以下操作;

// Git committer email
GIT_COMMIT_EMAIL = sh (
    script: 'git --no-pager show -s --format=\'%ae\'',
    returnStdout: true
).trim()
echo "Git committer email: ${GIT_COMMIT_EMAIL}"

另一个特性是returnstatus选项。

// Test commit message for flags
BUILD_FULL = sh (
    script: "git log -1 --pretty=%B | grep '\\[jenkins-full]'",
    returnStatus: true
) == 0
echo "Build full flag: ${BUILD_FULL}"

这些选项是根据这个问题添加的。

script {
   GIT_COMMIT_EMAIL = sh (
        script: 'git --no-pager show -s --format=\'%ae\'',
        returnStdout: true
    ).trim()
    echo "Git committer email: ${GIT_COMMIT_EMAIL}"
}
 类似资料:
  • 我正在尝试从jenkinsfile执行一组命令。问题是,当我尝试将stdout的值分配给变量时,它不起作用。我尝试了双引号和单引号的不同组合,但到目前为止没有运气。 在这里,我使用最新版本的jenkinsfile以及旧版本执行脚本。将shell命令放入 """ """ 不允许创建新变量,并给出client_name命令不存在的错误。 我想将命令p4客户端-e$client_name的标准输出分配给

  • 问题内容: 在Jenkinsfile Groovy脚本阶段,假设我要发出一个Linux命令来输出字符串的行和列,并想要在特定行的输出中获取第n列。这样的命令的一个示例是“ ls -al”。所以我这样做正确吗? 但是,如何获取本质上为$ {COL [4]}的值,该值是“ ls -al”命令的第五列,即目录大小? 谢谢! 问题答案: 您在示例中显示的bash脚本不会返回正确的目录大小。它将以递归方式返

  • 问题内容: 我的最终目标是捕获终端中执行的上一条命令。由于〜/ .bash_history不包含当前终端会话中的命令,因此我不能简单地读取该文件。 在另一个线程中,我找到了以下脚本: 这与我要查找的内容非常接近,但是由于它是作为子进程启动的,因此它也不会包括当前终端会话的历史记录。有什么办法可以在当前shell中执行类似的命令? 问题答案: 为什么不直接读取文件。 〜/ .bash_history

  • 问题内容: 我想在脚本内部使用一个变量,然后将其值传递给Shell脚本执行(作为环境变量或命令行参数)。 但是以下内容: 给出输出: 所需的输出类似于: 任何想法如何将值传递给shell scipt吗? 编辑: 基于马特的]答案,我现在使用此解决方案: 好处是,我不需要在shell脚本中转义。 问题答案: 您的代码使用文字字符串,因此您的Jenkins变量将不会在shell命令中插入。您需要使用来

  • 我想在脚本中使用一个变量,然后将其值传递到shell脚本执行中(作为环境变量或命令行参数)。 但是下面的: 给出输出: 期望的输出是这样的: 你知道如何将的值传递给shell scipt吗? 编辑:根据Matt的回答,我现在使用以下解决方案: 优点是,我不需要在shell脚本中转义。

  • 问题内容: 尝试读取的版本号时,我得到了很多其他行,需要忽略。我尝试阅读的手册,并尝试了以下命令: 我想知道这是否正确吗? 问题答案: 是的,这是从命令获取第一行输出的一种方法。 如果命令以相同的方式输出任何您想要捕获的标准错误,则需要将命令的标准错误重定向到标准输出流: 捕获第一行的方法还有很多,包括(在第一行之后退出),(仅打印第一行,但读取所有内容),(仅打印第一行,但再次读取所有内容)等。