当前位置: 首页 > 知识库问答 >
问题:

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

裴浩歌
2023-03-14

我正在使用共享库在Jenkins中构建CI/CD管道。在我的例子中,一些阶段需要通过网络应用编程接口发送执行信息。在这种情况下,我们需要将当前阶段的阶段id添加到api调用中。

如何访问与${stage_NAME}类似的stage id?

共有1个答案

龙星辰
2023-03-14

我使用管道RESTAPI插件以及HTTP请求插件

您在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
}
 类似资料:
  • 问题内容: 我需要在声明式管道中启动一组动态测试。为了更好的可视化目的,我想为每个测试创建一个阶段。有办法吗? 创建一个我知道的阶段的唯一方法是: 我已经看到了这个示例,但是我没有使用声明性语法。 问题答案: 使用声明性语法比声明性语法更具灵活性的脚本化语法,即使声明性文档和建议性更多。 例如,可以循环创建阶段:

  • 问题内容: 我正在尝试做这样的事情: 但这给了我这个例外: 是否可以将阶段定义为外部闭包? 问题答案: 您不能在声明式管道之外定义阶段。声明性管道的主要目的是提供经过简化且自以为是的语法,因此您可以专注于应该做什么(通过使用一些可用的步骤)而不是如何去做。 如果您对更灵活的管道实现方式感兴趣,可以选择“ 脚本化管道”方法,该语法在语法方面并不严格-仅受Groovy和CPS执行模块的限制。 您的示例

  • 我正在编写一个Groovy脚本,其中包含部署terraform的作业。我正在使用作业DSL并使种子作业由JCasC实现,一切正常。然后我有一个包含作业的Groovy文件的存储库。 如果我将Groovy文件保持为单个作业,它就可以正常工作。 然而,我希望能够构建具有构建阶段的管道。我知道我可以把管道写在詹金斯文件中 我有这个作为开始: 但是,我看到了这个错误: 我已经尝试了各种方法,并阅读了一堆文档

  • 问题内容: 仅在构建特定分支时,如何运行构建步骤/阶段? 例如,仅在调用分支的情况下才运行部署步骤,而其他所有都保持不变。 问题答案: 在声明性管道语法中执行相同的操作,以下是一些示例: 出现更有效的方法-https: //issues.jenkins- ci.org/browse/JENKINS-41187 另请 参阅- https://jenkins.io/doc/book/pipeline/

  • 仅当构建特定分支时,如何运行构建步骤/阶段? 例如,仅当分支被称为时才运行部署步骤,其他操作保持不变。

  • 我对詹金斯管道和时髦的剧本非常陌生,所以请耐心听我说。我试图设置一个詹金斯管道,在那里我可以访问当前构建中的修改(Git)文件。我使用以下代码行来完成此操作: 如果当前构建中没有文件更改,这将正常工作,但将抛出异常java.io.NotSeriazableExcture:hudson.plugins.git.GitChangeSetList否则。 如果我删除或注释掉“def ChangeLogSe