groovy 我可以访问Jenkins管道中的当前阶段ID吗?

b1zrtrql  于 2022-11-01  发布在  Jenkins
关注(0)|答案(2)|浏览(196)

我正在使用共享库在Jenkins中构建CI/CD管道。在我的例子中,一些阶段需要通过Web API发送执行信息。在本例中,我们需要将当前阶段的阶段ID添加到API调用中。
如何访问与${STAGE_NAME}类似的阶段ID?

j9per5c4

j9per5c41#

我使用管道REST API Plugin以及HTTP Request Plugin
您在Jenkinsfile中的方法可能如下所示:

@NonCPS
def getJsonObjects(String data){
    return new groovy.json.JsonSlurperClassic().parseText(data)
}

def getStageFlowLogUrl(){
    def buildDescriptionResponse = httpRequest httpMode: 'GET', url: "${env.BUILD_URL}wfapi/describe", authentication: 'mtuktarov-creds'
    def buildDescriptionJson = getJsonObjects(buildDescriptionResponse.content)
    def stageDescriptionId = false

    buildDescriptionJson.stages.each{ it ->
        if (it.name == env.STAGE_NAME){
            stageDescriptionId = stageDescription.id
        }
    }
return stageDescriptionId
}
new9mtju

new9mtju2#

问题是旧的,但我找到了解决方案:使用pipeline-stage-view-plugin中的一些代码(看起来它已经默认安装在jenkins中)
我们可以获取当前作业(workflowrun)并将其作为参数传递给
工作流、休息、外部、运行扩展、创建和whoala:我们有一个对象,它包含了执行步骤和时间信息
完整的代码将如下所示:

import com.cloudbees.workflow.rest.external.RunExt
import com.cloudbees.workflow.rest.external.StageNodeExt

def getCurrentBuildStagesDuration(){
  LinkedHashMap stagesInfo = [:]
  def buildObject = com.cloudbees.workflow.rest.external.RunExt.create(currentBuild.getRawBuild())
  for (StageNodeExt stage : buildObject.getStages()) {
    stagesInfo.put(stage.getName(), stage.getDurationMillis())
  }
  return stagesInfo
}

函数将返回{SomeStage1=7, SomeStage2=1243, SomeStage3=5}
使用Jenkins共享库和Jenkins 2.303.1进行测试
希望对某人有帮助)

相关问题