【发布时间】: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 以上的版本。有关详细信息,请参阅接受的答案。
【问题讨论】:
-
使用哪个版本的声明式管道插件?