我正在尝试创建一个用于设置Jenkins的bash脚本。有没有办法从Jenkins终端更新插件列表?
首次设置时,列表中没有可用的插件
即:
java -jar jenkins-cli.jar -s `http://localhost:8080` install-plugin dry
不起作用
答案 0 :(得分:34)
一种简单但有效的方法是首先列出所有已安装的插件,查找更新并安装它们。
java -jar /root/jenkins-cli.jar -s http://127.0.0.1:8080/ list-plugins
每个有可用更新的插件,最后都有括号中的新版本。所以你可以为那些人寻找:
java -jar /root/jenkins-cli.jar -s http://127.0.0.1:8080/ list-plugins | grep -e ')$' | awk '{ print $1 }'
如果您使用插件名称调用install-plugin,它会自动升级到最新版本。
最后你必须重新启动jenkins。
将所有内容放在一起(可以放在shell脚本中):
UPDATE_LIST=$( java -jar /root/jenkins-cli.jar -s http://127.0.0.1:8080/ list-plugins | grep -e ')$' | awk '{ print $1 }' );
if [ ! -z "${UPDATE_LIST}" ]; then
echo Updating Jenkins Plugins: ${UPDATE_LIST};
java -jar /root/jenkins-cli.jar -s http://127.0.0.1:8080/ install-plugin ${UPDATE_LIST};
java -jar /root/jenkins-cli.jar -s http://127.0.0.1:8080/ safe-restart;
fi
答案 1 :(得分:31)
您实际上可以从计算机终端(而不是Jenkins终端)安装插件。
http://updates.jenkins-ci.org/download/plugins
)$JENKINS_HOME/plugins directory
http://yourservername:8080/jenkins/reload
)这将启用Jenkins中的插件并假设Jenkins已启动。
cd $JENKINS_HOME/plugins
curl -O http://updates.jenkins-ci.org/download/plugins/cobertura.hpi
curl http://yourservername:8080/reload
答案 2 :(得分:7)
以下是使用Ansible部署Jenkins CI插件的方法,当然这是从终端使用的。此代码是roles/jenkins_ci/tasks/main.yaml
:
- name: Plugins
with_items: # PLUGIN NAME
- name: checkstyle # Checkstyle
- name: dashboard-view # Dashboard View
- name: dependency-check-jenkins-plugin # OWASP Dependency Check
- name: depgraph-view # Dependency Graph View
- name: deploy # Deploy
- name: emotional-jenkins-plugin # Emotional Jenkins
- name: monitoring # Monitoring
- name: publish-over-ssh # Publish Over SSH
- name: shelve-project-plugin # Shelve Project
- name: token-macro # Token Macro
- name: zapper # OWASP Zed Attack Proxy (ZAP)
sudo: yes
get_url: dest="{{ jenkins_home }}/plugins/{{ item.name | mandatory }}.jpi"
url="https://updates.jenkins-ci.org/latest/{{ item.name }}.hpi"
owner=jenkins group=jenkins mode=0644
notify: Restart Jenkins
这是一个更完整的示例的一部分,您可以在以下位置找到: https://github.com/sakaal/service_platform_ansible/blob/master/roles/jenkins_ci/tasks/main.yaml
随意根据您的需求进行调整。
答案 3 :(得分:3)
您可以使用此命令行更新插件列表
curl -s -L http://updates.jenkins-ci.org/update-center.json | sed '1d;$d' | curl -s -X POST -H 'Accept: application/json' -d @- http://localhost:8080/updateCenter/byId/default/postBack
答案 4 :(得分:1)
仅供参考 - 除非您使用短名称,否则某些插件(特别是mercurial)无法从命令行正确安装。我认为这与jenkins包信息数据中的触发器有关。您可以通过在支持JavaScript的浏览器中访问127.0.0.1:8080/pluginManager/checkUpdates
来模拟jenkins自己的软件包更新。
或者,如果你感觉自虐,你可以运行这个python代码:
import urllib2,requests
UPDATES_URL = 'https://updates.jenkins-ci.org/update-center.json?id=default&version=1.509.4'
PREFIX = 'http://127.0.0.1:8080'
def update_plugins():
"look at the source for /pluginManager/checkUpdates and downloadManager in /static/<whatever>/scripts/hudson-behavior.js"
raw = urllib2.urlopen(self.UPDATES_URL).read()
jsontext = raw.split('\n')[1] # ugh, JSONP
json.loads(jsontext) # i.e. error if not parseable
print 'received updates json'
# post
postback = PREFIX+'/updateCenter/byId/default/postBack'
reply = requests.post(postback,data=jsontext)
if not reply.ok:
raise RuntimeError(("updates upload not ok",reply.text))
print 'applied updates json'
一旦你运行了这个,你应该可以运行jenkins-cli -s http://127.0.0.1:8080 install-plugin mercurial -deploy
。
答案 5 :(得分:0)
对于当前的Jenkins版本,只能通过SSH使用CLI。如docs中所述,必须在管理界面的“全局安全设置”页面中启用此功能。此外,应该触发更新的用户必须添加其公共ssh密钥。
使用接受的答案中经过修改的shell脚本,可以如下自动执行此操作,您只需替换HOSTNAME和USERNAME:
#!/bin/bash
jenkins_host=HOSTNAME #e.g. jenkins.example.com
jenkins_user=USERNAME
jenkins_port=$(curl -s --head https://$jenkins_host/login | grep -oP "^X-SSH-Endpoint: $jenkins_host:\K[0-9]{4,5}")
function jenkins_cli {
ssh -o StrictHostKeyChecking=no -l "$jenkins_user" -p $jenkins_port "$jenkins_host" "$@"
}
UPDATE_LIST=$( jenkins_cli list-plugins | grep -e ')$' | awk '{ print $1 }' );
if [ ! -z "${UPDATE_LIST}" ]; then
echo Updating Jenkins Plugins: ${UPDATE_LIST};
jenkins_cli install-plugin ${UPDATE_LIST};
jenkins_cli safe-restart;
else
echo "No updates available"
fi
这会抓住Jenkins CLI的已使用SSH端口,然后通过SSH进行连接而无需检查主机密钥,因为每次Jenkins重新启动时它都会更改。
然后升级所有具有更新的插件,然后重新启动Jenkins。