Jenkins共享库上下文
我有一个管道作业,它从git存储库加载Jenkins文件。我的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在全局管道库中加载的共享库,其结构如下
#!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。。。