最近因为服务器移动,在Jenkins中配置的一些地址之类的,都要改变,如图,我因为使用插件Sidebar Links增加一个链接地址,现在地址变了,所以在Jenkins中配置就需要改动link url的地址,如图:

image

要改变成地址为:192.168.11.11,因为Jenkins的文件配置都是xml文件,我读取对应的xml文件,把文件内容进行更改在重写xml文件,xml文件如下。因为每个项目的url都需要更改,所以工作量还是很大的,所以写了个程序,去找到Jenkins下面所有的job,然后去更改Jenkins中的config.xml配置文件,就ok了

image

 代码写的有些烂,

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

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

package other;

 

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.net.URL;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

 

import org.dom4j.Attribute;

import org.dom4j.Document;

import org.dom4j.DocumentException;

import org.dom4j.Element;

import org.dom4j.io.SAXReader;

import org.dom4j.io.XMLWriter;

 

import bsh.This;

import until.publicmethod;

 

public class xmlDom {

    static String path;//获取的路径

    static Document document;

    static String  jointURl;

       

    /**

     *

    * @测试点: 遍历指定目录,获取文件路径

      @param @param filePath

      @param @return  

    * @备注: List<String> 

    * @author zhangjun

    * @date 2017年9月18日

      @修改说明

     */

    public static List<String> geturl(String filePath) {

        List<String> list = new ArrayList<String>();

        File root = new File(filePath);

        File[] files = root.listFiles();

        for (File file : files) {

            if (file.isDirectory()) {

                list.add(file.getAbsolutePath());

                //System.out.println("显示" + filePath + "下所有子目录及其文件" + file.getAbsolutePath());

            }

        }

        return list;

    }

 

     

     

/**

 *

* @测试点: 读取Jenkins的xml文件,修改指定的节点

* @验证点: TODO(这里用一句话描述这个方法的作用)

*   @param @param url   需要传入的修改的xml文件路径

* @备注: void 

* @author zhangjun

* @date 2017年9月18日

  @修改说明

 */

    public static void readerXml(String url) {

        SAXReader reader = new SAXReader();

        System.out.println("获取的url:"+jointURl);

        try {

            document = reader.read(new File(url));

            // 通过reader对象的read方法加载books.xml文件,获取docuemnt对象。

            Element bookStore = document.getRootElement();

            // 通过element对象的elementIterator方法获取迭代器

            Iterator it = bookStore.elementIterator();

            // 遍历迭代器,获取根节点中的信息(书籍)

            while (it.hasNext()) {

                // System.out.println("=====开始遍历=====");

                Element jenkinsjob = (Element) it.next();

                // 获取book的属性名以及 属性值

 

                // 解析子节点的信息,这个下面是否可以做优化,目前没有好的方案

                Iterator  jobs= jenkinsjob.elementIterator();

                while (jobs.hasNext()) {

                    Element Child = (Element) jobs.next();             

                    /*System.out.println("节点名:" + Child.getName() + "--节点值:" + Child.getStringValue());*/

                    if (Child.getName().equals("hudson.plugins.sidebar__link.ProjectLinks")) {

                         

                        Iterator node = Child.elementIterator();

                        while (node.hasNext()) {

                            Element Child2 = (Element) node.next();

                            System.out.println("节点名2:" + Child2.getName() + "--节点值2:" + Child2.getStringValue());

 

                            Iterator node2 = Child2.elementIterator();

                            while (node2.hasNext()) {

                                Element Child3= (Element) node2.next();

                                System.out.println(

                                        "节点名3:" + Child3.getName() + "--节点值3:" + Child3.getStringValue());

 

                                Iterator node3 = Child3.elementIterator();

                                while (node3.hasNext()) {

                                    Element Child4 = (Element) node3.next();

                                    System.out.println(

                                            "节点名4:" + Child4.getName() + "--节点值4:" + Child4.getStringValue());

                                    if (Child4.getName().equals("url")) {

                                        Child4.setText("http://192.168.11.11:8080/jenkins/job/new_rosewholesale_conventionpay/");

                                    }

                                    break;

                                }

                            }

 

                        }

                    }

 

                }

            }

 

        catch (DocumentException e) {

            e.printStackTrace();

            System.out.println("读取文件错误");

        }

        /**

         * 写入文件,重新生成xml文件

         */

        try {

            XMLWriter writer = new XMLWriter(new FileWriter(url));

            writer.write(document);

            writer.close();

        catch (IOException e) {

            e.printStackTrace();

            System.out.println("写入文件错误");

        }

    }

     

    //DOM4J 方式解析XML

      

    public static void main(String[] args) {

         List<String> filespath=geturl("D:\\test\\test2\\");

         for(int i=0;i<filespath.size();i++){

            String  filepath=filespath.get(i);

            readerXml(filepath+"\\config.xml");

         }

       

    }

 

}

  

image

这样就可以更新xml文件了,不用手动去改动,但是这个时候公司已经做了域名映射,所以还是没有派上用场,可以先记录下吧

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐