我在詹金斯有一个多分支管道项目。 我使用我的Jenkinsfile作为种子作业,创建要执行的作业和脚本。
其中一个作业需要在从站上运行,我需要在从站上执行此作业的文件操作。 File操作是使用FilePath类实现的。我现在需要的只是构建我的FilePath的渠道。
如何从WorkflowScript中获取频道?我在哪里可以找到WorkflowScript的API参考。
我已经发现的是我通过此代码获取所有实例频道
println Jenkins.instance.slaves
for(def slave : Jenkins.instance.slaves){
println slave.channel
}
但是如何找出我的脚本在哪个实例中运行?
有什么建议吗?指向API的指针或我的问题的一些解决方法。
谢谢
答案 0 :(得分:0)
这是我提出的(糟糕的)解决方案。
我自己写了一个Util类来获取我用于工作的标签的频道。
import jenkins.model.Jenkins
import hudson.FilePath
import hudson.remoting.Channel
/**
* returns the channel of the given label, might be null
*
* realy bad solution why: when multiple JenkinsSlaves have the same label, this will probably not work anymore,
* because the channel of the first node is returned
* For empty labels it does not work either
* @param jenkins the jenkins instance
* @param label the associated label for the running node, not empty, not null
* @return a channel of a Node associated with given label, might be null
*/
@com.cloudbees.groovy.cps.NonCPS
public static Channel getChannel(Jenkins jenkins, String label) {
assert jenkins !=null : 'JenkinsUtil.getChannel() does not work for null Jenkins'
assert label!=null : 'JenkinsUtil.getChannel() does not work for null Labels'
assert !label.isEmpty() : 'JenkinsUtil.getChannel() does not work for empty Labels'
Set<Node> nodes = jenkins.getLabel(label).getNodes()
assert nodes.size() < 2 : 'JenkinsUtil.getChannel() might not work correctly for Label which are associated with multiple nodes. Fix Me!'
assert nodes.size() > 0 : "JenkinsUtil.getChannel(): No node found for Label ${label}"
return nodes[0].getChannel()
}
通过此频道,我现在可以在远程计算机上创建文件。
FilePath remoteWorkspace = new FilePath(JenkinsUtil.getChannel(Jenkins.instance,LABEL_STRING), env.WORKSPACE)
FilePath webserverConfiguration = new FilePath( remoteWorkspace, 'webserver.conf')
webserverConfiguration.write('someText', null)
为什么我这样做:'build'变量在WorkkflowScript中不可用。