我需要编写一个共享库,该库在构建工作区中读取文件,并且共享库函数无法读取文件,因为管道位于从属服务器上,而共享库则在主服务器中执行。有什么办法可以改变库函数的执行上下文?
答案 0 :(得分:0)
找出答案。您可以读取库文件并将文件交给writeFile管道步骤
writeFile(file:"foo.groovy", text: libraryResource("bar.groovy"))
"groovy foo.groovy"
writeFile将两个参数都作为命名参数,因此https://issues.jenkins-ci.org/browse/JENKINS-54646中给出的答案并不完全正确。
答案 1 :(得分:0)
您实际上可以在没有writeFile的情况下执行此共享库代码,该代码将在Master中执行,但是它将使用RemoteDignostic执行从属命令
在工作节点上执行uname -a
import hudson.util.RemotingDiagnostics
import jenkins.model.Jenkins
class test_exec{
def env
def propertiesFilePath
@NonCPS
def call(cmd) {
def trial_script = """
println "uname -a".execute().text
""".trim()
String result
Jenkins.instance.slaves.find { agent ->
agent.name == "${env.NODE_NAME}"
}.with { agent ->
result = RemotingDiagnostics.executeGroovy(trial_script, agent.channel)
}
return result
}
}
在您的管道中
steps{
println(new test_exec().call())
}
答案 2 :(得分:0)
在 slave 而不是 master 上执行 Jenkins 共享库函数。您可以在调用中实现 de argument node("slaveName") :
def call(Map config=[:], Closure body) {
def label = 'slave'
node("${label}") {
pipeline {
stage('Sonarqube') {
script {
withSonarQubeEnv('Sonar8') {
withMaven(maven: 'apache-maven') {
sh 'mvn sonar:sonar -Dmaven.test.skip=true -Dsonar.java.binaries=./target'
}
}
}
}//pipeline
} // 调用