Jenkins 插件回购作为代理回购在公司代理后面

Jenkins plugin repo as proxy repo when behind a corporate proxy

有没有一种方法或工具可以让我将 jenkins plugin site 设置为代理存储库,以便在 Jenkins 中我可以从代理存储库而不是原始站点获取插件更新?

问题特别出现在您无法直接访问互联网的环境中。所以在我的场景中,我有一个 Nexus Repo Server 可以访问互联网。詹金斯服务器没有。所以我的方法是

  1. 设置代理存储库(假设 https://nexus.intra/repository/updates.jenkins.io/https://updates.jenkins.io/
  2. 的代理
  3. 配置 Jenkins,以便从代理存储库收集插件。因此,我将插件更新站点配置为 https://nexus.intra/repository/updates.jenkins.io/update-center.json

这不起作用。我收到新插件的通知,但是当我尝试下载插件时连接失败,因为在 update-center.json 中指向插件的指针仍然是 https://updates.jenkins.io/。看这里...

updateCenter.post(
....
,"url":"http://updates.jenkins-ci.org/download/plugins/AnchorChain/1.0/AnchorChain.hpi",
....

有什么实现方法吗?

我实施的一个解决方案是修改 Jenkins 主机上的 hosts 文件,使其在查询 updates.jenkins-ci.org 时指向工件存储库。但是,这需要在您的工件存储库前使用反向代理。

Step-by-Step

  1. 在 Jenkins 主机上更新主机文件如下
    <artifact repo ip> plugins.jenkins.io updates.jenkins.io updates.jenkins-ci.org mirrors.jenkins.io
    
  2. 在 artifact repo 前面设置一个反向代理,它处理 updates.jenkins.ioupdates.jenkins-ci.orgplugins.jenkins.iomirrors.jenkins.io 到你的 artifact 的流量回购

    如果你是 运行 你在 k8s 中的神器回购,你的 Ingress 可能如下所示:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
    name: artifactory-repo-jenkins
    annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /artifactory/remote-generic-updates.jenkins/
        nginx.ingress.kubernetes.io/upstream-vhost: "artifactory.intra"
        nginx.ingress.kubernetes.io/ssl-redirect: "false"
    spec:
    tls:
    - hosts:
        - updates.jenkins.io
        - updates.jenkins-ci.org
        - mirrors.jenkins.io
        secretName: artifactory-jenkins-ingress-cert
    rules:
    - host: jenkins.intra
        http:
        paths:
        - backend:
            serviceName: artifactory-artifactory
            servicePort: 8081
            path: /
    - host: updates.jenkins.io
        http:
        paths:
        - backend:
            serviceName: artifactory-artifactory
            servicePort: 8081
            path: /
    - host: updates.jenkins-ci.org
        http:
        paths:
        - backend:
            serviceName: artifactory-artifactory
            servicePort: 8081
            path: /
    - host: mirrors.jenkins.io
        http:
        paths:
        - backend:
            serviceName: artifactory-artifactory
            servicePort: 8081
            path: /
    
  3. 可选地,如果您想使用 ssl,您必须创建一个包含 url 作为备用名称的证书。

    [req]
    distinguished_name = req_distinguished_name
    req_extensions = v3_req
    prompt = no
    [req_distinguished_name]
    C = CH
    O=My Company
    OU = Artifactory
    CN = jenkins.intra
    [v3_req]
    keyUsage = keyEncipherment, dataEncipherment
    extendedKeyUsage = serverAuth
    subjectAltName = @alt_names
    [alt_names]
    DNS.1 = jenkins.intra
    DNS.2 = updates.jenkins-ci.org
    DNS.3 = plugins.jenkins.io
    DNS.4 = updates.jenkins.io
    DNS.5 = mirrors.jenkins.io
    

防火墙

此外,如果您的连接受限,我建议为您的工件存储库 white-list 所有 mirrors 以便它可以正确获取工件

  • plugins.jenkins.io
  • 更新.jenkins-ci.org
  • mirrors.tuna.tsinghua.edu.cn
  • ftp.yz.yamagata-u.ac.jp
  • mirror.esuni.jp
  • 镜子.seville-jam.es
  • mirror.xmission.com
  • archives.jenkins-ci.org
  • ftp-chi.osuosl.org ftp-nyc.osuosl.org