我正在使用共享库在Jenkins中构建CI/CD管道。在我的例子中,一些阶段需要通过Web API发送执行信息。在本例中,我们需要将当前阶段的阶段ID添加到API调用中。如何访问与${STAGE_NAME}类似的阶段ID?
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 }
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进行测试希望对某人有帮助)
{SomeStage1=7, SomeStage2=1243, SomeStage3=5}
2条答案
按热度按时间j9per5c41#
我使用管道REST API Plugin以及HTTP Request Plugin
您在Jenkinsfile中的方法可能如下所示:
new9mtju2#
问题是旧的,但我找到了解决方案:使用pipeline-stage-view-plugin中的一些代码(看起来它已经默认安装在jenkins中)
我们可以获取当前作业(workflowrun)并将其作为参数传递给
工作流、休息、外部、运行扩展、创建和whoala:我们有一个对象,它包含了执行步骤和时间信息
完整的代码将如下所示:
函数将返回
{SomeStage1=7, SomeStage2=1243, SomeStage3=5}
使用Jenkins共享库和Jenkins 2.303.1进行测试
希望对某人有帮助)