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
|
import json import os import requests
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()
|