【问题标题】:Jenkins: Unknown stage section "matrix" in declarative pipeline詹金斯:声明性管道中的未知阶段部分“矩阵”
【发布时间】:2021-09-01 23:17:02
【问题描述】:

我是 jenkins 的新手,我尝试根据教程构建声明式管道。 页面上:https://jenkins.io/doc/book/pipeline/syntax/#matrix-cell-directives 有一个关于如何使用我尝试过的矩阵构建管道的示例。

不幸的是,我收到以下错误:

WorkflowScript: 32: Unknown stage section "matrix". Starting with version 0.5, steps in a stage must be in a ‘steps’ block. @ line 32, column 5.
       stage ('Deploy NB') {
       ^

WorkflowScript: 32: Expected one of "steps", "stages", or "parallel" for stage "Deploy NB" @ line 32, column 5.
       stage ('Deploy NB') {

我在 jenkinsfile 中的管道如下所示: 来自 lib 的函数肯定没有任何问题,因为它们在其他几个运行没有问题的 jenkinsfiles 中使用。

pipeline {

  agent {
    node {
      label ""
      // Location of the output files 
      customWorkspace "/home/wf/builds/${env.JOB_NAME}"
    }
  }

  environment {
      // mail addresses that gets notifications about failures, success etc., - comma delimited
      MAIL_NOTIFY = "mustbeanonymous"

      // Server admin (not necessary for wildfly)
      ADMIN_USER = " "
      ADMIN_PWD = " "

      // home directory
      HOME_DIR = "/home/wf"

      // Product name
      PRODUCT_NAME = "MYPRD"
   }

  options {
    disableConcurrentBuilds() 
    durabilityHint("PERFORMANCE_OPTIMIZED")
  }

  stages {
    stage ('Deploy NB') {
      matrix {
        axes {
           axis {
             name 'ENVIRONMENT'
             values 'NB', 'TEST1'
           }
           axis {
             name 'DATABASE'
             values 'ORA', 'ORA_INIT', 'DB2', 'DB2_INIT'
           }
        }

        environment {
          // Server scripts installation path
          SERVER_PATH = "${HOME_DIR}/WildFly16_${PRODUCT_NAME}_${ENVIRONMENT}_${DATABASE}"
          // EAR to deploy on server
          DEPLOY_EAR = "${PRODUCT_NAME}_WF_${DATABASE}.ear"
        }

        stages {
          /* BUILD */
          stage('Init tools') {
            steps {
              script {
                def lib = load "${workspace}/build/Jenkinsfile.lib"
                lib.initTools()    
              }
            }
          }

          stage('Copy Deployment') {
            steps {
              script {
                def lib = load "${workspace}/build/Jenkinsfile.lib"
                lib.copyDeployment()    
              }
            }
          }

          /* DEPLOY */
          stage('Install EAR') {
            steps {
              script {
                  def lib = load "${workspace}/build/Jenkinsfile.lib"
                  lib.installEARDeploy()    
              }
            }
          }
        }
      }
    }
  }


  /* POST PROCESSING */
  post {  
     success {  
        script {
            def lib = load "${workspace}/build/Jenkinsfile.lib"
            lib.onSuccess()    
        }
     }  
     failure {  
        script {
            def lib = load "${workspace}/build/Jenkinsfile.lib"
            lib.onFailure()    
        }
     }  
     unstable {  
        script {
            def lib = load "${workspace}/build/Jenkinsfile.lib"
            lib.onUnstable()    
        }
     }  
     always {
        script {
            def lib = load "${workspace}/build/Jenkinsfile.lib"
            lib.onAlways()    
        }
     }
   }              
}

我试图实现的是管道针对每个环境和数据库(每个单元)运行并执行阶段。 但是我哪里做错了?

我使用 Jenkins:2.198

更新:解决方案是将插件升级到 1.5.0 以上的版本。有关详细信息,请参阅接受的答案。

【问题讨论】:

  • 使用哪个版本的声明式管道插件?

标签: jenkins jenkins-pipeline


【解决方案1】:

您使用什么版本的声明式管道?

Matrix 部分仅在声明式管道插件 1.5.0 版本中添加

https://github.com/jenkinsci/pipeline-model-definition-plugin/releases

要验证版本,请在jenkins.yourcompany.com/pluginManager/api/xml?depth=1 上搜索pipeline-model-definition

【讨论】:

  • 抱歉,我花了一段时间才弄清楚我在哪里可以看到这个:-)。我使用 1.3.8 应该根据您的回答解释行为。非常感谢
  • 我添加了查找插件版本的说明
猜你喜欢
  • 2021-10-17
  • 1970-01-01
  • 2021-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-08
  • 1970-01-01
相关资源
最近更新 更多