Bash脚本读取插件文件仅安装首个Jenkins插件的问题及修复
Jenkins插件安装脚本仅安装第一个插件的修复方案
问题原因
jenkins-cli.jar的命令默认会读取标准输入(stdin),而你的while循环正是从标准输入读取插件列表文件的内容。当第一个install-plugin命令执行时,它会抢占整个输入流,导致循环无法读取后续的插件行,最终只安装第一个插件。
修复方法
有两种可靠的解决方式:
方式1:添加-no-interactive参数
给所有jenkins-cli命令加上-no-interactive参数,强制它不读取标准输入:
#!/bin/bash JENKINS_URL=http://localhost:8080 PLUGINS_FILE=$1 while IFS=':' read -r plugin_name plugin_version; do java -jar jenkins-cli.jar -s $JENKINS_URL -auth admin:admin -no-interactive install-plugin "${plugin_name}:${plugin_version}" done < "$PLUGINS_FILE" java -jar jenkins-cli.jar -s $JENKINS_URL -auth admin:admin -no-interactive safe-restart
方式2:重定向输入到/dev/null
将每个jenkins-cli命令的输入重定向到/dev/null,避免它占用循环的输入流:
#!/bin/bash JENKINS_URL=http://localhost:8080 PLUGINS_FILE=$1 while IFS=':' read -r plugin_name plugin_version; do java -jar jenkins-cli.jar -s $JENKINS_URL -auth admin:admin install-plugin "${plugin_name}:${plugin_version}" < /dev/null done < "$PLUGINS_FILE" java -jar jenkins-cli.jar -s $JENKINS_URL -auth admin:admin safe-restart < /dev/null
验证
执行修复后的脚本:
./install-plugins.sh plugins.txt
此时所有列出的插件都会被依次安装,最后Jenkins会执行安全重启。
内容的提问来源于stack exchange,提问作者TheWalkingMalteser
相关产品推荐
相关产品推荐

