Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

why am I not able to run batch file in jenkins pipeline running in windows 10?

I'm trying to run a batchscript present inside the workspace of jenkins. I have written a groovy script as below to do this

stage('batchscript') {
   steps{
      bat 'start cmd.exe /c C:\\Program Files (x86)\\Jenkins\\workspace\\jenkins Project\\batchfile.bat'\
   }
}

when I build the job it should open a new command window and run my batch file in a new command prompt executing all the bat commands. The build is succesful but no command window opens up. Any suggestion will be helpfull

like image 453
deepinside Avatar asked Nov 05 '18 06:11

deepinside


People also ask

Why can't I run a Jenkins script in a bat file?

The number of reasons why this doesn’t work is large. Very large. You need to supply more context to get a better answer. However, one thing you could check is that your Jenkins instance is running on Windows. If it isn’t, you can’t expect a .bat file to work. If you are running on a *nix system, make sure your script has the execution flag set.

How do I run a Jenkins pipeline on Windows?

If your pipeline will run on MS Windows you'll need to use the bat command. Naturally the commands you pass to these will also need to make sense on the specific operating system. In this example first we use the internal echo command of Jenkins. Then we call sh and run the echo of our Unix shell.

How to transfer files from Jenkins Windows Server to Linux server?

I have created a powershell script which will transfer (using winscp.dll) the files from Jenkins windows server to Linux server. In Jenkins batch command, I have executed that powershell script and it works fine. But when i tried the same in Jenkins pipeline job, it calls the powershell script and comes to the next step.

How to use echo command in Jenkins?

In this example first we use the internal echo command of Jenkins. Then we call sh and run the echo of our Unix shell. Then we execute the hostname command and finally the uptime command.


2 Answers

Jenkins is aimed to execute shell commands in background mode, not for interactive(UI) mode. When you run start cmd.exe /c c://some/app.exe a new cmd UI is opened and this will never happen in jenkins.

Single line

If you need to execute a simple batch commands with jenkins :

stage('build') {
      cmd_exec('echo "Buils starting..."')
      cmd_exec('echo "dir /a /b"')
}

def cmd_exec(command) {
    return bat(returnStdout: true, script: "${command}").trim()
}

Here a advanced example :

  • https://gist.github.com/VladFrost/89e8ccabd40eb0f52374d7982b557c8e

Multiline

steps {
  echo 'Deploy to staging environment'

  // Launch tomcat
  bat """
    cd c:\\qa\\bin
    dir /a /b
    startup
  """
  
  bat """
    cd c:\\qa\\bin
    startup
  """

  // Code to move WAR to Tomcat
  bat "xcopy /y c:\\webapp\\target\\webapp.war ..."
  bat "xcopy /y c:\\webapp\\target\\webapp.war ..."
}

Example:

  • https://gist.github.com/timothyshort/a1364b36a0ee1c0dca378e6f438c0e1c

Invoke batch file

If you need to execute a batch file with jenkins :

stage('build') {
  dir("build_folder"){
      bat "run_build_windows.bat"
  }
}

or

stage('build') {
  bat "c://some/folder/run_build_windows.bat"
}

Windows paths some time are bizarre :s . Anyway, linux is the best choice to host jenkins.

like image 54
JRichardsz Avatar answered Oct 02 '22 02:10

JRichardsz


Reference: https://thenucleargeeks.com/2020/11/24/how-to-run-batch-scripts-commands-in-jenkinsfile/

node {
        stage('Preparation') {
           //Preparations and checkout the code 
        }
        stage('Build') {
           //Build command     
        }
        stage('Post build action'){
     
       bat '''  ECHO Hello World  '''
    
        }
     }
like image 41
Aditya Avatar answered Oct 02 '22 00:10

Aditya