Попытка разбить строку на «//» в Jenkinsfile разделяет на «/» - PullRequest
0 голосов
/ 03 мая 2018

Как правильно пометить строку на двойной слеш // в Jenkinsfile?

В приведенном ниже примере вместо строки используется прямая косая черта /, что не является желаемым поведением.


Jenkinsfile

Сокращенный, упрощенный пример Jenkinsfile, содержащего соответствующую часть:

node {
    // Clean workspace before doing anything
    deleteDir()

    try {
        stage ('Clone') {
            def theURL = "http://<ip-on-lan>:<port-num>/path/to/some.asset"
            sh "echo 'theURL is: ${theURL}'"
            def tokenizedURL = theURL.tokenize('//')
            sh "echo 'tokenizedURL is: ${tokenizedURL}'"
        }
    } catch (err) {
        currentBuild.result = 'FAILED'
        throw err
    }
}


Журналы:

Вывод журнала из предыдущего:

echo 'theURL is: http://<ip-on-lan>:<port-num>/path/to/some.asset'— Shell Script<1s
    [ne_Branch-Name-M2X23QGNMETLDZWFK7IXVZQRCNSWYNTDFJZU54VP7DMIOD6Z4DGA] Running shell script
    + echo theURL is: http://<ip-on-lan>:<port-num>/path/to/some.asset
    theURL is: http://<ip-on-lan>:<port-num>/path/to/some.asset

echo 'tokenizedURL is: [http:, <ip-on-lan>:<port-num>, path, to, some.asset]'— Shell Script<1s  
    [ne_Branch-Name-M2X23QGNMETLDZWFK7IXVZQRCNSWYNTDFJZU54VP7DMIOD6Z4DGA] Running shell script
    + echo tokenizedURL is: [http:, <ip-on-lan>:<port-num>, path, to, some.asset]
    tokenizedURL is: [http:, <ip-on-lan>:<port-num>, path, to, some.asset]

Обратите внимание, что журналы показывают, что строка является токеном / вместо //.

1 Ответ

0 голосов
/ 03 мая 2018

tokenize принимает строку в качестве необязательного аргумента , который может содержать 1 или более символов в качестве разделителей. Он обрабатывает каждый символ в строковом аргументе как отдельный разделитель, поэтому // фактически совпадает с /

Чтобы разделить на //, вы можете использовать split, который поддерживает регулярное выражение:

theURL.split(/\/{2}/)  

Код Демо

...