Jenkins 如何签出除主管道外的共享库管道

Jenkins 如何签出除主管道外的共享库管道,jenkins,groovy,jenkins-pipeline,jenkins-groovy,Jenkins,Groovy,Jenkins Pipeline,Jenkins Groovy,我的詹金斯大师没有遗嘱执行人而且由于我们公司的詹金斯设计,也不可能有遗嘱执行人。我们有两个工作节点。当我添加管道共享库时,默认情况下Jenkins尝试在master中签出,但由于明显的原因失败,因为它找不到git,因为它在Jenkins master中不可用 Cloning repository git@github.com:Test/jenkins-pipeline-shared.git > git init /var/lib/jenkins/workspace/rp-pipe_PR

我的詹金斯大师没有遗嘱执行人而且由于我们公司的詹金斯设计,也不可能有遗嘱执行人。我们有两个工作节点。当我添加管道共享库时,默认情况下Jenkins尝试在master中签出,但由于明显的原因失败,因为它找不到git,因为它在Jenkins master中不可用

Cloning repository git@github.com:Test/jenkins-pipeline-shared.git


> git init /var/lib/jenkins/workspace/rp-pipe_PR-675@libs/slackNotify # timeout=10
ERROR: Error cloning remote repo 'origin'
hudson.plugins.git.GitException: Could not init /var/lib/jenkins/workspace/rp-pipe_PR-675@libs/slackNotify
我不明白为什么Jenkins甚至可以尝试在master中签出共享库,因为master甚至没有执行者

我看了别人的意见,但我的东西停在它试图检验的地方。我怎样才能克服这一点?我本想将共享库groovy文件保存在同一个repo中,并将库导入到JenkinsFile中,但似乎它对我也不起作用。我试过了,但詹金斯无法识别
模块

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 14: Expected a step @ line 14, column 17.
modules.sendNotifications = load "vars/sendNotifications.groovy"
我尝试了
libraryResource('vars/sendNotifications.groovy')
,但它不起作用。詹金斯只是失败了,没有犯任何错误

我认为但不知道如何实施的解决方案

  • 在假定运行作业的节点中签出管道库
  • 忽略管道库,在同一repo中创建一个groovy文件,并导入JenkinsFile中的文件

  • 您可以尝试先获取一个工作程序,然后从以下位置加载库:

    pipeline {
      agent any
      stages {
        stage('Init') {
          steps {
            library 'my-fancy-library'
          }
        }
      }
    }
    

    共享库将签出到您的工作区,具体取决于您的使用情况。如果您的工作区位于工作节点上,则它将存在于该工作节点上。我从Jenkins文件管理我的节点。签出发生在它到达管道中的
    代理{label'!master'}
    之前。现在,我可以看到签出已在工作节点中完成。谢谢,但我还是收到了相同的错误-
    原因是:java.io.IOException:无法运行程序“git”(在目录“/var/lib/jenkins/workspace/rp-pipe\PR中)-675@libs/slackNotify”):错误=2,没有这样的文件或目录
    。我检查了
    哪个git
    ,并且在
    路径中有git。我不知道为什么它仍然抱怨我注意到Jenkins试图在
    var/lib/
    中签出库回购,当然它没有这样做的权限。为什么它不会像其他repo一样尝试在
    /home/ec2 user/workspace
    中克隆repo?我认为这是Jenkins运行的工作区。接受答案,因为它确实解决了我最初的问题,即签出到工作节点。是的,
    /var/lib/
    是安装位置,但工作区是
    /home/ec2 user/workspace
    ,并且希望git签出在这里进行,因为git签出的共享库是在此目录中进行的。