![](/img/trans.png)
[英]How to use shell script variable as groovy variable in Jenkins pipeline script
[英]Inject variable in jenkins pipeline with groovy script
我正在建立一个詹金斯管道,这项工作可以由远程触发。 我需要知道哪个IP触发了这项工作。 因此,我有一个简单的脚本,它返回了远程IP。 使用EnvInject-plugin,我可以轻松地在常规的自由式作业中使用此变量,但是如何在管道脚本中使用它呢? 我不能将EnvInject-plugin与管道插件一起使用:(
这是获取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]
您可以创建一个共享库函数(有关示例和目录结构,请参见此处 )。 这是Jenkins的未记录(或者很难找到任何文档)功能之一。
如果您将文件triggerIp.groovy
放在目录vars
,该目录位于JENKINS_HOME
根目录下的目录workflow-libs
中,然后将代码放入该文件中。 完整的文件名将是$JENKINS_HOME/workflow-libs/vars/ipTrigger.groovy
(您甚至可以为共享库制作一个git repo并将其克隆到该目录中)
// 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
(抱歉,命名错误,无法提供原始内容)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.