首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jenkins共享图书馆上下文

Jenkins共享图书馆上下文
EN

Stack Overflow用户
提问于 2017-02-17 20:51:11
回答 1查看 3.2K关注 0票数 2

我有一个管道作业,它从git存储库加载Jenkinsfile。我的Jenkinsfile是这样的:

代码语言:javascript
复制
#!groovy
@Library('global-utils-lib') _
node("mvn") {
    stage('build') {
        checkout scm
    }

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

全局-utils-lib是从另一个具有以下结构的git中加载到全局管道库中的共享库

代码语言:javascript
复制
vars/mergeRequest.groovy

mergeRequest.groovy:

代码语言:javascript
复制
def call() {
    sh "ip addr"
    def workspacePath = env.WORKSPACE
    new File(workspacePath + "/file.txt").text
}

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

当我运行这个作业时,正确地配置了码头容器,下载了scm,但是我得到了FileNotFoundException。看起来,来自共享库的代码是针对jenkins主程序而不是从库执行的:

  • 现在的IP来自主
  • 当我将正确的路径传递到主服务器上的scm时,文件将正确加载。

如何对从服务器运行库代码?我错过了什么?

EN

回答 1

Stack Overflow用户

发布于 2017-02-19 00:32:57

尝试做像new File()这样的事情,而不是使用现有的管道步骤,这通常不是一个好主意。

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

坚持管道步骤有助于确保您的管道是持久的(即,在重新启动时幸存下来),并且是可暂停的,并且不会阻止执行线程,例如,阻止并行步骤的工作。

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

我不知道Docker插件与管道的交互有多好(虽然我认为它应该是透明的),而且不知道哪些代理具有"mvn“标签,或者您是否可以在共享库之外复制它,但不清楚为什么您的sh步骤会在主服务器上运行。

码头管道插件是为流水线明确设计的,因此可能会带来更好的效果。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42307155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档