我有一个管道作业,它从git存储库加载Jenkinsfile。我的Jenkinsfile是这样的:
#!groovy
@Library('global-utils-lib') _
node("mvn") {
stage('build') {
checkout scm
}
stage('merge-request'){
mergeRequest()
}
}全局-utils-lib是从另一个具有以下结构的git中加载到全局管道库中的共享库
vars/mergeRequest.groovymergeRequest.groovy:
def call() {
sh "ip addr"
def workspacePath = env.WORKSPACE
new File(workspacePath + "/file.txt").text
}作业是针对码头容器(坞插件)运行的。
当我运行这个作业时,正确地配置了码头容器,下载了scm,但是我得到了FileNotFoundException。看起来,来自共享库的代码是针对jenkins主程序而不是从库执行的:
如何对从服务器运行库代码?我错过了什么?
发布于 2017-02-19 00:32:57
尝试做像new File()这样的事情,而不是使用现有的管道步骤,这通常不是一个好主意。
管道脚本是由Jenkins主程序解释和执行的,因此,正如您所看到的那样,尝试使用File API并不像您所期望的那样有效。
坚持管道步骤有助于确保您的管道是持久的(即,在重新启动时幸存下来),并且是可暂停的,并且不会阻止执行线程,例如,阻止并行步骤的工作。
在这种情况下,可以使用现有的readFile步骤。
我不知道Docker插件与管道的交互有多好(虽然我认为它应该是透明的),而且不知道哪些代理具有"mvn“标签,或者您是否可以在共享库之外复制它,但不清楚为什么您的sh步骤会在主服务器上运行。
码头管道插件是为流水线明确设计的,因此可能会带来更好的效果。
https://stackoverflow.com/questions/42307155
复制相似问题