2017-02-17 71 views
2

我有一个管道作业从git存储库加载Jenkinsfile。我Jenkinsfile看起来是这样的:Jenkins共享库上下文

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

    stage('merge-request'){ 
     mergeRequest() 
    } 
} 

全球-utils的-lib的共享从另一个混帐回购协议在全球管道库加载库结构如下

vars/mergeRequest.groovy 

mergeRequest.groovy:

def call() { 
    sh "ip addr" 
    def workspacePath = env.WORKSPACE 
    new File(workspacePath + "/file.txt").text 
} 

作业针对码头容器(码头插件)运行。

当我运行此作业,然后泊坞窗容器被正确配置和单片机下载,但我得到FileNotFoundException异常。 它看起来像从共享库中的代码是针对詹金斯执行掌握不从:

  • 提出IP来自主当我通过正确的路径到SCM的主
  • 文件是否正确装入

我如何运行库代码对付奴隶?我错过了什么?

+0

我看不错,应该工作,如果你问我,可能是GPL的错误... –

回答

3

这通常不是一个好主意,试图做这样的事情的​​,而不是使用现有的管道步骤。

您的管道脚本解释和执行由詹金斯主的话,因为你看到的,使用File API不工作,你可能会想到的尝试。

坚持管道步骤有助于确保您的管道是耐用(即生存重启),是可暂停,而不会阻塞执行线程,防止并行步骤从工作,例如。

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

我不知道Docker插件与Pipeline交互的程度如何(尽管我想它应该是透明的),并且不知道哪些代理具有“mvn”标签,或者是否可以在共享库之外重现此操作,目前还不清楚为什么你的步骤似乎在主控上运行。

Docker Pipeline Plugin明确专为管道,所以它可能提供更好的结果。