Your browser was unable to load all of the resources. They may have been blocked by your firewall, proxy or browser configuration.
Press Ctrl+F5 or Ctrl+Shift+R to have your browser try again.

Build Condition "if script evaluate true" #2929

eciu ·
Hi,

I'm having problem with using build condition: "if script evaluate true". What I try to do is launch build as soon as one of the folder contain specific file. I tried to use execution of powershell script but it is constantly failing to evaluate it.

Script:

util.execute("C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe \"D:\checkifDeploymentExists.ps1" \"D:\_Deployment\"") == 1


Error message:

Failed to evaluate below expression:
mvel:util.execute("C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe \"D:\checkifDeploymentExists.ps1" \"D:\_Deployment\"") == 1


Same problem happens if I try to read file name as string and compare it to NULL value.
  • replies 4
  • views 3155
  • stars 0
robinshen ADMIN ·
I am not familar with powershell, but at least single back slash has to be replaced by double back slash in QB script:
util.execute("C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe D:\checkifDeploymentExists.ps1 D:\_Deployment") == 1


If this does not work, please show me the full error message including the stack trace.
eciu ·
Let say I've switched to groovy.

I use following code


${groovy:
def dir = new File("D:\_Deployment\")
if((dir.list() as List).empty)
return false
else
return true
}


And I keep receiving following error:


2014-08-20 16:58:49,264 [pool-1-thread-126] ERROR com.pmease.quickbuild.DefaultBuildEngine - Error processing build request.
java.lang.RuntimeException: Error executing check condition job.
at com.pmease.quickbuild.CheckConditionTask.reduce(CheckConditionTask.java:39)
at com.pmease.quickbuild.CheckConditionTask.reduce(CheckConditionTask.java:16)
at com.pmease.quickbuild.grid.GridTaskFuture.get(GridTaskFuture.java:95)
at com.pmease.quickbuild.grid.GridTaskFuture.get(GridTaskFuture.java:100)
at com.pmease.quickbuild.DefaultBuildEngine.process(DefaultBuildEngine.java:317)
at com.pmease.quickbuild.DefaultBuildEngine.access$000(DefaultBuildEngine.java:130)
at com.pmease.quickbuild.DefaultBuildEngine$2.run(DefaultBuildEngine.java:1081)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.RuntimeException: Failed to evaluate below expression:
groovy:
def dir = new File("D:\FITS\IDRf_Deployment\")
if((dir.list() as List).empty)
return false
else
return true
at com.pmease.quickbuild.util.ExceptionUtils.wrapException(ExceptionUtils.java:87)
at com.pmease.quickbuild.DefaultScriptEngine.evaluate(DefaultScriptEngine.java:94)
at com.pmease.quickbuild.DefaultScriptEngine.interpolate(DefaultScriptEngine.java:105)
at com.pmease.quickbuild.setting.configuration.buildcondition.ScriptBuildCondition.satisfied(ScriptBuildCondition.java:39)
at com.pmease.quickbuild.model.Configuration.isBuildNecessary(Configuration.java:1354)
at com.pmease.quickbuild.CheckConditionJob.execute(CheckConditionJob.java:39)
at com.pmease.quickbuild.grid.GridJob.run(GridJob.java:73)
... 5 more
Caused by: com.pmease.quickbuild.QuickbuildException: java.lang.NullPointerException: Cannot get property 'empty' on null object
at org.codehaus.groovy.runtime.NullObject.getProperty(NullObject.java:56)
at org.codehaus.groovy.runtime.InvokerHelper.getProperty(InvokerHelper.java:156)
at org.codehaus.groovy.runtime.callsite.NullCallSite.getProperty(NullCallSite.java:44)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGetProperty(AbstractCallSite.java:227)
at script14085464242561778671162.run(script14085464242561778671162.groovy:3)
at com.pmease.quickbuild.plugin.basis.BasisPlugin$28.evaluate(BasisPlugin.java:347)
at com.pmease.quickbuild.DefaultScriptEngine.evaluate(DefaultScriptEngine.java:81)
at com.pmease.quickbuild.DefaultScriptEngine.interpolate(DefaultScriptEngine.java:105)
at com.pmease.quickbuild.setting.configuration.buildcondition.ScriptBuildCondition.satisfied(ScriptBuildCondition.java:39)
at com.pmease.quickbuild.model.Configuration.isBuildNecessary(Configuration.java:1354)
at com.pmease.quickbuild.CheckConditionJob.execute(CheckConditionJob.java:39)
at com.pmease.quickbuild.grid.GridJob.run(GridJob.java:73)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
at com.pmease.quickbuild.plugin.basis.BasisPlugin$28.evaluate(BasisPlugin.java:371)
at com.pmease.quickbuild.DefaultScriptEngine.evaluate(DefaultScriptEngine.java:81)
... 10 more


The code itself seems to be ok, becouse it works without problem in groovy console. Any idea what may be wrong ?
robinshen ADMIN ·
Firstable, remove surrounding ${} as it is not necessary for script fields.

groovy:
def dir = new File("D:\_Deployment\")
if((dir.list() as List).empty)
return false
else
return true


Secondly, the NPE seems to me that the dir.list() returns a null value which indicates that the directory "D:\_Deployment\" does not exist.
eciu ·
Yeah, my bad. I've badly assumed that build condition is evaluated on server, in fact it is evaluated on node (where the path was not existing). Thanks for help (and sorry for dumb questions).