我想通过 Artifactory 更新 Jenkins 插件。
从仓库 Jenkins-update 获取 update-center.json 到本地,并将 URL 从 'http://updates.jenkins-ci.org/' 修改为我自己的 URL 'https://artifacts.xxx update-center.json 中的 .com/artifactory/Jenkins-update/',然后将 update-center.json 放入本地仓库。
#!/bin/sh
curl -L -o /tmp/update-center.json http://localhost:8081/artifactory/Jenkins-update-cache/update-center.json
sed -i 's#http://updates.jenkins-ci.org/#https://artifacts.xxx.com/artifactory/Jenkins-update/#g' /tmp/update-center.json
curl -L -uuser:pass -T /tmp/update-center.json "http://localhost:8081/artifactory/jenkins-update-center/update-center.json"
将默认更新站点从“http://updates.jenkins-ci.org/”更改为“https://artifacts.xxx.com/artifactory/jenkins-update-center/update-center.json” ' 在詹金斯
存在错误 'SHA-512 摘要不匹配:预期=49a22dc23f739a76623d10128b6803f79e0489de3ded0f1d01f3dfba4557136c7f318baaf4749a7713ec4b3f56633f2ac3afc4703e87d423当我单击“立即检查”按钮时,“更新站点‘默认’”中的 ede029d68f84c74d。
我应该怎么做才能让 Jenkins 从 Artifactory 更新插件?
Tkx
update-center.json 的内容更改后,您需要重新生成该文件的“signature”部分。 为此,您需要生成密钥对(更多详细信息请参阅如何创建公共 Jenkins 更新站点的本地镜像?)
您也可以使用以下建议的方法:
可能有更好的方法,在可以访问互联网的系统上安装沙箱 Jenkins。您使用 UI 更新服务器,然后可以彻底测试更新后的 Jenkins。完成后,您只需将 war 和 hpi 文件复制到您的“生产”Jenkins 中。现在你甚至有了一个很好的流程和质量保证。
另一种方法是在 Jenkins 和 Artifactory 服务器之间设置透明的 https 代理 - 在这种情况下 update-center.json 不会更改并且签名验证应该可以正常工作。
致以最诚挚的问候,
德米特罗·戈尔布诺夫
截至2023年1月10日,在artifactory上制作jenkins插件的镜像存在问题。
Artifactory 文档仅描述了如何创建镜像:https://jfrog.com/knowledge-base/how-to-configure-artifactory-as-a-mirror-for-jenkins-plugins/
但这并不是一个完整的解决方案。因为这会导致每个插件都需要手动更新的情况。拥有具有大量依赖项的插件是一项巨大的工作。
需要生成一个文件:update-center.json
有一个内部的 jenkins 工具可以执行此操作:https://github.com/jenkins-infra/update-center2,但文档很差并且包含模糊的语句,例如:
经过一些修改,它也可以轻松用于生成您的公司更新中心。
没有明确的描述,该怎么办。 我尝试按照步骤进行操作,但完全失败了。工具需要一些特殊的环境变量,这些变量也没有记录等等。
因此,根据我的经验,在神器上镜像 jenkins 插件实际上是不可能的。老实说,我想在这里错了。
所以我设法创建了 jenkins 存储库并使其通过神器工作,
步骤: 创建远程存储库:(类型通用)
Repository Key: rmt-jenkins-ci-updates
URL: https://mirrors.jenkins.io/war/
Repository Key: rmt-jenkins-ci-updates-stable
URL: https://mirrors.jenkins.io/war-stable/
Repository Key: rmt-jenkins-ci-updates-stable
URL: https://mirrors.jenkins.io/war-stable/
Repository Key: rmt-jenkins-plugins
URL: https://mirrors.jenkins.io/plugins/
在所有这些中,如果您使用代理,请在“高级”中进行设置: 网络->代理 确保运行“测试”以查看连接是否有效。
现在创建虚拟仓库:
Repository Key: jenkins
向下滚动到存储库并添加我们创建的所有 4 个存储库。
现在您将能够看到虚拟存储库“jenkins”下可供下载的文件列表
(在您下载它们之前,这些文件将是空的 - 尝试在 jenkins 虚拟存储库下的artifactory 中下载文件以查看一切正常,如果您无法下载并收到错误“无法找到资源”,则意味着您是代理使用需要允许重定向并阻止它们 - 您可以在防火墙中看到我们被阻止的内容是 get.jenkins.io 等)
现在您已成功下载文件,请转到 Jenkins ui - 管理 jenkins - 插件 - 高级并将“更新站点”设置为
“https://my-artifactory.com/artifactory/jenkins/update-center.json”
然后提交看看没有错误。如果没问题,您将能够在manage-jenkins-plugins-updates 下看到您可以更新的插件。
如果出现错误:
"SSLHandshakeException: No subject alternative DNS name matching updates.jenkins.io found"
在 jenkins 中安装插件:“skip-certificate-check”
它还不能工作,因为你必须在神器 nginx 中进行重定向, 首先-您需要将此 URL 设置为“updates.jenkins.io”以重定向到您的 artifacory,因为 jenkins 在 update-center.json 中获取插件及其所有下载 url,并且该 url 是updates.jenkins.io
然后你进入artifactory nginx并添加这些重定向:
location ~ /download/plugins/(.*)$ {
proxy_pass http://artifactory:8081/artifactory/jenkins/$1;
}
location ~ /download/war/(.*)$ {
proxy_pass http://artifactory:8081/artifactory/jenkins/$1;
}
Restart nginx
和测试