Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jenkins共享库上下文_Jenkins_Jenkins Pipeline - Fatal编程技术网

Jenkins共享库上下文

Jenkins共享库上下文,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,我有一个管道作业,它从git存储库加载Jenkins文件。我的Jenkins文件如下所示: #!groovy @Library('global-utils-lib') _ node("mvn") { stage('build') { checkout scm } stage('merge-request'){ mergeRequest() } } 全局utils库是从另一个git repo在全局管道库中加载的共享库,其结构如下

我有一个管道作业,它从git存储库加载Jenkins文件。我的Jenkins文件如下所示:

#!groovy
@Library('global-utils-lib') _
node("mvn") {
    stage('build') {
        checkout scm
    }

    stage('merge-request'){
        mergeRequest()
    }
}
全局utils库是从另一个git repo在全局管道库中加载的共享库,其结构如下

vars/mergeRequest.groovy
mergeRequest.groovy:

def call() {
    sh "ip addr"
    def workspacePath = env.WORKSPACE
    new File(workspacePath + "/file.txt").text
}
作业是针对docker容器(docker插件)运行的

当我运行此作业时,docker容器已正确设置,scm已下载,但我得到FileNotFoundException。 看起来共享库中的代码是针对jenkins master而非slave执行的:

  • 呈现的IP来自主节点
  • 当我将正确的路径传递到主控计算机上的scm时,文件已正确加载

如何对从机运行库代码?我缺少什么?

通常,尝试执行诸如
newfile()
之类的操作而不是使用现有的管道步骤不是一个好主意

您的管道脚本是由Jenkins master解释和执行的,因此,正如您所看到的,尝试使用
文件
API并不像您所期望的那样有效

坚持执行管道步骤有助于确保管道持久(即重新启动后仍然有效)、可暂停且不会阻塞执行线程,例如,阻止并行步骤工作

在这种情况下,可以使用现有步骤

我不知道Docker插件与管道的交互效果如何(尽管我认为它应该是透明的),而且不知道哪些代理具有“mvn”标签,或者您是否可以在共享库之外复制它,也不清楚为什么您的
sh
步骤会出现在主程序上


这是专门为管道设计的,所以它可能会提供更好的结果。

对我来说很好,如果你问我应该可以工作,可能是gpl中的一个bug。。。