2016-12-30 88 views
0

我正在構建jenkins管道,並且可以通過遠程觸發作業。我有要求知道哪個IP觸發了這項工作。所以我有一個小groovy腳本,它返回遠程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的例子,目錄結構)。這是詹金斯的無證(否則真的很難找到任何文檔)的功能之一。

如果你把一個文件triggerIp.groovy目錄vars,這是在目錄workflow-libs在根級別JENKINS_HOME,並把你的代碼文件。 完整的文件名,然後將$JENKINS_HOME/workflow-libs/vars/ipTrigger.groovy (你甚至可以做一個混帳回購協議爲您的共享庫,並在該目錄中複製它)

// 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)

的ip地址的將是,trigger.ip(對不起,壞的命名,不能拿出一些原)

+0

也許一個更好的名字是'扳機。 originIPAddress'這會讓它更清楚它背後的原因。 – Bluehorn

+0

謝謝你的接吻!我沒有vars文件夾,所以我創建了一個。重新啓動後,我得到:java.lang.NoSuchMethodError:在步驟中找不到這樣的DSL方法'ipTrigger',所以我認爲他沒有找到方法?該文件的名稱是ipTrigger.groovy,並且管道腳本中的調用與您所做的相同(可能是,文件名稱和調用不匹配?)我做了些什麼錯誤嗎? – user3296316

+0

對不起,我的錯。目錄結構應該是'$ JENKINS_HOME/workflow-libs/vars/ipTrigger.groovy'。請注意我的示例中省略的'workflow-libs'目錄。更新的答案以及 – Rik

相關問題