When building in Kubernetes it is common to be building a docker image in a daemon less environment using img or kaniko. This is not compatible with gathering build information with the Artifactory plugin because it looks like the plugin requires the docker socket.

      When building an container image inside of the img project on Kubernetes:

      pipeline {
          agent {
              kubernetes {
                  defaultContainer 'test'
                  yaml """
                      apiVersion: v1
                      kind: Pod
                      metadata:
                        annotations:
                          container.apparmor.security.beta.kubernetes.io/img: unconfined
                          container.seccomp.security.alpha.kubernetes.io/img: unconfined
                      spec:
                        securityContext:
                          runAsUser: 1000
                          runAsGroup: 1000
                        containers:
                          - name: img
                            image: r.j3ss.co/img
                            imagePullPolicy: Always
                            command: [sh, -c, 'sleep 8h ; echo exiting due to timeout >&2']
                            tty: true
                            resources:
                              requests:
                                memory: 2Gi
                                cpu: 500m
                              limits:
                                memory: 2Gi
                                cpu: 2
                      """
              }
          }
          stages {
              stage('Build') {
                  steps {
                      script {
                          def artifactoryServer = Artifactory.server(<server-id>)
                          def artifactoryDocker = Artifactory.docker(server: artifactoryServer /*, host: "tcp://not-needed-because-using-daemonless:55555" */)
                          def artifactoryBuildInfo = Artifactory.newBuildInfo()
                          artifactoryDocker.push('test-image', 'docker-test-repo', artifactoryBuildInfo)
                      }
                  }
              }
          }
      }
      

      The following error is created:

      hudson.remoting.Channel$CallSiteStackTrace: Remote call to JNLP4-connect connection from ip-**********.ec2.internal/**********:*****
      		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 org.jfrog.hudson.pipeline.common.docker.utils.DockerAgentUtils.getImageIdFromAgent(DockerAgentUtils.java:291)
      		at org.jfrog.hudson.pipeline.common.executors.DockerExecutor.execute(DockerExecutor.java:59)
      		at org.jfrog.hudson.pipeline.scripted.steps.DockerPushStep$Execution.run(DockerPushStep.java:104)
      		at org.jfrog.hudson.pipeline.scripted.steps.DockerPushStep$Execution.run(DockerPushStep.java:71)
      		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)
      		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)
      java.io.FileNotFoundException
      	at io.netty.channel.unix.Errors.throwConnectException(Errors.java:110)
      	at io.netty.channel.unix.Socket.connect(Socket.java:257)
      	at io.netty.channel.epoll.AbstractEpollChannel.doConnect0(AbstractEpollChannel.java:728)
      	at io.netty.channel.epoll.AbstractEpollChannel.doConnect(AbstractEpollChannel.java:713)
      	at io.netty.channel.epoll.EpollDomainSocketChannel.doConnect(EpollDomainSocketChannel.java:87)
      	at io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.connect(AbstractEpollChannel.java:555)
      	at io.netty.channel.DefaultChannelPipeline$HeadContext.connect(DefaultChannelPipeline.java:1366)
      	at io.netty.channel.AbstractChannelHandlerContext.invokeConnect(AbstractChannelHandlerContext.java:545)
      	at io.netty.channel.AbstractChannelHandlerContext.connect(AbstractChannelHandlerContext.java:530)
      	at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.connect(CombinedChannelDuplexHandler.java:497)
      	at io.netty.channel.ChannelOutboundHandlerAdapter.connect(ChannelOutboundHandlerAdapter.java:47)
      	at io.netty.channel.CombinedChannelDuplexHandler.connect(CombinedChannelDuplexHandler.java:298)
      	at io.netty.channel.AbstractChannelHandlerContext.invokeConnect(AbstractChannelHandlerContext.java:545)
      	at io.netty.channel.AbstractChannelHandlerContext.connect(AbstractChannelHandlerContext.java:530)
      	at io.netty.channel.AbstractChannelHandlerContext.connect(AbstractChannelHandlerContext.java:512)
      	at io.netty.channel.DefaultChannelPipeline.connect(DefaultChannelPipeline.java:1024)
      	at io.netty.channel.AbstractChannel.connect(AbstractChannel.java:259)
      	at io.netty.bootstrap.Bootstrap$3.run(Bootstrap.java:252)
      	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)
      	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:404)
      	at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:335)
      	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:897)
      	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
      	at java.lang.Thread.run(Thread.java:748)
      

      Is there any way to gather build information and push to the Artifactory docker repo other than through the docker socket that the plugin uses?

          [JENKINS-65216] Daemonless Docker Build

          Jesse S added a comment -

          Found a related article: https://jfrog.com/knowledge-base/why-doesnt-my-build-have-paths-to-published-artifacts-even-though-it-did-upload-them/

          Would this be the proper way to set the build info if I were to push it using the `img push docker-test-repo:test-image`?

          Jesse S added a comment - Found a related article: https://jfrog.com/knowledge-base/why-doesnt-my-build-have-paths-to-published-artifacts-even-though-it-did-upload-them/ Would this be the proper way to set the build info if I were to push it using the `img push docker-test-repo:test-image`?

          Jesse S added a comment -

          Jesse S added a comment - Found that JFrog-cli support this https://github.com/jfrog/jfrog-cli/issues/804 -> https://github.com/jfrog/project-examples/tree/master/kaniko-example#prerequisites-for-running-this-example . Hoping this is on the roadmap for jfrog artifactory plugin!

            eyalbe Eyal Ben Moshe
            j_luxworth Jesse S
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated: