Running a bat file

110 views
Skip to first unread message

harvey

unread,
Sep 12, 2017, 10:25:59 AM9/12/17
to Jenkins Users
Hi,

I am trying to run a bat file to start a server and I used the following script:

cd c:\...\bin
call asadmin start-domain

But I see that Jenkins isn't waiting for the batch script to exhibit.

I would be thankful, if you could guide me in this regard.

Regards,
Harvey

jer...@bodycad.com

unread,
Sep 12, 2017, 1:21:55 PM9/12/17
to Jenkins Users
Take care that you are actually chaining batch command. What is chaining batch, someone somewhere though it would be nice to make this super weird feature for batch script only (yeah a lot of sarcasm here, the first time you see this beahavior and realize wtf someone wanted to do this is beyond total common sense), where you call a batch from another batch script, the remaining in between one can be skipped entirely. Here's the documentation from https://jpsoft.com/help/call.htm which give a better explanation of this eye bleeding nightmare:

WARNING! If you execute a batch file from inside another batch file without using CALL, the original batch file is terminated before the other one starts. This method of invoking a batch file from another is usually referred to as chaining. Note that if the batch file A.BTM uses CALL B, and B.BTM chains to the batch file C.BTM, on exit from C.BTM (without executing a CANCEL command) processing of batch file A.BTM is resumed as if it had used CALL C.

I suspect that the Jenkins shell execute the script you gave it as it is a call itself maybe, maybe the Jenkins people can shed some light on this.

harvey

unread,
Sep 13, 2017, 5:20:55 AM9/13/17
to Jenkins Users


On Tuesday, September 12, 2017 at 7:21:55 PM UTC+2, jer...@bodycad.com wrote:
Take care that you are actually chaining batch command. What is chaining batch, someone somewhere though it would be nice to make this super weird feature for batch script only (yeah a lot of sarcasm here, the first time you see this beahavior and realize wtf someone wanted to do this is beyond total common sense), where you call a batch from another batch script, the remaining in between one can be skipped entirely. Here's the documentation from https://jpsoft.com/help/call.htm which give a better explanation of this eye bleeding nightmare:

WARNING! If you execute a batch file from inside another batch file without using CALL, the original batch file is terminated before the other one starts. This method of invoking a batch file from another is usually referred to as chaining. Note that if the batch file A.BTM uses CALL B, and B.BTM chains to the batch file C.BTM, on exit from C.BTM (without executing a CANCEL command) processing of batch file A.BTM is resumed as if it had used CALL C.

But I am using CALL to run the other batch file. The problem is when I run the build, it is completed successfully. But the server is still not started. The commands works great in CMD and also I tried creating a batch file and even it works fine. And again I tried calling the batch file I created into Jenkins, yet there was no success. The problem still remained and the server was still not started.


I suspect that the Jenkins shell execute the script you gave it as it is a call itself maybe, maybe the Jenkins people can shed some light on this.


Regards,
Harvey

harvey

unread,
Sep 14, 2017, 3:25:41 AM9/14/17
to Jenkins Users
By using the following link: https://wiki.jenkins.io/display/JENKINS/ProcessTreeKiller, I edited the command as follows:

cd c:\glassfish3\bin\
asadmin start-domain
$BUILD_ID=dontKillMe

But it didn't solve my problem though. I am sure that this is not the way. I am new user to Jenkins, I have no idea about using environment variables. Any help would be appreciated, I am blocked at this stage, would be grateful if anyone could guide me in this regard.

Regards,
Harvey

jer...@bodycad.com

unread,
Sep 14, 2017, 1:29:51 PM9/14/17
to Jenkins Users
I'm not sure if you are using pipeline or not, either way, when you said the command succeed, the fact that a batch complete doesn't make it successful, make sure to evaluate the %errorlevel%  after critical command. ALso if you are using pipeline, make sure to check if the returnStatus and returnStdout to make sure you can fetch some information.

Also, I'm not sure if asadmin can be run by your jenkins service (make sure it got permission to do so). If Jenkins is installed as a service, take care no GUI can be launch from that user. If your start-domain use any gui, you will need to run your Jenkins as a real user and keep that user login under Windows. 
Also does the asadmin is available into the PATH of your jenkins user, may want to provide a full path.

If you can give more meat around the way you run your batch command and some console output that would help to help you.

harvey

unread,
Sep 15, 2017, 4:01:58 AM9/15/17
to Jenkins Users
Currently I am just trying to create a single build to Start the glassfish server. For the same I used a freestyle project and by selecting "Run a batch windows command line" in building steps I wrote the following commands:

cd c:\glassfish3\bin
call asadmin start-domain

Then I saved the build and executed it. The build completes with status success, but the glassfish server remain unstarted.

Other than these steps I haven't done any other steps. I did not set an ERROR LEVEL.

Is there something I am missing ?

Regards,
Harvey

t3knoid

unread,
Sep 15, 2017, 11:55:51 AM9/15/17
to Jenkins Users
Have you looked at using the Start command? As I understand it, it starts a process in a different context. In this way, when the Jenkins job ends, it doesnt shut down the service since its in a different context.

Gionni Reffo

unread,
Nov 27, 2018, 3:21:38 AM11/27/18
to Jenkins Users
Hi, did you have solved your problem? I'm in the same situation. Please, give me a feedback. Thanks.
Reply all
Reply to author
Forward
0 new messages