当通过Jenkins管道中的shell脚本运行ansible playbook时,echo输出会被缓冲,不会实时显示

当通过Jenkins管道中的shell脚本运行ansible playbook时,echo输出会被缓冲,不会实时显示,shell,jenkins,ansible,jenkins-pipeline,Shell,Jenkins,Ansible,Jenkins Pipeline,下面我附上了Jenkins的管道代码。runansible.sh脚本接受给定的参数,然后根据paramMode值运行ansible playbook。在终端中启动shell脚本时,我会得到ansible playbook运行的实时输出,但在使用Jenkins管道时,我只会在echo阶段得到加载齿轮。我没有得到任何回声输出,直到整个剧本都完成了,然后它一次吐出来。我需要能够像在终端中一样从剧本中获得实时输出,以便在构建过程中监控进度。我需要做什么才能获得实时输出 def paramMode = "

下面我附上了Jenkins的管道代码。runansible.sh脚本接受给定的参数,然后根据
paramMode
值运行ansible playbook。在终端中启动shell脚本时,我会得到ansible playbook运行的实时输出,但在使用Jenkins管道时,我只会在echo阶段得到加载齿轮。我没有得到任何回声输出,直到整个剧本都完成了,然后它一次吐出来。我需要能够像在终端中一样从剧本中获得实时输出,以便在构建过程中监控进度。我需要做什么才能获得实时输出

def paramMode = "${params.mode}"
def paramClientCode = "${params.client_code}"
def paramPrevCodeDropID = "${params.prev_code_drop_id}"
def paramCodeDropID = "${params.code_drop_id}"
def paramReleaseID = "${params.release_id}"
def paramConfigZipVer = "${params.config_zip_ver}"
def paramEmailIDs = "${params.email_ids}"

node {
    stage('one-click') {
        node ('nodeName') {
            git url: "gitURL", branch: "runParallel", credentialsId: "stash_id"
            echo sh (returnStdout: true, script: """
            ./runansible.sh ${paramMode} -h ${paramClientCode} -c ${paramCodeDropID} -r ${paramReleaseID} -v ${paramConfigZipVer} -e ${paramEmailIDs} -p ${paramPrevCodeDropID}
            """)

        }

    }

}

我想您想要的已经是
sh
的默认行为,但是您已经通过使用
returnStdout:true
禁用了它。这会导致捕获并返回输出,而不是打印输出。然后用
echo
打印它

从:

returnStdout(可选)

如果选中,则任务的标准输出为 以字符串形式作为步长值返回,而不是打印到 生成日志。(标准错误(如果有)仍将打印到 日志。)


因此,与其使用echo sh(returnStdout:true,…)不如试试
sh(…)

这就是解决方案。当我试图看到一些简单的东西,比如
ls
命令的输出时,我不得不回显标准输出,但我只需要简单的
sh
。非常感谢。