2017-10-02 11 views
0

JenkinsのビルドステップでGroovyスクリプトを使用して、ビルド時間を計算し、シェルスクリプトで実行したい文字列に値を入れます。Groovyからシェルステップへの値の解析

私はgroovyで複数の方法でやってみましたが、まだ運がありません。 Jenkins Slaveで正確な文字列を実行するとうまくいきますので、その文字列をシェルスクリプトのステップに渡して後で実行したいと思います。それをどうやってやりますか?

私は環境変数を設定することを考えましたが、現在はそれらを取得する方法しか見つけていません。

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' 

この手順の後、私は "cmd"の値を渡すジェンキンズの "シェルを実行する"ステップを呼び出すでしょう。誰かがシェルを実行しない本当の助け

答えて

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

ととして次のステップになるの両方に値を渡した後、シェルスクリプトでそれを呼び出す例を持っている場合./mycmd.sh

+0

その戻り、次のエラー: '+ ./mycmd.sh./mycmd.sh:行2:[エコー:コマンドが見つかりません NC:ポート範囲がvalid'ない ホワイトトchは実行中ですが、このcmdをコマンドラインと同じように実行してから、この.shファイルで実行することの違いはまだ分かりません。 – WillBroadbent

0

この

def metric="WHAT_YOU_WANT_TO_PASS" 
sh "echo $metric | nc carbon.hostedgraphite.com 2003" 
をお試しください
関連する問題