-
Type:
Bug
-
Resolution: Unresolved
-
Priority:
Minor
-
Component/s: artifactory-plugin
-
Environment:Kubernetes
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?