/**
* Auther: luojiaao
*//**
* run command.
*
* This function executes shell based on the operating system.
*
* @param m Map containing trace/returnStdout/returnStatus/sops_var.
* @return Output of the command.
*/
run_vars =[:]defrun(Map m){
is_unix =isUnix()// Run Paramif(is_unix){if(m.trace){
arg_x="-x"}else{
arg_x=""}}else{if(m.trace){
arg_x=""}else{
arg_x="@echo off"}}// Replace Var to CMDtry{def pattern_in =/\$\{(\w+?)\}/def matcher_in =(m.cmd =~ pattern_in)def list_matcher_in =[]if(matcher_in.find()){for(sub_in in matcher_in){if(run_vars.get(sub_in[1],'NoFind')!='NoFind'){
list_matcher_in.add(sub_in[1])}}for(i in list_matcher_in.toSet()){
m.cmd = m.cmd.replace('${'+i+'}', run_vars.get(i))}}}catch(NotSerializableException ex){}// Runif(m.returnStdout){// get stdif(is_unix){returnsh(returnStdout:true, script:"#!/bin/sh ${arg_x}\n${m.cmd}")}else{returnbat(returnStdout:true, script:"${arg_x}\n${m.cmd}")}}elseif(m.returnStatus){// get statusif(is_unix){returnsh(returnStatus:true, script:"#!/bin/sh ${arg_x}\n${m.cmd}")}else{returnbat(returnStatus:true, script:"${arg_x}\n${m.cmd}")}}elseif(m.sops_var){// get sopsdef out =""if(is_unix){
out =sh(returnStdout:true,script:"#!/bin/sh ${arg_x}\n${m.cmd}")}else{
out =bat(returnStdout:true,script:"${arg_x}\n${m.cmd}")}println(out)// save var to global from mark of SOPS_VARtry{def pattern_out =/<SOPS_VAR>(\w+?):(.+?)<\/SOPS_VAR>/def matcher_out =(out =~ pattern_out)if(matcher_out.find()){for(sub_out in matcher_out){
run_vars[sub_out[1]]= sub_out[2]}}}catch(NotSerializableException ex){}}else{if(is_unix){sh(script:"#!/bin/sh ${arg_x}\n${m.cmd}")}else{bat(script:"${arg_x}\n${m.cmd}")}}}
pipeline{
agent any
options{skipDefaultCheckout()}
stages {stage('SAVE'){
steps {
script {// 保存VAR变量值为AAAAArun(cmd:'echo "<SOPS_VAR>VAR:AAAAA</SOPS_VAR>"', sops_var:true)}}}stage('PRINT'){
steps {
script {// 执行之前会替换VAR的值run(cmd:'echo ${VAR}',trace:true)}}}}}