有没有一种方法或工具可以让我将 jenkins 插件站点设置为代理存储库,以便在 Jenkins 中我可以从代理存储库而不是原始站点获取插件更新?
此问题尤其出现在无法直接访问互联网的环境中。因此,在我的场景中,我有一个可以访问互联网的 Nexus Repo Server。 Jenkins 服务器还没有。所以我的方法是
https://nexus.intra/repository/updates.jenkins.io/
是 https://updates.jenkins.io/
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
时指向工件存储库。然而,这需要在您的工件存储库之前有一个反向代理。
在 Jenkins 主机上更新主机文件,如下
<artifact repo ip> plugins.jenkins.io updates.jenkins.io updates.jenkins-ci.org mirrors.jenkins.io
在工件存储库前面设置一个反向代理,用于处理
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: /
如果您想使用 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
此外,如果您的连接受到限制,我建议将您的工件存储库的所有镜像列入白名单,以便它可以正确获取工件
或者更简单的解决方案是将artifactory配置为仅从特定镜像中选择更新。