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

使用库中的Jenkins管道,但添加额外的阶段

范轶
2023-03-14

我们有很多很多项目,它们都有自己的Jenkinsfile,它只是执行我们共享库中定义的管道。管道确保所有项目以相同的方式构建、打包和安装。

Project-a/Jenkinsfile

library 'the-shared-library'

buildProject name: 'project-a', buildApi: true, ...

共享库/vars/buildProject。棒极了

def call(Map config) {
  pipeline {
    // standard stages go here
  }
}

我们希望扩展它,以允许在管道期间执行一个额外的阶段,对于某些项目(例如许多项目中的一个)。如果可能的话,我想这样做:

  1. 将作为阶段的配置参数传递到buildProject

像这样的。。。

Project-a/Jenkinsfile

library 'the-shared-library'

def myCustomStage = ... // not sure how

buildProject name: 'project-a', buildApi: true, ..., customStage: myCustomStage

共享库/vars/buildProject。棒极了

def call(Map config) {
  def customStage = config.customStage

  pipeline {
    // standard stages 1 through 3
    // if customStage provided, it goes here
    // standard stages 5 through 5
  }
}

我不确定这里什么是正确的解决方案。

共有1个答案

吕翰飞
2023-03-14

我还没有测试过,但是像这样的东西看起来应该可以工作:

//project-a/Jenkinsfile
library 'the-shared-library'

def myCustomStage = { echo 'Hello' }

buildProject name: 'project-a', buildApi: true, ..., myCustomStage
//the-shared-library/vars/buildProject.groovy
def call(Map config, Closure customStage=null) {
  def customStage = config.customStage

  pipeline {
    // standard stages 1 through 3
    // if customStage provided, it goes here
    stage('Conditional'){
      when{
        expression { customStage }
      }
      steps { script {customStage()} }
    // standard stages 5 through 5
  }
}

请参见我可以使用闭包来定义詹金斯声明管道中的阶段吗?

 类似资料:
  • 现在我需要php-soap扩展,它不在上图中。如何在运行时安装它?或者是否有可能将整个docker配置放在我的管道配置中,whitout从GitHub中提取它?

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

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

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

  • 我正在尝试创建一个定制的Jenkins管道,它将多个Jenkins作业生成的工件绑定在一起。每个作业都在不同的存储库上运行(基于它们自己的文件)。这些Jenkins文件的阶段完成了创建档案、编译代码等任务。 有人可能会说,我可以使用单个作业中的工件,然后将它们绑定在一起,但问题是这个高级管道将在特定的 ,因此它无法凭空创建存档。 由于我是詹金斯管道公司的新手,您对如何解决这个问题有什么建议吗? 最

  • 我正在使用詹金斯声明管道,不知道是否有任何方法可以定期触发特定阶段。 我的意思是,当我们签出SCM时,管道会触发,但阶段2对我们的一些项目来说太长了。因此,我不想等待这个阶段,我只想每天运行这个阶段,但仍然将这个阶段保存在Jenkins文件中。 有没有办法做到这一点?这样做的最佳方法是什么?