在我的声明性管道中,我有多个不需要Xvfb的阶段,有多个不需要的Xvfb测试阶段。
是否可以为多个阶段定义一个Jenkins wrapper?像这样:
pipeline {
agent any
stages {
stage('Build the context') {
steps {
echo 'No Xvfb here'
}
}
wrap([$class: 'Xvfb', screen: '1920x1080x24']) {
stage('Test Suite 1') {
steps {
echo 'Use Xvfb here'
}
}
stage('Test Suite 2') {
steps {
echo 'Use Xvfb here'
}
}
}
stage('cleanup') {
steps {
echo 'No Xvfb here'
}
}
}
无论将包装块放置几个阶段,我都会遇到编译错误:
WorkflowScript: 10: Expected a stage @ line 10, column 17.
wrap([$class: 'Xvfb', screen: '1920x1080x24'])
由于wrap
是一个步骤,我们必须从steps
或script
上下文中调用它。只有后者允许我们在wrap
块内部创建嵌套阶段。试试这个:
pipeline {
agent any
stages {
stage('Build the context') {
steps {
echo 'No Xvfb here'
}
}
stage('Test Start') {
steps {
script {
wrap([$class: 'Xvfb', screen: '1920x1080x24']) {
stage('Test Suite 1') {
echo 'Use Xvfb here'
}
stage('Test Suite 2') {
echo 'Use Xvfb here'
}
}
}
}
}
//...
}
}
额外的“测试开始”阶段可能看起来有些难看,但是可以。
注:嵌套测试阶段不需要steps
块,因为我们已经在script
块内,因此适用与脚本化管道相同的规则。