14

我想知道,如何使用 Jenkins 远程访问 API 将插件安装到 Jenkins?我找到了一种使用 jenkins CLI 安装的方法。但我需要知道如何使用 API 来做同样的事情。我尝试使用 jenkins-python 库。但我没有找到任何方法在那里安装插件。

4

6 回答 6

42

将以下 xml 数据(使用您的 plugin-id@version)发送(HTTP POST)到 Jenkins 插件管理器。在 gist 上查看我的jenkins 安装插件脚本

这个 HTTP POST 请求安装jenkins git 插件2.0。

curl -X POST -d '<jenkins><install plugin="git@2.0" /></jenkins>' --header 'Content-Type: text/xml' http://localhost:8080/pluginManager/installNecessaryPlugins

于 2013-12-30T22:39:36.340 回答
3

有些插件很难在文件系统上更新,因为其他插件依赖于它(凭证就是一个例子)。对于此类插件,只能使用 Web 界面对其进行更新。

Jenkins 前端在“管理 Jenkins”->“管理插件”下有一个页面。在“高级”选项卡下是“上传插件”的表单。它允许使用 curl 进行 Web 自动化,您可能需要添加身份验证。

 curl -i -F file=@pluginfilename.hpi http://jenkinshost/jenkins/pluginManager/uploadPlugin 
于 2016-01-18T20:05:20.727 回答
2

除了已经提到的方法(我个人使用了@bbaassssiiee 提供的“ curl uploadPlugin ”),您需要考虑如果您使用pluginManager Jenkins 将尝试动态加载您的插件,但如果您需要重新启动Jenkins 以正确初始化插件(这是我的情况),您应该添加:

 curl -kX POST https://${JENKINS_URL}/safeRestart

如果您将插件直接复制到jenkins/plugin,则必须重新启动才能加载插件。

于 2016-06-28T10:47:25.777 回答
1

正如malenkiy_scot 所建议的,我们可以创建一个工作并使用Jenkins CLI。这是我为自动化安装插件所做的秘密方法。Jenkins 插件可在此处的 Jenkins 镜像中找到:http: //updates.jenkins-ci.org/latest此链接可能未列出任何内容,但如果您知道插件的名称,您可以下载该插件。例如,如果要下载 skype-notifier 插件,可以从http://updates.jenkins-ci.org/latest/skype-notifier.hpi下载,通用 URL 为“ http://updates.jenkins -ci.org/latest/.hpi "

下载该插件后,它应该转到服务器上 Jenkins 主目录中的“插件”目录。对于 linux 机器,它很可能位于“/var/lib/jenkins/plugins”中。简单的例子

wget http://updates.jenkins-ci.org/latest/skype-notifier.hpi
mv skype-notifier.hpi /var/lib/jenkins/plugins

这里有两点需要注意:

  1. 如果插件有任何依赖项,则默认情况下不会安装这些依赖项。如果您知道需要哪些其他插件,则可以以相同的方式安装它们。这里需要一些手动过程。但是,如果需要相同的插件集,则可以只解决一次依赖关系,并且可以编写脚本来下载并将它们移动到 Jenkins 主页。
  2. 下载的插件不能马上使用。需要重新加载 Jenkins。
于 2013-03-19T07:07:00.660 回答
0

经过大量的血汗和泪水,我建议的解决方案是:

  • 使用plugin-installation-manager-tool (需要 java)或install-plugins.sh(仅需要 bash,但已正式弃用,但仍在 09/2021 工作)下载hpi文件(插件和依赖项) 注意:两者也包含在官方 docker 镜像(另见离线安装
  • 然后通过安装所有下载的文件
    curl -i -F file=@plugin.hpi http://${JENKINS_URL}/pluginManager/uploadPlugin
    

为什么?

发布到/pluginManager/installNecessaryPlugins始终安装最新版本(已知错误或功能?)并且似乎只安装请求的插件而没有适当的依赖关系处理。

简单的例子

需要install-plugins.sh及其依赖jenkins-support来自jenkinsci/docker.
您必须调整install-plugins.sh 第 27 行以指向您的jenkins-support文件,例如, . jenkins-support如果您将所有内容放在一个文件夹中并从那里执行它。

pluginFolder=$(mktemp -d)

# Download plugins
JENKINS_UC=https://updates.jenkins.io REF="${pluginFolder}" \
 install-plugins.sh \
 docker-workflow:1.26 docker-plugin:1.2.2
# add more plugins in here, pass a bash array or load from file
# (see Real-life example bellow)

# Install all downloaded plugin files via HTTP
for pluginFile in "${pluginFolder}/plugins"/*; do 
  curl -i -F "file=@${pluginFile}" http://${JENKINS_URL}/pluginManager/uploadPlugin 
done

现实生活中的例子

取自cloudogu/gitops-playground

于 2021-09-01T13:31:07.290 回答
-2

我不认为这是可能的。但是,作为一种解决方法,您可以考虑创建一个通过 Jenkins CLI 安装插件的作业;然后,您可以使用适当的参数通过 API 调用该作业。

于 2012-03-19T15:22:48.690 回答