Url Jenkinsfile(Groovy)URI验证程序

Url Jenkinsfile(Groovy)URI验证程序,url,groovy,jenkins-pipeline,uri,jenkins-groovy,Url,Groovy,Jenkins Pipeline,Uri,Jenkins Groovy,我是Groovy和Jenkins的新手,所以希望这个问题是连贯的 我有一个用Groovy编写的Jenkins文件,希望验证其中一个参数是否为有效的URI。如果不编写自己的正则表达式检查,在Jenkins启动期间是否有一个库可以轻松调用?您可以尝试以下方法: try { def foo = new java.net.URL("yourURI").openStream() if (foo.getClass() == sun.net.www.protocol.h

我是Groovy和Jenkins的新手,所以希望这个问题是连贯的

我有一个用Groovy编写的Jenkins文件,希望验证其中一个参数是否为有效的URI。如果不编写自己的正则表达式检查,在Jenkins启动期间是否有一个库可以轻松调用?

您可以尝试以下方法:

    try {
        def foo = new java.net.URL("yourURI").openStream()
        if (foo.getClass() == sun.net.www.protocol.http.HttpURLConnection$HttpInputStream) {
            println 'valid'
            foo.close()
        }
    }
    catch (java.io.FileNotFoundException e) {
        println 'not valid'
        return
    }   

不幸的是,至少在我们的设置中不允许使用
URL.toUri
。(可能允许使用单独的配置。)显然,打开url(尝试连接到主机)是可能的,但感觉可能会导致其他问题

我的结局是:

    // Validation URLs in Jenkins script is hard (URL.toUri is banned). This regex roughly matches the subset of
    // URLs we might want to use (and some invalid but harmless URLs). You can get a rough sense what
    // this matches with a generation tool like https://www.browserling.com/tools/text-from-regex .
    def saneUrlPattern = ~/^https:\/\/[-\w]{1,32}(\.[-\w]{1,32}){0,4}(:[0-9]{1,5})?(\/|(\/[-\w]{1,32}){1,10})?(\?([-\w]{1,32}=[-\w]{0,40}(&[-\w]{1,32}=[-\w]{0,40}){1,8})?)?(#[-\w]{0,40})?$/
    if (!(params.sourceUrl =~ saneUrlPattern)) {
      return [error: "Invalid url ${params.sourceUrl}. A simple https URL is expected."]
    }
我意识到尝试用正则表达式验证URL是困难的。我试图在严格且正确的验证和正则表达式之间取得平衡,正则表达式有希望通过查看它并合理地确信它实际匹配的内容而被理解