0

我有一个 groovy 脚本来为我的 Jenkins 服务器创建文件夹。文件夹插件已安装并正在运行。我还安装了 Job DSL 插件并创建了 Seed 作业。提供 groovy DSL 代码有 2 个选项。1. 使用提供的 DSL 脚本或 2. 查看文件系统。

如果我使用选项 1 并提供此脚本,它可以完美运行,我会看到文件夹:

def folders = '''
Active Folder
Active Folder/DqCpi
Active Folder/DqCtlRent
Active Folder/DqFileBox
'''

def folderList = folders.tokenize('\n')

for (folderName in folderList) {
    folder(folderName)
}

到目前为止,一切都很好。

我将此代码保存到种子作业工作区文件夹中的 Folders.groovy 中,然后尝试选项 2

这失败了,控制台中的错误消息是:

Processing DSL script Folders.groovy
ERROR: (Folders.groovy, line 1) No signature of method: Folders.?def() is applicable for argument types: (java.lang.String) values: [
Active Folder
Active Folder/DqCpi
Active Folder/DqCtlRent
Active Folder/DqFileBox
]
Possible solutions: grep(), folder(java.lang.String), job(java.lang.String), queue(java.lang.String), use([Ljava.lang.Object;), grep(java.lang.Object)
Finished: FAILURE

文件 Folders.groovy 以 UTF8 格式保存。

为什么 inline 版本有效而​​文件版本失败?

4

1 回答 1

0

看来这与脚本文件的编码有关。我的文本编辑器 Notepad++ 以 UTF8 格式保存了 Folders.groovy 文件。

然后我在 Jenkins 系统属性页面上注意到以下设置 sun.io.unicode.encoding UnicodeLittle

我打开文件 Folders.groovy 并将编码从 UTF8 更改为没有 BOM 的 UTF8。在此更改之后,脚本可以完美运行。

更新 我更新到最新版本的 Jenkins 并尝试将 Groovy 脚本保存为 UTF8,但它仍然失败。我已经尝试过不带 BOM 的 ANSI 和 UTF8,它们都可以正常工作,所以我们只需要习惯于使用非默认编码保存我们的脚本。

于 2015-11-30T15:44:41.150 回答