Docker Artifactory插件代理导致/v1/\u ping:坏网关

Docker Artifactory插件代理导致/v1/\u ping:坏网关,docker,jenkins-plugins,artifactory,Docker,Jenkins Plugins,Artifactory,当我按照使用说明操作时,为什么会出现/v1/\u ping:Bad Gateway错误 jenkins 2.60.3和Artifactory插件2.12.2 在端口9999上为Docker映像启用生成信息代理 jenkins/var/lib/jenkins/secrets/jfrog/certs/jfrog.proxy.crt添加到jenkins主机和从机上的$JAVA_HOME/jre/lib/security/cacerts jfrog nginx自签名证书添加到jenkins master

当我按照使用说明操作时,为什么会出现
/v1/\u ping:Bad Gateway
错误

  • jenkins 2.60.3和Artifactory插件2.12.2
  • 在端口9999上为Docker映像启用生成信息代理
  • jenkins
    /var/lib/jenkins/secrets/jfrog/certs/jfrog.proxy.crt
    添加到jenkins主机和从机上的$JAVA_HOME/jre/lib/security/cacerts
  • jfrog nginx自签名证书添加到jenkins master和slave上的$JAVA_HOME/jre/lib/security/cacerts
  • 访问jenkins:9999在主机之间打开
  • /etc/systemd/system/docker.service.d/http proxy.conf
    包含以下内容,与测试没有区别

    [服务] Environment=“HTTP\u PROXY=”

    [服务] Environment=“HTTPS\u PROXY=”

  • 本地docker测试(
    docker登录127.0.0.1:9999
    )导致

  • 来自守护进程的错误响应:登录:对URI的错误请求:/v1/users/(代码:400;标题:映射[内容长度:[30]内容类型:[text/html;chars…

  • Jenkins在
    com.github.dockerjava.api.exception.BadRequestException:对URI的错误请求:/images/artifactory:/hello world:latest/json
  • 詹金斯日志中的错误

    SEVERE: (DISCONNECTED) [id: ..., L:0.0.0.0/0.0.0.0:... ! R:artifactory/...:5000]: 
    Caught an exception on ProxyToServerConnection
    io.netty.handler.codec.DecoderException: 
    javax.net.ssl.SSLHandshakeException: General SSLEngine problem
    ...
    Caused by: sun.security.validator.ValidatorException: PKIX path building
     failed: sun.security.provider.certpath.SunCertPathBuilderException: 
     unable to find valid certification path to requested target
    

    我的虚拟repo,当我不使用jenkins代理时,它的远程和本地工作,但根据插件文档,我需要jenkins代理来获取CI/CD促销所需的构建信息。

    如果jenkins不使用该证书文件,则将证书添加到cacerts的效果会稍差一些。我不确定将证书添加到商店是否需要重新启动n詹金斯,但tomcat似乎确实如此,所以詹金斯可能就是这样工作的

  • 配置jenkins实例以使用私有密钥库
  • 将$JENKINS_HOME/secrets/jfrog/certs/jfrog.proxy.crt复制到/etc/docker/certs.d/:/ca.crt
  • 重新启动docker
  • 重新启动詹金斯
  • 跟踪jenkins log-PASS时通过命令行测试代理

    docker rmi artifactory:5000/你好世界:最新版本 docker pull artifactory:5000/你好世界:最新版本

  • 这应该使用
    /etc/systemd/system/docker.service.d/http proxy.conf
    http\u proxy,然后转到实际的工件主机时转到jenkins proxy。应该在存储中找到所需的密钥,这样ssl握手就可以了,并且使用了v2 api。如果没有,您将在jenkins.log中看到错误

  • 通过shell在节点上测试helloworld

    node("docker-experiments") {
    withCredentials([usernamePassword(
        credentialsId: 'artifactory.jenkins.user',
        passwordVariable: 'ARTIFACTORY_PASSWORD',
        usernameVariable: 'ARTIFACTORY_USER')]) {
    
        sh "uname -a "
        def registry="artifactory:5000"
        def tag="${registry}/hello-world:${BUILD_NUMBER}-shelltest"
        stage('login') {
            sh "docker login ${registry} -u ${ARTIFACTORY_USER} -p ${ARTIFACTORY_PASSWORD}"
        }
        stage('pull and tag') {
            sh "docker pull hello-world"
            sh "docker tag hello-world:latest ${tag}"
        }
        stage('push') {
            sh "docker push ${tag}"
        }
    }
    }
    
  • 通过artifactory插件在节点上测试helloworld

    node("docker-experiments") {
    withCredentials([usernamePassword(
        credentialsId: 'artifactory.jenkins.user',
        passwordVariable: 'ARTIFACTORY_PASSWORD',
        usernameVariable: 'ARTIFACTORY_USER')]) {
    
        def server = Artifactory.server "artifactory01"
        def artDocker = Artifactory.docker(username: ARTIFACTORY_USER, 
                                           password: ARTIFACTORY_PASSWORD)
    
        def registry="artifactory:5000"
        def tag="${registry}/hello-world:${BUILD_NUMBER}-artifactoryTest"
        def dockerInfo
    
        stage('pull and tag') {
            sh "docker tag hello-world:latest ${tag}"
        }
    
        stage('push') {
          dockerInfo = artDocker.push "${tag}", "docker-local"
        }
        stage('publish') {
            server.publishBuildInfo(dockerInfo)
        }
    }
    }