Конвейер Jenkins - как сравнить пути к файлам, если я не могу использовать класс Java Path? - PullRequest
0 голосов
/ 19 декабря 2018

В Java я бы использовал Paths для сравнения двух путей к файлам, чтобы убедиться, что path1 может быть дочерним по отношению к path2.

Path path1 = Paths.get("/path/to/jenkins/workspace1").normalize();
Path path2 = Paths.get("/path/to/jenkins/workspace1/some/dir").normalize();

path2.startsWith(path1);

Я не могу использовать класс Path в конвейере.Как бы вы сравнили это в groovy?

Похоже, нет другого способа, кроме как разбить две строки на списки и убедиться, что элемент i из path1 совпадает с элементом i из path2.

То, что я пытаюсь сделать, это добавить проверку к моей работе по сборке, которая проверяет, что path2 (именованная, смонтированная зависимость сборки) действительно находится внутри path1 (мой корень рабочей области).

Например, если path1 = "/ some / path / to / jenkins / workspace1" и path2 = "/ some / path / to / jenkins / workspace2 / some / dir", я должен завершить сборку какотказоустойчивый.

Ответы [ 2 ]

0 голосов
/ 25 августа 2019

См. этот ответ .Вы можете использовать класс URI для генерации нормализованных путей, а затем использовать сравнение строк:

def path1 = new URI("/path/to/jenkins/workspace1").normalize().toString()
def path2 = new URI("/path/to/jenkins/workspace1/some/dir").normalize().toString()
path2.startsWith(path1)
0 голосов
/ 19 декабря 2018

Мне удалось импортировать пути, используя глобальную конвейерную библиотеку и вызвав из этого метод сравнения.Несколько некрасиво, но это работает.

...