当位于公司代理后面时,Jenkins 插件存储库作为代理存储库

问题描述 投票:0回答:1

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

此问题尤其出现在无法直接访问互联网的环境中。因此,在我的场景中,我有一个可以访问互联网的 Nexus Repo Server。 Jenkins 服务器还没有。所以我的方法是

  1. 设置一个代理仓库(假设
    https://nexus.intra/repository/updates.jenkins.io/
    https://updates.jenkins.io/
  2. 的代理)
  3. 配置 Jenkins,以便从代理存储库收集插件。因此,我将插件 udate 站点配置为
    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 artifactory nexus
1个回答
2
投票

我实现的一个解决方案是修改 Jenkins 主机上的

hosts
文件,使其在查询
updates.jenkins-ci.org
时指向工件存储库。然而,这需要在您的工件存储库之前有一个反向代理。

一步一步

  1. 在 Jenkins 主机上更新主机文件,如下

    <artifact repo ip> plugins.jenkins.io updates.jenkins.io updates.jenkins-ci.org mirrors.jenkins.io
    
  2. 在工件存储库前面设置一个反向代理,用于处理

    updates.jenkins.io
    updates.jenkins-ci.org
    plugins.jenkins.io
    mirrors.jenkins.io
    到工件存储库的流量

    如果您在 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
    

防火墙

此外,如果您的连接受到限制,我建议将您的工件存储库的所有镜像列入白名单,以便它可以正确获取工件

  • 插件.jenkins.io
  • updates.jenkins-ci.org
  • mirrors.tuna.tsinghua.edu.cn
  • ftp.yz.yamagata-u.ac.jp
  • mirror.esuni.jp
  • mirrors.seville-jam.es
  • mirror.xmission.com
  • archives.jenkins-ci.org
  • ftp-chi.osuosl.org ftp-nyc.osuosl.org

或者更简单的解决方案是将artifactory配置为仅从特定镜像中选择更新。

© www.soinside.com 2019 - 2024. All rights reserved.