Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Test failing if script file includes *pipelineJob()* config #65

Open
wunzeco opened this issue Nov 29, 2016 · 5 comments
Open

Test failing if script file includes *pipelineJob()* config #65

wunzeco opened this issue Nov 29, 2016 · 5 comments

Comments

@wunzeco
Copy link

wunzeco commented Nov 29, 2016

Hey guys,

Since updating to the latest job-dsl-gradle-example (5a63306), the tests are failing on pipelineJob() config. For instance,

def product = 'catalog'
def toolsDslRepo = 'infra-tools'
pipelineJob("${product}-infra-tools-pipeline") {
    triggers {
        scm 'H/2 * * * *'
    }
    definition {
        cpsScm {
            scm {
                git {
                    remote {
                        github("wunzeco/${toolsDslRepo}", 'ssh')
                        credentials("ci-user-git-creds-id")
                    }
                    branch('master')
                    extensions {
                        relativeTargetDirectory("${toolsDslRepo}")
                    }
                }
            }
            scriptPath("${toolsDslRepo}/Jenkinsfile")
        }
    }
}

When I run ./gradlew test --info I notice the warning below, which I reckon might be the cause. I've attached the output log.

com.dslexample.JobScriptsSpec > test script infraJobs.groovy STANDARD_ERROR
    Nov 29, 2016 4:49:11 PM javaposse.jobdsl.plugin.JenkinsJobManagement createOrUpdateConfig
    INFO: createOrUpdateConfig for catalog-infra-tools-pipeline
    Nov 29, 2016 4:49:11 PM javaposse.jobdsl.plugin.JenkinsJobManagement createNewItem
    WARNING: Error writing config for new item catalog-infra-tools-pipeline.
    java.io.IOException: Unable to read /var/folders/wx/4rccdhxs56jf89mhg7t93x8c0000gn/T/hudson1305438357693048548test/jobs/catalog-infra-tools-pipeline/config.xml
        at hudson.XmlFile.read(XmlFile.java:144)
        at hudson.model.Items.load(Items.java:326)
        at hudson.model.ItemGroupMixIn$4.call(ItemGroupMixIn.java:271)
        at hudson.model.ItemGroupMixIn$4.call(ItemGroupMixIn.java:269)
        at hudson.model.Items.whileUpdatingByXml(Items.java:96)

If anyone has idea how to overcome this issue, I'd be grateful. Jenkins Job DSL plugin is able to process the script file without any issue though. Right now I've had to disable gradle test for the moment until I can find/figure out a fix.

info-log.txt
stacktrace-log.txt

@markus-mnm
Copy link

markus-mnm commented Jan 23, 2017

I have a similar problem.

My understanding is that the actual error from the above info-log.txt is this:

 com.dslexample.JobScriptsSpec > test script infraJobs.groovy FAILED
 Expected no exception to be thrown, but got 'java.lang.NullPointerException'
    at spock.lang.Specification.noExceptionThrown(Specification.java:118)
    at com.dslexample.JobScriptsSpec.test script #file.name(JobScriptsSpec.groovy:45)

    Caused by:
    java.lang.NullPointerException: Cannot get property 'url' on null object
        at com.dslexample.JobScriptsSpec.writeItems_closure1(JobScriptsSpec.groovy:66)
        at groovy.lang.Closure.call(Closure.java:414)
        at groovy.lang.Closure.call(Closure.java:430)
        at com.dslexample.JobScriptsSpec.writeItems(JobScriptsSpec.groovy:57)
        at com.dslexample.JobScriptsSpec.test script #file.name(JobScriptsSpec.groovy:42)

It seems that the latest commit on JobScriptsSpec.groovy ( afcf9c4825) added code to generate debug xml.
I find those xml very useful and like that getting the xml became a lot easier than in the past.

In my current scenario, the tests for the pipeline view returns NULL for jenkins.getView(viewName) when the code iterates over items.views.each and which in turn throws the above NullPointerException.

My work around is changing JobScriptsSpec slightly:

    items.views.each { GeneratedView generatedView ->
             String viewName = generatedView.name
             View view = jenkins.getView(viewName)
-            String text = new URL(jenkins.rootUrl + view.url + 'config.xml').text
-            writeFile new File(outputDir, 'views'), viewName, text
+            if (view) {
+              String text = new URL(jenkins.rootUrl + view.url + 'config.xml').text
+              writeFile new File(outputDir, 'views'), viewName, text
+            } else {
+                println "view: '" + generatedView.name + "' doest have a view";
+            }
         }
     }

as a side, the actual xml for my pipeline is still written as part of the items.jobs.each loop

@sheehan
Copy link
Owner

sheehan commented Jan 28, 2017

@wunzeco are you still seeing this issue? I just tried your example with the latest and it worked for me. I did add:

testPlugins 'org.jenkins-ci.plugins.workflow:workflow-aggregator:2.4'

@sheehan
Copy link
Owner

sheehan commented Jan 28, 2017

@markus-mnm do you have an example that returns null?

@carstenlenz
Copy link

Hey. I am also running into the above NPE while iterating the views.

Here is a short example reproducing the issue:
build.gradle:

testPlugins 'org.jenkins-ci.plugins:cloudbees-folder:5.18'
testPlugins 'org.jenkins-ci.plugins:build-pipeline-plugin:1.4.9'

jobs.groovy:


folder('a') {
    displayName 'A'
}

folder('a/b') {
    displayName 'B'
}

buildPipelineView('a/b/My View') {
  title('My View')
  displayedBuilds(5)
  selectedJob('some job')
}

It works when the view is not inside a folder!

@markhollingsworth
Copy link

Needed these in build.gradle

testPlugins 'org.jenkins-ci.plugins:cloudbees-folder:6.3'
testPlugins 'org.jenkins-ci.plugins:credentials:2.1.16'
testPlugins 'org.jenkins-ci.plugins.workflow:workflow-aggregator:2.4'

And this is my pipeline and it works

pipelineJob("${folderName}/examplePipeline") {
  definition {
    cps {
      sandbox()
      script("""
        node {
          stage('hello') {
            echo 'hello'
          }
          stage('world') {
            echo 'world'
          }
        }
      """.stripIndent())
    }
  }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants