Jenkins 插件回购作为代理回购在公司代理后面
Jenkins plugin repo as proxy repo when behind a corporate proxy
有没有一种方法或工具可以让我将 jenkins plugin site 设置为代理存储库,以便在 Jenkins 中我可以从代理存储库而不是原始站点获取插件更新?
问题特别出现在您无法直接访问互联网的环境中。所以在我的场景中,我有一个 Nexus Repo Server 可以访问互联网。詹金斯服务器没有。所以我的方法是
- 设置代理存储库(假设
https://nexus.intra/repository/updates.jenkins.io/
是 https://updates.jenkins.io/
的代理
- 配置 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
- 在 Jenkins 主机上更新主机文件如下
<artifact repo ip> plugins.jenkins.io updates.jenkins.io updates.jenkins-ci.org mirrors.jenkins.io
在 artifact repo 前面设置一个反向代理,它处理 updates.jenkins.io
、updates.jenkins-ci.org
、plugins.jenkins.io
和 mirrors.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: /
可选地,如果您想使用 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
有没有一种方法或工具可以让我将 jenkins plugin site 设置为代理存储库,以便在 Jenkins 中我可以从代理存储库而不是原始站点获取插件更新?
问题特别出现在您无法直接访问互联网的环境中。所以在我的场景中,我有一个 Nexus Repo Server 可以访问互联网。詹金斯服务器没有。所以我的方法是
- 设置代理存储库(假设
https://nexus.intra/repository/updates.jenkins.io/
是https://updates.jenkins.io/
的代理
- 配置 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
- 在 Jenkins 主机上更新主机文件如下
<artifact repo ip> plugins.jenkins.io updates.jenkins.io updates.jenkins-ci.org mirrors.jenkins.io
在 artifact repo 前面设置一个反向代理,它处理
updates.jenkins.io
、updates.jenkins-ci.org
、plugins.jenkins.io
和mirrors.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: /
可选地,如果您想使用 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