Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-58624

docker.withRegistry doesn't use build environment

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Open (View Workflow)
    • Priority: Major
    • Resolution: Unresolved
    • Component/s: docker-commons-plugin
    • Labels:
      None
    • Environment:
      Jenkins 2.176.2, linux master, agent on macOS 10.13.6
    • Similar Issues:

      Description

      When running a pipeline script like this:

      node('docker') {
      
          def CURRENT_VERSION
          def builtImage
      
          stage('Clone repository') {
              checkout scm
          }
      
          stage('Output version') {
              CURRENT_VERSION = sh (returnStdout: true,
                  script: 'python "${SCRIPTS}/version.py" show all'
              ).trim()
          }
      
          stage('Build image') {
              builtImage = docker.build("${DOCKER_IMAGE}:${CURRENT_VERSION}", ".")
          }
      
          stage('Push image') {
              docker.withRegistry("${DOCKER_REGISTRY}", "${DOCKER_CREDENTIALS}") {
                  builtImage.push()
              }
          }
      }
      

      The build fails on the docker.withRegistry stage with error docker command not found:

      Successfully built 8e4939ceb3f6
      Successfully tagged org/project:2.5.2.112-1-g3cab587
      [Pipeline] dockerFingerprintFrom
      [Pipeline] }
      [Pipeline] // stage
      [Pipeline] }
      [Pipeline] // node
      [Pipeline] End of Pipeline
      java.io.IOException: error=2, No such file or directory
        at java.lang.UNIXProcess.forkAndExec(Native Method)
        at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
        at java.lang.ProcessImpl.start(ProcessImpl.java:134)
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
      Also:   hudson.remoting.Channel$CallSiteStackTrace: Remote call to mini-01
            at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1743)
            at hudson.remoting.UserRequest$ExceptionResponse.retrieve(UserRequest.java:357)
            at hudson.remoting.Channel.call(Channel.java:957)
            at hudson.Launcher$RemoteLauncher.launch(Launcher.java:1060)
            at hudson.Launcher$ProcStarter.start(Launcher.java:455)
            at org.jenkinsci.plugins.docker.workflow.client.DockerClient.launch(DockerClient.java:296)
            at org.jenkinsci.plugins.docker.workflow.client.DockerClient.launch(DockerClient.java:277)
            at org.jenkinsci.plugins.docker.workflow.client.DockerClient.launch(DockerClient.java:274)
            at org.jenkinsci.plugins.docker.workflow.client.DockerClient.inspect(DockerClient.java:198)
            at org.jenkinsci.plugins.docker.workflow.client.DockerClient.inspectRequiredField(DockerClient.java:218)
            at org.jenkinsci.plugins.docker.workflow.FromFingerprintStep$Execution.run(FromFingerprintStep.java:110)
            at org.jenkinsci.plugins.docker.workflow.FromFingerprintStep$Execution.run(FromFingerprintStep.java:84)
            at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1$1.call(AbstractSynchronousNonBlockingStepExecution.java:47)
            at hudson.security.ACL.impersonate(ACL.java:290)
            at org.jenkinsci.plugins.workflow.steps.AbstractSynchronousNonBlockingStepExecution$1.run(AbstractSynchronousNonBlockingStepExecution.java:44)
            at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
      Caused: java.io.IOException: Cannot run program "docker": error=2, No such file or directory
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
        at hudson.Proc$LocalProc.<init>(Proc.java:250)
        at hudson.Proc$LocalProc.<init>(Proc.java:219)
        at hudson.Launcher$LocalLauncher.launch(Launcher.java:937)
        at hudson.Launcher$ProcStarter.start(Launcher.java:455)
        at hudson.Launcher$RemoteLaunchCallable.call(Launcher.java:1319)
        at hudson.Launcher$RemoteLaunchCallable.call(Launcher.java:1272)
        at hudson.remoting.UserRequest.perform(UserRequest.java:212)
        at hudson.remoting.UserRequest.perform(UserRequest.java:54)
        at hudson.remoting.Request$2.run(Request.java:369)
        at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:72)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
      Finished: FAILURE
      

      The install location on the slave for the docker binary is in /usr/local/bin, which is not by default in PATH.

      It is set as an extra variable on the executor configuration by setting an environment variable named PATH+LOCALBIN with value /usr/local/bin.

      I managed to override the problem by building a custom version of the plugin, setting the docker command with a hardcoded path in DockerTool.java:58, but it's not a general solution.

        Attachments

          Activity

          Hide
          lkraider Paul Eipper added a comment -

          Probably related to https://issues.jenkins-ci.org/browse/JENKINS-47415 since it fails in the fingerprint.

          Show
          lkraider Paul Eipper added a comment - Probably related to https://issues.jenkins-ci.org/browse/JENKINS-47415 since it fails in the fingerprint.
          Hide
          lkraider Paul Eipper added a comment -

          Of note: I tried setting a docker tool location, with override on the slave to "/usr/local", but it still failed to find the docker command.

          Show
          lkraider Paul Eipper added a comment - Of note: I tried setting a docker tool location, with override on the slave to "/usr/local", but it still failed to find the docker command.

            People

            Assignee:
            Unassigned Unassigned
            Reporter:
            lkraider Paul Eipper
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Dates

              Created:
              Updated: