开发者社区 问答 正文

如何在詹金斯管道中仅获取当前阶段的控制台输出?

正在尝试获取jenkins管道中当前阶段的控制台输出。我的最终目标是存储此输出,直到构建发布步骤为止,然后通过不和谐通知发出该输出。

   ```js

stage("Build Javadoc") { steps { script { try { sh script: "cd ${params.PLUGIN} && /opt/gradle/bin/gradle atherysdoc" } catch (Exception e) { exception = e; failureReason = // Get current stage console output? throw e; } } } }

      ```js
failure {
            discordSend webhookURL: "https://discordapp.com/api/webhooks/blahblah",
                        title: "Build Failure: ${fullPluginName}",
                        successful: false,
                        result: 'FAILURE',
                        link: env.BUILD_URL,
                        description: "${exception}\n```${failureReason}```"
        }

我想要这个的原因是因为仅发出失败的shell命令的异常是结果为hudson.AbortException: script returned exit code 1,这不是很有帮助

展开
收起
几许相思几点泪 2019-12-22 18:24:52 1193 分享 版权
阿里云 AI 助理回答

在Jenkins中获取管道中当前阶段的控制台输出并存储以供后续使用,可以通过几个步骤来实现。这里是一个简化的方案,结合了Jenkins Pipeline的脚本指令、插件以及外部服务(如Discord通知)的集成。

1. 捕获构建阶段的输出

在Jenkins Pipeline中,你可以使用tee命令或者Groovy的脚本块来捕获shell命令的输出。然后,可以将这些输出保存到一个文件或变量中。

stage("Build Javadoc") {
    steps {
        script {
            try {
                // 使用tee命令将输出同时打印到控制台和重定向到文件
                sh """
                    cd ${params.PLUGIN}
                    your_build_command_here | tee ${WORKSPACE}/build_output.txt
                """
                // 或者使用Groovy方式捕获输出
                def output = sh(script: "cd ${params.PLUGIN} && your_build_command_here", returnStdout: true).trim()
                // 然后你可以将$output保存或处理
            } catch (err) {
                echo "Error during build: ${err}"
                currentBuild.result = 'FAILURE'
            }
        }
    }
}

2. 存储输出直到构建发布步骤

你已经通过上述方法在每个需要的阶段捕获了输出,并可以选择性地将其存储为文件或变量。确保这个数据在后续步骤中是可访问的,比如通过环境变量或直接引用之前定义的变量。

3. 发送Discord通知

要通过Discord发送通知,你可以使用Jenkins的discord-notifications-plugin或其他类似插件。如果插件不满足需求,也可以编写自定义脚本来调用Discord的Webhooks。

首先,安装并配置discord-webhook-jenkins-plugin(如果存在且适用),或者准备一个可以直接调用的Shell/Python脚本来发送Webhook请求。

post {
    always {
        script {
            // 假设你已经有了一个用于发送Discord消息的脚本或命令
            discordSend color: 'good', message: "构建完成。\n\n**控制台输出:**\n${output}", webhookUrl: 'YOUR_WEBHOOK_URL_HERE'
            // 如果没有插件,可以使用curl或类似的工具直接调用Webhook
            // sh "curl -H 'Content-Type: application/json' -X POST -d '{\"content\": \"${output}\"}' YOUR_WEBHOOK_URL_HERE"
        }
    }
}

请替换YOUR_WEBHOOK_URL_HERE为你的实际Discord Webhook URL,并根据实际情况调整消息内容格式。

注意:在实际应用中,你需要确保Jenkins服务器能够访问外部网络以发送Webhook请求,并且考虑到安全性,不要在脚本中硬编码敏感信息。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答