如何中止声明性管道

时间:2017-03-10 12:03:43

标签: jenkins jenkins-pipeline

我正在尝试新的声明性管道语法。

我想知道,当参数的参数值无效时,如何中止管道的所有阶段和步骤。

我可以为每个阶段添加CREATE TABLE `wp_supsystic_ss_networks` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `url` varchar(255) NOT NULL, `class` varchar(255) NOT NULL, `brand_primary` varchar(7) NOT NULL DEFAULT '#000000', `brand_secondary` varchar(7) NOT NULL DEFAULT '#ffffff', `total_shares` int(11) unsigned DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8; CREATE TABLE `wp_supsystic_ss_project_networks` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `project_id` int(11) unsigned DEFAULT NULL, `network_id` int(11) unsigned DEFAULT NULL, `position` int(11) unsigned DEFAULT '0', `title` varchar(255) DEFAULT NULL, `text` varchar(255) DEFAULT NULL, `tooltip` varchar(255) DEFAULT NULL, `text_format` varchar(255) DEFAULT NULL, `use_short_url` bit(1) DEFAULT NULL, `icon_image` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `FK__wp_supsystic_ss_projects` (`project_id`), KEY `FK__wp_supsystic_ss_networks` (`network_id`), CONSTRAINT `FK__wp_supsystic_ss_networks` FOREIGN KEY (`network_id`) REFERENCES `wp_supsystic_ss_networks` (`id`), CONSTRAINT `FK__wp_supsystic_ss_projects` FOREIGN KEY (`project_id`) REFERENCES `wp_supsystic_ss_projects` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; CREATE TABLE `wp_supsystic_ss_projects` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `settings` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; 子句,但这对我来说不是最佳选择。有没有更好的方法呢?

2 个答案:

答案 0 :(得分:7)

如果您使用when步骤,这应该适用于error指令。

例如,如果给定的参数值不可接受,您可以进行前期检查并中止构建 - 防止后续阶段运行:

pipeline {
  agent any
  parameters {
    string(name: 'targetEnv',
           defaultValue: 'dev',
           description: 'Must be "dev", "qa", or "staging"')
  }
  stages {
    stage('Validate parameters') {
      when {
        expression {
          // Only run this stage if the targetEnv is invalid
          !['dev', 'qa', 'staging'].contains(params.targetEnv)
        }
      }
      steps {
        // Abort the build, skipping subsequent stages
        error("Invalid target environment: ${params.targetEnv}")
      }
    }
    stage('Checkout') {
      steps {
        echo 'Checking out source code...'
      }
    }
    stage('Build') {
      steps {
        echo 'Building...'
      }
    }
  }
}

答案 1 :(得分:0)

您可以使用FlowInterruptedException,例如:

import hudson.model.Result
import org.jenkinsci.plugins.workflow.steps.FlowInterruptedException

pipeline {
  ...
  steps {
    script {
      throw new FlowInterruptedException(Result.ABORTED)
    }
  ...
}

这将像error步骤一样立即停止执行,但是对结果的控制更多。

请注意,这要求您批准签名

new org.jenkinsci.plugins.workflow.steps.FlowInterruptedException hudson.model.Result

除了Result.ABORTED外,还有:Result.SUCCESSResult.UNSTABLEResult.FAILUREResult.NOT_BUILT

免责声明:有点黑。