Jenkins导出和导入配置文件

方式一、Jenkins-cli

一、下载Jenkins-cli.jar

1、jenkins-cli.jar 位置

首页-系统管理-Jenkins CLI

2、点击下载jenkins-cli.jar

下载jenkins-cli.jar!
或者

1
wget http://<ipaddress>:8080/jenkins/jnlpJars/jenkins-cli.jar

二、执行命令测试

1
java -jar jenkins-cli.jar -s http://<ipaddress>:8080/ -webSocket help

命令测试
成功。

三、导出配置

1
java -jar jenkins-cli.jar -s http://<IP>:8080 -webSocket get-job <jobName> > <fileName>.xml

四、导入配置

1
java -jar jenkins-cli.jar -s http://<IP>:8080 -webSocket create-job <jobName> < <fileName>.xml

五、报错

报错1

jenkins 使用websocket 连接时,提示

io.jenkins.cli.shaded.jakarta.websocket.DeploymentException: Handshake error

参考资料

给 nginx 配置加了转发 websocket 的相关头信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
/**
map指令的作用:
该作用主要是根据客户端请求中$http_upgrade 的值,来构造改变$connection_upgrade的值,即根据变量$http_upgrade的值创建新的变量$connection_upgrade,
创建的规则就是{}里面的东西。其中的规则没有做匹配,因此使用默认的,即 $connection_upgrade 的值会一直是 upgrade。然后如果 $http_upgrade为空字符串的话,
那值会是 close。
*/
server {
......
location / {
proxy_read_timeout 300s;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}

根据自己的Nginx 增加配置,关键是这三行

1
2
3
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
报错2
ERROR: You must authenticate to access this Jenkins.

如果安全配置是以下情况,可能会出现有些命令没有权限去执行。
修改权限

这个东西千万不要乱改,不切回去安全有问题,切回去,其他用户的权限会被清空。(所以谨慎操作)

参考资料

方式二、Jenkins API(推荐)

一、接口

浏览器可以直接访问(需要先登入)

获取所有项目
https://Jenkins地址/api/json

获取项目配置
https://Jenkins地址/job/项目名/config.xml

二、Python脚本获取

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# -*- coding: utf-8 -*-

import json
import os
import requests



# Jenkins 地址

Jenkins_url = "https://xxxx"
username = "xxx"
userpassword = "xxxx"

def get_all_project_info():
url = Jenkins_url + "/api/json"
print(url)
r = requests.get(url, auth=(username, userpassword))
job_infos = r.json()['jobs']
for pro in job_infos:
print(pro['name'],pro['url'])
get_job_info(pro['name'], pro['url'])

def get_job_info(job_name,job_url):
url = job_url + "config.xml"
conf_dir = "config"
if not os.path.exists(conf_dir):
os.mkdir(conf_dir)
job_name = conf_dir + "/" + job_name + ".xml"
r = requests.get(url, auth==(username, userpassword))
with open(job_name,'w',encoding='utf-8') as f:
f.write(r.text)


def main():
""" Jenkin API
1、获取所有项目信息
2、获取每个项目的信息
"""
# 获取所有项目信息
get_all_project_info()
pass



if __name__ == "__main__":
print("application begin")
main()