代码之家  ›  专栏  ›  技术社区  ›  velsim cowls

Access Stage导致工作流/管道插件

  •  7
  • velsim cowls  · 技术社区  · 9 年前

    我有一个不同阶段的管道。我希望当前作业检查上一个构建中已通过了多少个阶段,并将其记录在控制台中?

    考虑一下这是我目前的管道

    node(){
     stage "1"
     do something
    
     stage "2"
     do something else
    }
    

    我想用一个groovy脚本来实现这样的功能

    println currentBuild.previousBuild.getStage("1").result
    

    我代码的目的是跟踪成功;我的构建中不同阶段的失败。这种方法有什么替代方案吗?

    3 回复  |  直到 9 年前
        1
  •  11
  •   hakamairi    9 年前

    你肯定可以用 Pipeline REST API Plugin ,对我来说,Jenkins 2.13的开箱即用。

    通过解析生成的JSON,您可以获得与预期类似的阶段状态。对于api调用,我个人使用http_request插件。

    从文档GET/job/:job-name/:run-id/wfapi/description返回:

    {
        "_links": {
            "self": {
                "href": "/jenkins/job/Test%20Workflow/16/wfapi/describe"
            },
            "pendingInputActions": {
                "href": "/jenkins/job/Test%20Workflow/16/wfapi/pendingInputActions"
            }
        },
        "id": "2014-10-16_13-07-52",
        "name": "#16",
        "status": "PAUSED_PENDING_INPUT",
        "startTimeMillis": 1413461275770,
        "endTimeMillis": 1413461285999,
        "durationMillis": 10229,
        "stages": [
            {
                "_links": {
                    "self": {
                        "href": "/jenkins/job/Test%20Workflow/16/execution/node/5/wfapi/describe"
                    }
                },
                "id": "5",
                "name": "Build",
                "status": "SUCCESS",
                "startTimeMillis": 1413461275770,
                "durationMillis": 5228
            },
            {
                "_links": {
                    "self": {
                        "href": "/jenkins/job/Test%20Workflow/16/execution/node/8/wfapi/describe"
                    }
                },
                "id": "8",
                "name": "Test",
                "status": "SUCCESS",
                "startTimeMillis": 1413461280998,
                "durationMillis": 4994
            },
            {
                "_links": {
                    "self": {
                        "href": "/jenkins/job/Test%20Workflow/16/execution/node/10/wfapi/describe"
                    }
                },
                "id": "10",
                "name": "Deploy",
                "status": "PAUSED_PENDING_INPUT",
                "startTimeMillis": 1413461285992,
                "durationMillis": 7
            }
        ]
    }
    
        2
  •  8
  •   Adir Dayan    5 年前

    您可以迭代构建的所有阶段并执行所需操作:

        WorkflowRun run = Jenkins.instance.getItemByFullName("####YOUR_JOB_NAME####")._getRuns()[0]
        FlowExecution exec = run.getExecution()
        PipelineNodeGraphVisitor visitor = new PipelineNodeGraphVisitor(run)
        def flowNodes = visitor.getPipelineNodes()
    
        for (Iterator iterator = flowNodes.iterator(); iterator.hasNext();)
        {
            def node = iterator.next()
            if (node.getType() == FlowNodeWrapper.NodeType.STAGE)
            {
                   String stageName = node.getDisplayName()
                   def stageResult = node.getStatus().getResult()
    
                   println "Result of stage ${stageName} is ${stageResult}"
            }
        }
    
        3
  •  2
  •   link89    6 年前

    以下是迭代所有流节点并获取所需信息的示例代码:

    import org.jenkinsci.plugins.workflow.graph.FlowGraphWalker
    import org.jenkinsci.plugins.workflow.graph.FlowNode
    
    try {
        // just for demo, a success step and a failure step
        node {
            sh 'true'
            sh 'false'
        }
    } finally {
        FlowGraphWalker walker = new FlowGraphWalker(currentBuild.rawBuild.getExecution())
        for (FlowNode flowNode: walker) {
            // do whatever you want with flowNode
            echo flowNode.dump()
        }
    }