jenkins - 如何在 jenkins 管道构建日志中禁用命令输出

标签 jenkins jenkins-pipeline jenkinsfile

我正在使用 Jenkinsfile 编写管道脚本。

有什么方法可以禁用在构建日志中打印已执行的 shell 命令?

这里只是一个 jenkins 管道的简单例子:

node{
  stage ("Example") {
    sh('echo shellscript.sh arg1 arg2')
    sh('echo shellscript.sh arg3 arg4')        
  }
}

它在控制台日志中产生以下输出:
[Pipeline] node
Running on master in /var/lib/jenkins/workspace/testpipeline
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Test)
[Pipeline] sh
[testpipeline] Running shell script
+ echo shellscript.sh arg1 arg2  
shellscript.sh arg1 arg2
[Pipeline] sh
[testpipeline] Running shell script
+ echo shellscript.sh arg3 arg4
shellscript.sh arg3 arg4
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

基本上我想禁用命令本身的打印。
+ echo shellscript.sh arg1 arg2
+ echo shellscript.sh arg3 arg4

最佳答案

默认情况下,Jenkins 启动带有标志的 shell 脚本 -xe . -x启用额外的日志记录。 -e如果其中的任何命令返回非零退出状态,则使脚本退出。要重置标志,我建议两个选项:

  • 调用 set +x在您的脚本正文中。
  • 通过自定义shebang线无需-x :sh('#!/bin/sh -e\n' + 'echo shellscript.sh arg1 arg2')

  • 至于第二个选项,为了方便起见,您可以定义一个包装函数,它会在脚本前面加上自定义的shebang,然后调用sh
    def mysh(cmd) {
        sh('#!/bin/sh -e\n' + cmd)
    }
    

    关于jenkins - 如何在 jenkins 管道构建日志中禁用命令输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39891926/

    相关文章:

    jenkins - 如何从没有 jenkinsfile 的存储库触发 Jenkins 管道构建?

    Jenkinsfile 构建日志

    amazon-web-services - 如何将特定工件版本部署到 AWS ECS,而不在 Cloudformation 模板中对其 ID 进行硬编码

    jenkins - 在 Jenkins 管道作业中访问 BitBucket 有效负载数据

    jenkins - 在 Groovy 中使用分隔符拆分字符串并避免 IndexOutOfBoundsException

    docker - 如何在Jenkinsfile中创建函数?

    jenkins - 将 Jenkins 的管理员用户添加到 kubeadm kubernetes 集群

    jenkins - 如何使用 Github Webhook 触发 Jenkins 中的管道

    Jenkins java.lang.NoClassDefFoundError : com/trilead/ssh2/crypto/Base64