Groovy project.save() does not always work

91 views
Skip to first unread message

Sverre Moe

unread,
Apr 18, 2016, 3:27:48 AM4/18/16
to Jenkins Developers
I am not sure what I am doing wrong with my groovy script.
I have written a groovy update script to bulk update all my projects.
Sometimes it does not take affect when I call project.save()
I can afterwards open that project configuration page and everything looks right. The updated content is there.
However when I write a groovy read script to print out that information I updated, not all projects show the updated information.
If I then open those projects configuration page, do nothing and just press save then that information is available when I run the read script again.

Making a change in Script console using Groovy and then envoke project.save(), why is it that when I try to read the value again it does not show the changed value, but the old one.

Do I need to perform some other action than just project.save()

For instance given this groovy script to add some environment variables.
#!/usr/bin/env groovy

import java.lang.StringBuilder
import hudson.matrix.MatrixProject
import org.jenkinsci.plugins.envinject.EnvInjectJobProperty
import org.jenkinsci.plugins.envinject.EnvInjectJobPropertyInfo

def jenkinsInstance = jenkins.model.Jenkins.getInstance()
def developmentView = jenkinsInstance.getView("myView")
developmentView
.getItems().each { project ->

   
StringBuilder builder = new StringBuilder()
    builder
.append("NO_CPPCHECK=true")
    builder
.append("\n")
    builder
.append("NO_INSTALL=true")
   
final def propertiesContent = builder.toString()

   
def info = new EnvInjectJobPropertyInfo(null, propertiesContent, null, null, null, false)
   
def property = new EnvInjectJobProperty()
    property
.setOn(true)
    property
.setKeepJenkinsSystemVariables(true)
    property
.setKeepBuildVariables(true)
    property
.setInfo(info)

    project
.addProperty(property)
    project
.save()
}

Trying to read the same environment variables
#!/usr/bin/env groovy

import org.jenkinsci.plugins.envinject.EnvInjectJobProperty
import org.jenkinsci.plugins.envinject.EnvInjectJobPropertyInfo

def jenkinsInstance = jenkins.model.Jenkins.getInstance()
def developmentView = jenkinsInstance.getView("myView")
developmentView.getItems().each { project ->
  def EnvInjectJobProperty property = project.getProperty(EnvInjectJobProperty.class)
  if (property != null) {
    def info = property.getInfo()
    println info.getPropertiesContent()
  }
}

Not all projects now shows the environment variables.

Daniel Beck

unread,
Apr 18, 2016, 6:31:57 AM4/18/16
to jenkin...@googlegroups.com
You're never removing any potentially existing job properties, just adding. So it's likely you just get the old one returned from your API call, as the job properties list does not really support having two of the same type (but doesn't prevent it either). Confirm by looking at the config.xml.
> --
> You received this message because you are subscribed to the Google Groups "Jenkins Developers" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to jenkinsci-de...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-dev/37b712cb-5407-4359-bacd-37a700ef8aed%40googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

Sverre Moe

unread,
Apr 18, 2016, 7:31:25 AM4/18/16
to Jenkins Developers, m...@beckweb.net
That was the problem. Thank you.
I found that there was duplicate EnvInjectJobProperty within config.xml

I will update my script to remove the existing before adding the new.
Reply all
Reply to author
Forward
0 new messages