Search code examples
jenkinsjenkins-cli

Installing local plugin via jenkins-cli


  1. I've enabled 'Enable CLI over remoting'.
  2. I've set TCP port for JNLP either fixed or random.
  3. I've downloaded the jenkins-cli.jar successfully.

when preforming plugin-install command i receive:

  • When executing: java -jar jenkins-cli.jar -auth user:pass -s http://localhost:8080 install-plugin file:///folder/plugin.hpi

    ERROR: Unexpected exception occurred while performing install-plugin command. java.io.FileNotFoundException: /folder/plugin.hpi (No such file or directory)

  • Without the file://

    /folder/plugin.hpi is neither a valid file, URL, nor a plugin artifact name in the update center

I've tried every possible combination, the file does exist.

Edit: from the exception it keeps thinking that it's url instead of file:

at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(FileInputStream.java:195)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at java.io.FileInputStream.<init>(FileInputStream.java:93)
    at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:90)
    at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188)
    at java.net.URL.openStream(URL.java:1045)
    at hudson.FilePath.copyFrom(FilePath.java:890)

"

Edit 2: It does work when given HTTP URL, but it will require me to upload it to a server which I don't have every time.

Edit 3: I tried moving the file to the same folder of Jenkins /var/lib/jenkins and give it permissions of 777.


Solution

  • The URL that you provide as argument to install-plugin must be accessible by the Jenkins master process. If you get the error message

    /folder/plugin.hpi (No such file or directory)
    

    then there's most likely a problem with access rights, or /folder is not mounted on the master's host (or in the master's container, if you use docker).

    This is why a HTTP URL does work.

    So, for file:// URLs, you need to align filesystem mounts and permissions between CLI user/machine and Jenkins master user/machine.