我正在使用共享库在Jenkins中构建CI/CD管道。在我的例子中,一些阶段需要通过网络应用编程接口发送执行信息。在这种情况下,我们需要将当前阶段的阶段id添加到api调用中。
如何访问与${stage_NAME}类似的stage id?
我使用管道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