如何在jenkins中安装插件,在jenkins远程访问API的帮助下?

gj3fmq9x  于 2023-10-17  发布在  Jenkins
关注(0)|答案(7)|浏览(157)

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

6pp0gazn

6pp0gazn1#

发送(HTTP POST)以下xml数据(与您的插件ID @version)到Jenkins插件管理器。看看我的jenkins install plugin script的主旨。
此HTTP POST请求安装jenkins git plugin 2.0。
curl -X POST -d '<jenkins><install plugin=" [[email protected]](https://stackoverflow.com/cdn-cgi/l/email-protection) " /></jenkins>' --header 'Content-Type: text/xml' http://localhost:8080/pluginManager/installNecessaryPlugins

qlfbtfca

qlfbtfca2#

一些插件很难在文件系统上更新,因为其他插件依赖于它(凭证就是一个例子)。对于此类插件,只能使用Web界面进行更新。
Jenkins frontend在'Manage Jenkins' -> 'Manage Plugins'下有一个页面。在“高级”选项卡下是一个“上传插件”的表单。它允许使用curl进行Web自动化,您可能需要添加身份验证。

curl -i -F [email protected] http://jenkinshost/jenkins/pluginManager/uploadPlugin
js81xvg6

js81xvg63#

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

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

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

fsi0uk1n

fsi0uk1n4#

正如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 home中的“plugins”目录。对于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主页。
1.下载的插件不能立即使用。需要重新加载Jenkins。

atmip9wb

atmip9wb5#

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

注意:两者都包含在官方Docker镜像中(另见Offline Installations

  • 然后通过
curl -i -F fi[email protected] http://${JENKINS_URL}/pluginManager/uploadPlugin

安装所有下载的文件

为什么?
POST到/pluginManager/installNecessaryPlugins总是安装最新版本(known bug or feature?),似乎只安装请求的插件,而没有适当的依赖处理。

简单示例

需要install-plugins.sh及其依赖jenkinsci/dockerjenkins-support
你必须调整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

svdrlsy4

svdrlsy46#

更新@bbaassssiiee答案

curl -vu user:token -F "filename=plugin-name" -F "pluginUrl=https://updates.jenkins.io/download/plugins/plugin-name/plugin-version/plugin-name.hpi" http://jenkins-url/manage/pluginManager/uploadPlugin

Jenkins版本:简体中文(zh_cn)

h22fl7wq

h22fl7wq7#

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

相关问题