|  | /** | 
|  | * Test salt formulas pipeline | 
|  | *  DEFAULT_GIT_REF | 
|  | *  DEFAULT_GIT_URL | 
|  | *  CREDENTIALS_ID | 
|  | */ | 
|  | def common = new com.mirantis.mk.Common() | 
|  | def ruby = new com.mirantis.mk.Ruby() | 
|  | def gerrit = new com.mirantis.mk.Gerrit() | 
|  |  | 
|  | def defaultGitRef, defaultGitUrl | 
|  | try { | 
|  | defaultGitRef = DEFAULT_GIT_REF | 
|  | defaultGitUrl = DEFAULT_GIT_URL | 
|  | } catch (MissingPropertyException e) { | 
|  | defaultGitRef = null | 
|  | defaultGitUrl = null | 
|  | } | 
|  |  | 
|  | def checkouted = false | 
|  |  | 
|  | throttle(['test-formula']) { | 
|  | timeout(time: 1, unit: 'HOURS') { | 
|  | node("python&&docker") { | 
|  | try { | 
|  | stage("checkout") { | 
|  | if (defaultGitRef && defaultGitUrl) { | 
|  | checkouted = gerrit.gerritPatchsetCheckout(defaultGitUrl, defaultGitRef, "HEAD", CREDENTIALS_ID) | 
|  | } else { | 
|  | throw new Exception("Cannot checkout gerrit patchset, DEFAULT_GIT_REF is null") | 
|  | } | 
|  | } | 
|  | stage("cleanup") { | 
|  | if (checkouted) { | 
|  | sh("make clean") | 
|  | } | 
|  | } | 
|  | stage("kitchen") { | 
|  | if (checkouted) { | 
|  | if (fileExists(".kitchen.yml")) { | 
|  | common.infoMsg(".kitchen.yml found, running kitchen tests") | 
|  | ruby.ensureRubyEnv() | 
|  | if (fileExists(".travis.yml")) { | 
|  | common.infoMsg(".travis.yml found, running custom kitchen init") | 
|  | def kitchenConfigYML = readYaml(file: ".travis.yml") | 
|  | def kitchenInit = kitchenConfigYML["install"] | 
|  | def kitchenInstalled = false | 
|  | if (kitchenInit && !kitchenInit.isEmpty()) { | 
|  | for (int i = 0; i < kitchenInit.size(); i++) { | 
|  | if (kitchenInit[i].trim().startsWith("test -e Gemfile")) { //found Gemfile config | 
|  | common.infoMsg("Custom Gemfile configuration found, using them") | 
|  | ruby.installKitchen(kitchenInit[i].trim()) | 
|  | kitchenInstalled = true | 
|  | } | 
|  | } | 
|  | } | 
|  | if (!kitchenInstalled) { | 
|  | ruby.installKitchen() | 
|  | } | 
|  | } else { | 
|  | common.infoMsg(".travis.yml not found, running default kitchen init") | 
|  | ruby.installKitchen() | 
|  | } | 
|  | common.infoMsg("Running part of kitchen test") | 
|  | if (KITCHEN_ENV != null && !KITCHEN_ENV.isEmpty() && KITCHEN_ENV != "") { | 
|  | def cleanEnv = KITCHEN_ENV.replaceAll("\\s?SUITE=[^\\s]*", "") | 
|  | sh("find . -type f -exec sed -i 's/apt.mirantis.com/apt.mirantis.net:8085/g' {} \\;") | 
|  | sh("find . -type f -exec sed -i 's/apt-mk.mirantis.com/apt.mirantis.net:8085/g' {} \\;") | 
|  | def suite = ruby.getSuiteName(KITCHEN_ENV) | 
|  | if (suite && suite != "") { | 
|  | common.infoMsg("Running kitchen test with environment:" + KITCHEN_ENV.trim()) | 
|  | ruby.runKitchenTests(cleanEnv, suite) | 
|  | } else { | 
|  | common.warningMsg("No SUITE was found. Running with all suites.") | 
|  | ruby.runKitchenTests(cleanEnv, "") | 
|  | } | 
|  | } else { | 
|  | throw new Exception("KITCHEN_ENV parameter is empty or invalid. This may indicate wrong env settings of initial test job or .travis.yml file.") | 
|  | } | 
|  | } else { | 
|  | throw new Exception(".kitchen.yml file not found, no kitchen tests triggered.") | 
|  | } | 
|  | } | 
|  | } | 
|  | } catch (Throwable e) { | 
|  | // If there was an error or exception thrown, the build failed | 
|  | currentBuild.result = "FAILURE" | 
|  | ruby.runKitchenCommand("destroy") | 
|  | throw e | 
|  | } finally { | 
|  | if (currentBuild.result == "FAILURE" && fileExists(".kitchen/logs/kitchen.log")) { | 
|  | common.errorMsg("----------------KITCHEN LOG:---------------") | 
|  | println readFile(".kitchen/logs/kitchen.log") | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  | } |