首页 > 解决方案 > 詹金斯:声明性管道中的未知阶段部分“矩阵”

问题描述

我是 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 中的函数肯定没有任何问题,因为它们在其他几个运行没有问题的 jenkinsfile 中使用。

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()    
        }
     }
   }              
}

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

我使用詹金斯:2.198

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

标签: jenkinsjenkins-pipeline

解决方案


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

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

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

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


推荐阅读