我们正在使用詹金斯与管道多分支插件,Docker管道插件,凭证插件和Artifactory插件。
我们的构建运行在普通Docker JNLP从库中。在Jenkins Docker云中使用的Docker守护程序套接字是TLS安全的(-tlsverify set),因此我们在Jenkins中配置了Docker客户端凭证。
当使用脚本管道构建Docker映像时,我们使用Docker管道插件设置Docker主机和凭据:
docker.withServer (env。DOCKER_HOST, 'jenkins_docker_credentials') {image = docker.build(buildImageTag) sh 'do something'}
这可以很好地用于构建图像,但不适用于使用Artifactory Plugin将图像推入或从Artifactory拖动到Artifactory。
这样的:
def artServer = Artifactory.server(env.ART_SERVER)docker服务器:artServer,主机:env。DOCKER_HOST docker.withServer (env。DOCKER_HOST, 'jenkins_docker_credentials') {artDocker。push(buildImageTag, artRepoDeploy, buildInfo)}
从不使用Docker管道插件设置的Docker凭据。相反,Artifactory试图连接到env。没有TLS的DOCKER_HOST。因为Artifactory没有凭据参数。码头工人I am looking for a way to configure Artifactory Plugin for TLS with Docker.
我从查看代码中发现:
底层的docker-java支持系统环境、系统属性、属性文件和用于设置TLS客户端凭证的编程配置。由于我们使用的是普通的Jenkins Docker JNLP客户端,因此似乎没有办法为运行Artifactory Plugin的JNLP客户端进程设置系统环境或系统属性。
作为一个解决方案,我们写了一个属性文件来配置docker-java的TLS:
docker.withServer (env。DOCKER_HOST, 'jenkins_docker_credentials') {writeFile文件:"${env.JENKINS_HOME}/.docker-java. "属性”,文本:“DOCKER_TLS_VERIFY = $ {env.DOCKER_TLS_VERIFY} \ nDOCKER_CERT_PATH = $ {env。artDocker DOCKER_CERT_PATH}”。push(buildImageTag, artRepoDeploy, buildInfo)}
这是可行的,但很难看,容易出错。我能想到两个更好的解决方案:
1.在Artifactory插件中实现Docker凭据处理
2.使用Docker凭据从Jenkins envars设置Docker管道插件
如果你能看一下这个就太好了。我试着寻求支持,但无法解释我们的问题是什么。
我有一个2的工作实现。它的计算Jenkins envars和只设置docker-java DefaultDockerClientConfig TLS选项,如果DOCKER_CERT_PATH和DOCKER_TLS_VERIFY被找到。没有额外的插件依赖。我可以为此开个公关公司。