如何处理詹金斯错误"Library ***expected to contain at least one of src or vars directories"



现在正在编写我的第6或第7个Jenkins脚本-我已经注意到它们共享一些代码(本质上只是一遍又一遍地使用相同的groovy子例程)。我不想继续这样做,而是想学习一些最佳实践。似乎"共享图书馆"都是该做的事。(或者当您只想共享groovy代码而不是脚本步骤等时,是否有更好的方法?)

这些脚本是更大的repo(包含整个项目的源代码,包括其他脚本)的一部分,存储在子文件夹Jenkins/Library中,结构如下:

Jenkins/Library
+- vars
|  common_code.groovy

只有一个vars文件夹,没有src。文档说

对于只定义全局变量(vars/)的共享库,或者只需要全局变量的Jenkinsfile,注释模式@Library('my-shared-library') _可能有助于保持代码简洁。实际上,没有注释不必要的import语句,而是注释了符号_。

所以我得出结论,我不需要src文件夹,可以单独使用vars

该库可通过"Configure jenkins"获得。比;全局管道库将SourcePath设置为"/Jenkins/Library/";和语句@Library('{name}') _一起作为脚本的第一行。

然而,当尝试使用库时,我得到主题中显示的错误。有什么问题吗?(我已经搜索了周围,发现了这个问题的实例,但这似乎不适合我的问题-除非我误解了什么。)

要指定库的名称,您应该在jenkins设置中设置相同的名称:

名字

.您为这个库选择的标识符,将在@Library中使用注释。环境变量库。this_name。版本将还要设置为为构建加载的版本(无论它来自这里的默认版本,或者来自@后面的注释分离器)。

@Library()里面的'{name}'参数意味着你应该添加一个同名的库。因为它不像"${name}"那样是一个变量,CC_10不是一个内置变量,没有定义。

如果你想设置你的库与你的jenkins管道相同的名字,你可以使用env.JOB_NAME变量,或者检查所有的环境和预定义变量:

println env.getEnvironment()

或者只检查作业参数:

println params

现在一步一步的说明:

  1. 创建您的库,例如从Git SCM中创建,如图所示。

  2. 将库代码放到项目中,例如:<project_root_folder>/vars/common_code.groovy。您不需要额外的路径Jenkins/Library。此外,你还将文件命名为'snake case'风格,这在groovy中并不常见:

var目录包含定义全局变量的脚本可从Pipeline访问。每个*的基本名称。Groovy文件应该是Groovy (~ Java)标识符,常规为camelCased

你的文件在'camel case'

  1. 编写库代码:
// vars/commonCode.groovy
// Define your method
def call() {
// do some stuff
return 'Some message'
}
  1. 编写您的管道。脚本化管道示例:
#!/usr/bin/env groovy
// yourPipeline.groovy file in your project
@Library('jenkins-shared-library') _
// Get the message from the method in your library
def messageText = commonCode() as String
println messageText

如果你想定义一些全局变量,这个答案也可以帮助你。

PS:使用'vars'文件夹允许你从vars中加载所有内容在同一时间文件夹一次。如果您希望动态加载,请使用import fromsrc文件夹。

相关内容

最新更新