使用 groovy 脚本在 jenkins 管道中注入变量
Inject variable in jenkins pipeline with groovy script
我正在构建一个 jenkins 管道,该作业可以通过远程触发。我需要知道哪个 IP 触发了作业。所以我有一个 groovy 脚本,其中 returns 远程 IP。使用 EnvInject-plugin,我可以在普通的自由式作业中轻松使用这个变量,但是我如何在管道 scirpt 中使用它呢?我不能将 EnvInject 插件与管道插件一起使用 :(
这是获取 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]
您可以创建共享库函数(有关示例和目录结构,请参见 here)。这是 Jenkins 的未记录(或很难找到任何文档)功能之一。
如果您将文件 triggerIp.groovy
放入目录 vars
中,该目录位于 JENKINS_HOME
的根目录 workflow-libs
中,并将您的代码放入那个文件。
完整的文件名将是 $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]
}
Jenkins 重启后,从您的管道脚本中,您可以通过您给它的文件名调用该方法。
因此,从您的管道中调用 def trigger = ipTrigger(currentBuild)
ipaddress 将是,trigger.ip
(抱歉命名错误,无法想出原创的东西)
我正在构建一个 jenkins 管道,该作业可以通过远程触发。我需要知道哪个 IP 触发了作业。所以我有一个 groovy 脚本,其中 returns 远程 IP。使用 EnvInject-plugin,我可以在普通的自由式作业中轻松使用这个变量,但是我如何在管道 scirpt 中使用它呢?我不能将 EnvInject 插件与管道插件一起使用 :(
这是获取 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]
您可以创建共享库函数(有关示例和目录结构,请参见 here)。这是 Jenkins 的未记录(或很难找到任何文档)功能之一。
如果您将文件 triggerIp.groovy
放入目录 vars
中,该目录位于 JENKINS_HOME
的根目录 workflow-libs
中,并将您的代码放入那个文件。
完整的文件名将是 $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]
}
Jenkins 重启后,从您的管道脚本中,您可以通过您给它的文件名调用该方法。
因此,从您的管道中调用 def trigger = ipTrigger(currentBuild)
ipaddress 将是,trigger.ip
(抱歉命名错误,无法想出原创的东西)