当通过Jenkins管道中的shell脚本运行ansible playbook时,echo输出会被缓冲,不会实时显示
下面我附上了Jenkins的管道代码。runansible.sh脚本接受给定的参数,然后根据当通过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 = "
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
。非常感谢。