【问题标题】:When running an ansible playbook via a shell script in Jenkins pipeline, the echo output is buffered and does not show in real time通过 Jenkins 管道中的 shell 脚本运行 ansible playbook 时,回显输出被缓冲并且不会实时显示
【发布时间】:2019-07-30 16:00:14
【问题描述】:

所以下面我附上了我的 Jenkins 流水线代码。 runansible.sh 脚本接受给定的参数,然后继续运行基于 paramMode 值的 ansible playbook。在终端中启动 shell 脚本时,我会得到 ansible playbook 运行的实时输出,但是当使用 Jenkins 管道时,我只是在回声阶段得到加载齿轮。在整个剧本完成之前,我不会得到任何回声输出,然后它会一次全部吐出。我需要能够像在终端中那样从剧本中获得实时输出,以便在构建构建时监控进度。我需要做什么才能获得实时输出?

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}
            """)

        }

    }

}

【问题讨论】:

    标签: shell jenkins ansible jenkins-pipeline


    【解决方案1】:

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

    来自documentation of sh

    returnStdout(可选)

    如果选中,则任务的标准输出为 作为步骤值作为字符串返回,而不是打印到 构建日志。 (如果有标准错误,仍将打印到 记录。)

    所以不要尝试echo sh (returnStdout:true, ...),而是尝试sh (...)

    【讨论】:

    • 这就是解决方案。当我试图看到像ls 命令的输出这样简单的东西时,我不得不回显标准输出,但我只需要简单的sh。谢谢。
    猜你喜欢
    • 2020-07-02
    • 1970-01-01
    • 2022-01-12
    • 2020-05-08
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 2021-11-27
    • 2018-11-16
    相关资源
    最近更新 更多