You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins执行OpenShift start-build命令时如何获取更详细日志?

OpenShift二进制构建场景下获取详细调试日志方案

针对Jenkins OpenShift插件执行二进制构建报错时无法获取完整日志的问题,可通过拆分构建启动、日志拉取、状态查询三个步骤解决,无需使用不支持的--build-loglevel参数,具体操作如下:

步骤1:调整构建启动参数,获取唯一构建标识

按照官方建议移除startBuild中的--wait、--follow参数,启动构建后直接获取构建对象名称用于后续操作:

// 启动二进制构建,返回构建对象全称
def buildName = openshift.selector(BUILD_CONFIG_NAME, "${appBcName}").startBuild("--from-dir=${artifactPath}", '-o=name').out.trim()
echo "已触发OpenShift构建任务:${buildName}"

步骤2:拉取全量构建执行日志

构建启动后可通过logs命令获取完整构建流程输出,包含镜像拉取、构建执行、产物推送全阶段日志,不受二进制源类型限制:

// 等待构建初始化完成,避免日志查询命令报错
sleep 10
// 拉取带时间戳的全量构建日志
def buildFullLogs = openshift.selector(buildName).logs('--timestamps', '-f').out
echo "构建全量日志如下:\n${buildFullLogs}"

步骤3:构建启动失败时查询状态与关联事件

如果遇到构建调度超时等平台侧错误,可直接查询构建对象的状态详情和关联事件,定位调度失败根因(如资源不足、权限异常、镜像拉取失败等):

// 查询构建对象完整状态信息
def buildStatusDetail = openshift.selector(buildName).object().status
echo "构建状态详情:\n${new groovy.json.JsonBuilder(buildStatusDetail).toPrettyString()}"

// 查询该构建关联的集群事件,快速定位异常原因
def buildRelatedEvents = openshift.raw(
    'get', 'event',
    '--field-selector', "involvedObject.name=${buildName.split('/')[1]}",
    '-o', 'custom-columns=触发时间:.lastTimestamp,事件类型:.type,错误原因:.reason,详情:.message'
).out
echo "构建关联集群事件:\n${buildRelatedEvents}"

完整流水线容错示例

将上述逻辑整合为带异常捕获的流水线片段,无论构建成功或失败都可输出完整排查信息:

def buildName = ""
try {
    // 1. 启动构建
    buildName = openshift.selector(BUILD_CONFIG_NAME, "${appBcName}").startBuild("--from-dir=${artifactPath}", '-o=name').out.trim()
    echo "已启动构建:${buildName}"

    // 2. 等待构建完成,自定义超时时间(单位:分钟)
    openshift.selector(buildName).untilEach(120) {
        return it.object().status.phase in ['Complete', 'Failed', 'Cancelled']
    }

    // 3. 输出构建日志
    def buildLogs = openshift.selector(buildName).logs('--timestamps').out
    echo "构建执行日志:\n${buildLogs}"

    // 4. 判断构建结果
    def finalStatus = openshift.selector(buildName).object().status.phase
    if (finalStatus != 'Complete') {
        error "构建执行失败,最终状态:${finalStatus}"
    }
} catch (Exception e) {
    echo "构建流程异常,输出排查信息:"
    if (buildName) {
        // 异常时输出构建状态和关联事件
        def events = openshift.raw(
            'get', 'event',
            '--field-selector', "involvedObject.name=${buildName.split('/')[1]}",
            '-o', 'custom-columns=TIME:.lastTimestamp,TYPE:.type,REASON:.reason,MESSAGE:.message'
        ).out
        echo "关联集群事件:\n${events}"
        def status = openshift.selector(buildName).object().status
        echo "构建状态详情:\n${new groovy.json.JsonBuilder(status).toPrettyString()}"
    }
    throw e
}

内容的提问来源于stack exchange,提问作者Kaliyug Antagonist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 10:36:05