2017-10-02 3 views
0

J'ai un script Groovy dans mon étape de construction Jenkins qui calcule la durée de construction et met la valeur dans une chaîne que je voudrais exécuter dans un script shell.Analyser la valeur de Groovy dans l'étape Shell Jenkins

J'ai essayé de le faire à travers de multiples façons groovy mais toujours pas de chance. Exécution de la chaîne exacte sur l'esclave Jenkins fonctionne très bien, donc je voudrais passer cette chaîne dans une étape de script shell et l'exécuter après. Comment ferais-je cela? Je pensais à la définition d'une variable d'environnement mais actuellement, j'ai trouvé des moyens de les récupérer.

import hudson.model.* 
import java.math.* 

def apiKey = "secret" 
def buildId = System.getenv("BUILD_ID") 
def buildNo = System.getenv("BUILD_NUMBER") 
def jobName = System.getenv("JOB_NAME") 
jobName = jobName.replaceAll("\\.","-") 
def nodeName = System.getenv("NODE_NAME") 

def (startDate, startTime) = buildId.tokenize("_") 
def (YY, MM, DD) = startDate.tokenize("-") 
def (hh, mm, ss) = startTime.tokenize("-") 
MathContext mc = new MathContext(200); 
Date startDateTime = new GregorianCalendar(YY.toInteger(), MM.toInteger() - 1, DD.toInteger(), hh.toInteger(), mm.toInteger(), 
ss.toInteger()).time 
Date end = new Date() 
long diffMillis = end.getTime() - startDateTime.getTime()  
long buildDurationInSeconds = (diffMillis/1000); 

String metric = String.format("%s.jenkins.%s.%s.%s.duration %s", 
apiKey, nodeName, jobName, buildNo, buildDurationInSeconds) 

def cmd = 'echo "+metric+" | nc carbon.hostedgraphite.com 2003' 

Après cette étape, j'invoquerais une étape « Exécuter Shell » en passant jenkins la valeur de « cmd ». Si quelqu'un a un exemple à la fois passer la valeur puis l'appeler dans le script shell qui serait une véritable aide

Répondre

0
def cmd = "ls -a" 
new File("${build.workspace}/mycmd.sh").setText("#!/bin/sh\n${cmd}\n") 

et comme étape suivante n'Exécuter Shell ./mycmd.sh

+0

son retour l'erreur suivante: '+ ./mycmd.sh./mycmd.sh: ligne 2: [écho: command not found nc: plage de ports non valid' Whi ch est bon parce que son fonctionnement, mais toujours pas sûr de la différence entre l'exécution de ce cmd exactement comme dans la ligne de commande et l'exécution à travers ce fichier .sh :( – WillBroadbent

0

Essayez cette

def metric="WHAT_YOU_WANT_TO_PASS" 
sh "echo $metric | nc carbon.hostedgraphite.com 2003"