i have a project which is made with grails 2.4.3 version and it needed to be run in command prompt.
I have made a batch file to run all the commands,
now i have to make a build through Jenkins, but when in run that .bat file in Jenkins it gives error:
Error |
Error occurred running Grails CLI: null
but when i run the bat file by double click it runs absolutely fine.
batch file:
call grails clean || exit /b
call grails compile || exit /b
call grails package || exit /b
call grails war || exit /b
Grails 2.4.x is not shipped with Gradle. I would use the grails wrapper (grailsw).
Take a look on the official docs to see more details about the wrapper but essentially you can execute your commands as follows:
./grailsw clean
./grailsw compile
./grailsw package
./grailsw war
Related
I'm attempting to get Jenkins to run a .bat file which contains a call to Poetry (for package management).
However, when running this .bat file via Jenkins, I'm getting a "'poetry' is not recognized as an internal or external command, operable program or batch file." error.
I believe this is due to the .bat file failing when it attempts to run a "call poetry check" command.
The .bat file runs successfully when run manually.
Is there some obvious feature of Jenkins that I'm missing here?
I'm aware that there is an alternative method of embedding poetry into Jenkins with direct commands. However this project is about to be passed on to someone else, and they would not be able to maintain that.
I've reproduced the key code below (the Jenkins code calling the .bat file, the code in the .bat file and the error output from Jenkins).
Jenkins code (standard pipeline with default settings):
pipeline {
agent any
stages {
stage('Main') {
steps {
bat 'E:\\project-folder\\project_run.bat'
}
}
}
}
Bat file code:
#echo off
cd /d "E:\project-folder\"
call poetry check && (
echo poetry checked
) || (
echo Problem with poetry
EXIT /B
)
echo Installing prod packages
call poetry install --no-dev && (
echo Production packages successfully installed
) || (
echo Problem installing packages to environment
EXIT /B
)
call python local-program.py
EXIT /B
)
Jenkins Error:
C:\Windows\system32\config\systemprofile\AppData\Local\Jenkins.jenkins\workspace[Pipeline_Name]>E:\project-folder\project_run.bat
Moving to project directory
'poetry' is not recognized as an internal or external command,
operable program or batch file.
Problem with poetry
Windows is looking up executables on the path you specify. If you run a command without a path, Windows looks for the command/executable in all directories specified in the environment variable PATH.
Very likely your Jenkins is running with different path settings than your interactive shell.
What you can do:
specify the full path to the command you want to raise in Jenkins
set the PATH variable in the Jenkins job prior to running the command
set the PATH variable before invoking Jenkins
Apart from the directory, Windows also has to check extensions. If you run poetry, Windows may have to find poetry.com, poetry.exe, poetry.bat or poetry.cmd. I suspect one of these files reside in E:\project-folder. To understand which files Windows checks for and the preference, have a look at the environment variable PATHEXT.
So to better understand these differences you can run the command set without parameters. Do that on the command line, and add the same command into your Jenkins job.
I am experiencing a strange issue with the following batch script run via cmd.exe on Windows:
#echo off
gradle wrapper
gradlew build
pause
This batch script only ever executes the first command, i.e. gradle wrapper. After that, the batch script automatically terminates and the command gradlew build is never executed.
Is there any way I can force the batch script so that it cannot be stopped by gradle wrapper and continues its execution normally after gradle wrapper has been called?
I have a feeling you may need to precede with call:
call gradle…
I want to build my app with custom run script.
After 'activator stage' I get built app, with default run script.
So I need to replace default script with my own.
I need batch file like this:
#echo off
set "name=projectName"
activator clean stage || pause 1
del ".\target\universal\stage\bin\%name%.bat"
exit
But after calling 'activator clean stage' script automatically close, how can I solve this problem?
If you are using Windows then bat:
#echo off
activator clean stage
copy custom.bat c:\target\universal\stage\bin\myproject.bat
Where custom.bat is your bat that will be used for start the project.
But better look at custom configuration of your project
https://www.playframework.com/documentation/2.1.x/ProductionConfiguration
I have configured NUnit tests to run after build completed.(Jenkins)
I added following on Excecute windows batch command window in Jenkins.
rmdir ClickOnceInstall /Q /S
mkdir ClickOnceInstall
CD BuildScripts
Start.bat
"C:\Program Files (x86)\NUnit 2.6.2\bin\nunit-console-x86.exe" AA.Tests\bin\x86\Release\AA.Tests.dll /xml=nunit-result.xml
It seems Execute unit test command doesn't create result file as specified name and marked as failed. However, when I run the nunit test command manually it creates the file. Next time build through Jenkins, result xml file does not seem to be updated but it doesn't fail.
am I missing any configuration or something else?
It would help if you would paste the console log.
However, my first guess is to ask you to add call to your batch file statement:
call Start.bat
If that batch file has an exit /b statement (even with 0), it will quit the whole calling step (i.e. "Execute windows batch command") without getting to your last statement (i.e nunit command).
Using call in front of the batch file will make sure that control is returned to the calling step.
I need to figure out this seemingly very simple issue on windows .bat file. I have been using Linux for past 10 years full-time, so I am in pretty unfamiliar territory when it comes to .bat scripts.
We have some units tests that need to run on from this .bat file, and a build needs to be generated after the tests have run.
The bat file itself is very simple, I was thinking of just chaining the commands:
cls
echo "Running test suite - CRMSync"
echo
echo
REM from command: --static-backup
phpunit --bootstrap test/bootstrap_test.php --verbose --log-junit
echo "Running phploc for CRMSync"
phploc --count-tests --verbose > C:\CRMsync\testResults\phploc\index.html
echo "Executing phing"
phing
Now, simple enough except nothing is executed past phpunit command. How do I deal with this?
The unit tests run fine, but I am suspecting it could even be in the unit test lib that process is killed. Is there a way to fork the process somehow or get the other commands below to run?
Thanks SO'ers, as always, any help greatly appreciated.
I had the same problem for a development script that I made. And I tried all given solutions without being successful. At the end, I did it with cmd /C.
From the windows docs it will:
Run Command and then terminate
So for example, you can use it as follows:
cls
echo "Running test suite - CRMSync"
echo
echo
REM from command: --static-backup
cmd /C phpunit --bootstrap test/bootstrap_test.php --verbose --log-junit
echo "Running phploc for CRMSync"
cmd /C phploc --count-tests --verbose > C:\CRMsync\testResults\phploc\index.html
echo "Executing phing"
cmd /C phing
I hope you find this useful.
Similar to the post ujifgc, I use "start /b ..." in these situations. If you encapsulate the call to phpunit in another batch file, you can use "call".
Is phpunit itself a batch file (I don't do much PHP, so am not familiar with the tool)? If so, try using:
call phpunit --bootstrap test/bootstrap_test.php --verbose --log-junit
Try start /WAIT phpunit ... to fork process and wait for it or just start phpunit ... to fork and continue. Help is here: start /?
I used
start /b code .
cmd /k ng serve --build-optimizer --aot
to start Visual Studio Code and then a node js server.
But the Command line glitched with the % update text and more.
I then used
cmd /C code .
cmd /k ng serve --build-optimizer --aot
and the glitching stopped for the server progress update.