从 remoteJobTrigger 中提取日志

Extract Logs from remoteJobTrigger

我正在使用以下代码在 jenkins 管道中触发远程作业。作业触发后,我需要解析日志并检索少量信息。下面的代码使用了 handle.lastLog() 函数,但它返回 null。有没有办法从 triggerRemoteJob 获取日志?

            def handle = triggerRemoteJob (
                auth: TokenAuth(apiToken:....'),...,
                
                job: build_job, 
                parameters: parameters1,
                useCrumbCache: true, 
                useJobInfoCache: true,
                overrideTrustAllCertificates: false,
                trustAllCertificates: true
            )       
            def status = handle.getBuildStatus()
            echo "--------------------------------------------------------------------------------"
            echo "Log: " + handle.lastLog()
            echo "--------------------------------------------------------------------------------"

您可以通过多种方式将输出保存到文件来解析远程作业控制台日志,如下所示:

一种方法是使用 handle 对象来获取远程构建 URL:

def remoteBuildOutput = handle.getBuildUrl().toString()+"consoleText"
sh "curl -o remote_build_output.txt ${remoteBuildOutput} && cat remote_build_output.txt"

另一种方式是输出最后的构建日志:

sh "curl -o remote_last_build_output.txt ${env.JENKINS_URL}/job/build_job/lastBuild/consoleText && cat remote_last_build_output.txt"

如果已设置,您可以使用 env.JENKINS_URL。如果没有,你可以用你的 Jenkins 替换它 URL.

build_job 是您的远程作业的名称。

请注意,如果您使用 /lastBuild/ api 调用,则不能保证最后一次构建与您的作业触发的构建相同(如果 build_job同时被另一个system/person触发)

最后一种方法是通过 enhancedLogging 选项启用 Parameterized Remote Trigger Plugin 日志记录。

如果设置为 true,远程作业的控制台输出也会被记录。

def handle = triggerRemoteJob (
            job: build_job, 
            enhancedLogging: true
            ... 
            )

然后您可以将当前作业输出保存在一个文件中并解析您想要的任何内容:

sh "curl -o current_build_output.txt ${env.JENKINS_URL}job/${env.JOB_NAME}/${currentBuild.number}/consoleText && cat current_build_output.txt"

${currentBuild.number}也可以用${env.BUILD_NUMBER}变量代替