如何使用命令行安装Jenkins插件?

29

有没有办法通过命令行安装Jenkins插件?

我在谷歌上搜索了一下,找到了一个相应的命令:

java -jar /var/lib/jenkins/jenkins.war -s http://127.0.0.1:8080/ install-plugin ${Plugin_Name}

但是它没有起作用。


1
虽然回答晚了三年,但我仍然认为“不起作用”对于解决问题没有任何帮助。请提供带有输入的错误信息。这可能会帮助任何寻求帮助者知道输入参数和错误响应是否符合他/她的要求。 - ashutosh
7个回答

45
根据Jenkins 命令行界面文档,您需要使用客户端JAR文件(而不是您正在使用的服务器WAR文件),您可以直接从Jenkins获取,例如通过http://localhost:8080/cli上的链接。

然后,您可以使用此JAR运行命令:

java -jar jenkins-cli.jar -s http://127.0.0.1:8080/ install-plugin <name>

这将下载安装您想要的插件以及其所有依赖项。

7
如果你从war文件运行了Jenkins,那么jenkins-cli.jar很可能已经被解压并缓存到这里:/var/cache/jenkins/war/WEB-INF/jenkins-cli.jar。 - JamesP
我没有在那里找到它,但是它在/var/jenkins_home/war/WEB-INF/jenkins-cli.jar中。 - David Moles
7
谢谢您。如果有人在运行命令时遇到此错误:ERROR: anonymous is missing the Overall/Read permission,那么您需要提供 -auth 命令开关,格式如下:java -jar jenkins-cli.jar -s http://localhost:8080 -auth <username>:<password> install-plugin <plugin-1> <plugin-2> ... ,请确保 -auth <username>:<password> 部分在 install-plugin 参数之前。换句话说,参数的顺序很重要。当然,您使用的 Jenkins 用户必须具有足够的权限。 - racl101
我正在EC2实例中使用引导脚本来使用Jenkins CLI。一旦我完成安装Jenkins,我运行“sudo wget http://127.0.0.1:8080/jenkins/jnlpJars/jenkins-cli.jar”来获取CLI,但是在特定时间内我收到503服务不可用的错误。我无法使用循环等待服务可用。在EC2引导脚本中有没有更好的方法来解决这个问题? - Babar Baig

7
import jenkins.model.* 
import java.util.logging.Logger

def logger = Logger.getLogger("") 
def installed = false 
def initialized = false

def pluginParameter="gitlab-plugin hipchat swarm" 
def plugins =pluginParameter.split() 
logger.info("" + plugins) 
def instance =Jenkins.getInstance() 
def pm = instance.getPluginManager() 
def uc =instance.getUpdateCenter() 
uc.updateAllSites()

plugins.each {   logger.info("Checking " + it)   if
(!pm.getPlugin(it)) {
    logger.info("Looking UpdateCenter for " + it)
    if (!initialized) {
      uc.updateAllSites()
      initialized = true
    }
    def plugin = uc.getPlugin(it)
    if (plugin) {
      logger.info("Installing " + it)
        plugin.deploy()
      installed = true
    }   } }

if (installed) 
   {  
      logger.info("Plugins installed, initializing a   restart!")   
       instance.save()  
       instance.doSafeRestart()
 }

2
你为什么要多次调用 uc.updateAllSites()?这是有意为之吗? - giorgian
如果插件未成功安装,您如何重试? - SSF
好的,我收回先前的话。它似乎是在重试。但似乎它陷入了无限重新启动的循环中。你有什么想法@giorgian? - SSF
我应该补充说明,我将此放入“init.groovy.d”目录中,以便在启动期间进行安装。如何使用上述方法安装插件并避免进入此循环? - SSF
循环出现的原因是plugin.deploy()实际上返回了Future。因此,Jenkins在安装完成之前重新启动。下一次启动后会发生同样的事情。因此,您需要等待插件安装完成。例如,应该使用plugin.deploy().get()而不是plugin.deploy()。 - Ilya Sazonov

6
自2019年9月份开始,你也可以使用插件安装管理工具。它需要一个列出了插件的yaml文件,并将插件下载到你选择的文件夹中。无需运行Jenkins实例。你可以在yaml文件中指定插件版本,但要注意JENKINS-60205问题。

获取插件管理器:

version=1.0.1
curl \
    -L \
    -X GET "https://github.com/jenkinsci/plugin-installation-manager-tool/releases/download/plugin-management-parent-pom-$version/jenkins-plugin-manager-$version.jar" \
    -o jenkins-plugin-manager-$version.jar

下载插件:

java -jar jenkins-plugin-manager-$version.jar \
    --plugin-download-directory pluginsFolder \
    --plugin-file plugins.yml \
    --war jenkins.war

插件在pluginsFolder文件夹中。

2

您需要jenkins-cli.jar文件。可以从${JENKINSURL}/jnlpJars/jenkins-cli.jar下载。

wget http://localhost:8080/jnlpJars/jenkins-cli.jar

安装插件:
java -jar jenkins-cli.jar -auth ${USER}:${PASSWORD} -s ${JENKINSURL} install-plugin ${PLUGIN_NAME}

如果您不提供认证信息,将会收到以下错误提示:

错误: 匿名用户缺少Overall/Read权限


好的,这很有道理。它非常接近被接受的答案,对我很有效。 - Arun Ramachandran

2

我的指令:

jenkins-plugin-cli --plugins "snyk-security-scanner:2.12.1 file-operations:1.11 branch-api:2.5.6 pipeline-build-step:2.13 workflow-support:3.8 aws-credentials:1.28 subversion:2.13.1 github-branch-source:2.7.1 publish-over-ftp:1.15 cloudbees-folder:6.740.ve4f4ffa_dea_54"

还有我在 Dockerfile 中使用的那个

FROM jenkins/jenkins:lts

USER root

# Install custom plugins
RUN jenkins-plugin-cli --plugins "snyk-security-scanner:2.12.1 file-operations:1.11 branch-api:2.5.6 pipeline-build-step:2.13 workflow-support:3.8 aws-credentials:1.28 subversion:2.13.1 github-branch-source:2.7.1 publish-over-ftp:1.15 cloudbees-folder:6.740.ve4f4ffa_dea_54"

# Set environment variables
# ENV <ENV_VARIABLE_1> <VALUE>
# ENV <ENV_VARIABLE_2> <VALUE>

USER jenkins

0

0
这是我的解决方案!
version: '3'
services:
  jenkins:
    image: jenkins/jenkins:latest
    restart: always
    ports:
      - "8080:8080"
      - "50000:50000"
    environment:
      JAVA_OPTS: "-Djenkins.install.runSetupWizard=false"
    volumes:
      - ${PWD}/plugins.txt:/usr/share/jenkins/ref/plugins.txt
    command: >
        bash -c "jenkins-plugin-cli -f /usr/share/jenkins/ref/plugins.txt
        && ./usr/local/bin/jenkins.sh"

插件.txt的内容:

ant:latest
antisamy-markup-formatter:latest
build-timeout:latest
cloudbees-folder:latest
configuration-as-code:latest
credentials-binding:latest
email-ext:latest
git:latest
github-branch-source:latest
gradle:latest
ldap:latest
mailer:latest
matrix-auth:latest
pam-auth:latest
pipeline-github-lib:latest
pipeline-stage-view:latest
ssh-slaves:latest
timestamper:latest
workflow-aggregator:latest
ws-cleanup:latest
job-dsl:latest
blueocean:latest
authorize-project:latest

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接