2016-12-30 21 views
0

私はジェンキンスパイプラインを構築しており、リモートでそのジョブをトリガーすることができます。私はどのIPが仕事を引き起こしたのかを知る必要があります。だから私は、リモートIPを返す少し面白いスクリプトを持っています。 EnvInject-pluginでは普通のフリースタイルジョブでこの変数を簡単に使うことができますが、これをパイプラインでどうやって使うことができますか?私は、パイプライン・プラグインでEnvInject-プラグインを使用することはできません:(groovyスクリプトを使用したjenkinsパイプラインでの変数の入力

ここでIPを取得するための小さなスクリプトです:

import hudson.model.* 
import static hudson.model.Cause.RemoteCause 


def ipaddress="" 
for (CauseAction action : currentBuild.getActions(CauseAction.class)) { 

    for (Cause cause : action.getCauses()) { 
     if(cause instanceof RemoteCause){ 
      ipaddress=cause.addr 
      break; 
     } 
    } 
} 
return ["ip":ipaddress] 

答えて

0

は、あなたが共有ライブラリの関数を作成することができます(例についてはhereを参照し、ディレクトリ構造)。これはジェンキンスの)文書化されていない(または任意のドキュメントを見つけるのは本当に難しいの特徴の一つである。

あなたはルートレベルのディレクトリworkflow-libsにあるディレクトリvars、でファイルtriggerIp.groovyを置く場合JENKINS_HOMEのコードを入力してファイル。 完全なファイル名が、その後ジェンキンスの再起動後$JENKINS_HOME/workflow-libs/vars/ipTrigger.groovy (あなたも、あなたの共有ライブラリのためのgitリポジトリを作成し、そのディレクトリにクローンを作成することができます)

// workflow-libs/vars/ipTrigger.groovy 
import hudson.model.* 
import static hudson.model.Cause.RemoteCause 

@com.cloudbees.groovy.cps.NonCPS 
def call(currentBuild) { 
    def ipaddress="" 
    for (CauseAction action : currentBuild.getActions(CauseAction.class)) { 

     for (Cause cause : action.getCauses()) { 
      if(cause instanceof RemoteCause){ 
       ipaddress=cause.addr 
       break; 
      } 
     } 
    } 
    return ["ip":ipaddress] 
} 

なり、あなたのパイプラインのスクリプトから、あなたが呼び出すことができますあなたがそれを与えたファイル名で

だからあなたのパイプラインからわずかdef trigger = ipTrigger(currentBuild)

呼び出すipaddressにはtrigger.ip(悪い命名のため申し訳ありませんが、オリジナルの何かを思い付くことができませんでした)

+0

たぶん、より良い名前は '引き金となり、なります。 originIPAddress'を使用すると、背後にあるものがもう少し明確になります。 – Bluehorn

+0

あなたのanwserに感謝します!私はヴァースフォルダを持っていなかったので、私はそれを作成しました。再起動後、私は次のようになります:java.lang.NoSuchMethodError:そのようなDSLメソッド 'ipTrigger'はステップの間に見つかりませんでしたので、彼はメソッドを見つけられませんでしたか?ファイルの名前はipTrigger.groovyで、パイプラインスクリプトの呼び出しはあなたと同じです(ファイルの名前と呼び出しが一致しないことがありますか)。間違っていませんか? – user3296316

+0

申し訳ありませんが、私の間違い。ディレクトリ構造は '$ JENKINS_HOME/workflow-libs/vars/ipTrigger.groovy'でなければなりません。私の例では省略した 'workflow-libs'ディレクトリに注意してください。更新された回答も – Rik

関連する問題