![[Pasted image 20220804163833.png]]
对应的脚本文件 ↑
![[Pasted image 20220804141327.png]]
新建飞书群,再添加机器人之后:
![[Pasted image 20220804141525.png]]
复制一下webhook地址;
其中,运行的python环境,需要用到介个库:urllib3
安装方式,参考:
![[关于ModuleNotFoundError No module named 'urllib3'解决]]
![[Pasted image 20220804141743.png]]
其他需要用到的库;
![[Pasted image 20220804142307.png]]
获得当前脚本,所在的绝对路径,是一个字符数组;
![[Pasted image 20220804142349.png]]
![[Pasted image 20220805113610.png]]
这是跳转的接口,获取字符数组的第0个数据即可;
![[Pasted image 20220804142503.png]]
这是前面复制的webhook链接;
通知说明,使用json的结构填充即可;
![[Pasted image 20220804142600.png]]
![[Pasted image 20220804142615.png]]
这就是发送的代码了,把前面的json文本结构,发送到对应的飞书机器人,所在群聊;
补充说明,在json结构里,这是@对应的用户id;
![[Pasted image 20220804142827.png]]
具体获取用户id的方法,参考这个即可:
![[获取飞书的user_id]]
![[Pasted image 20220804142958.png]]
这是发送后的结果;
![[Pasted image 20220804143048.png]]
当然,也是可以有传参的;
![[Pasted image 20220804145021.png]]
其中,sys.argv是通过指令,运行python脚本的传参,也是从0开始的,不过第0个,一般是脚本名称本身;
![[Pasted image 20220804145429.png]]
这是对应的传参,当然这个只是Jenkins的写法;
![[Pasted image 20220804145720.png]]
在cmd或者命令行的写法,这样即可;
![[Pasted image 20220804145752.png]]
然后,就是对应的svn相关命令行了,其中,这里的 > 指的是,生成到某个位置的文件,然后 . 就是当前位置,这里的语法,就是把其中的一些svn指令,执行之后的日志,打印保存到,对应的文本;
![[Pasted image 20220804150731.png]]
为了不产生,多余的文件,后面筛选完问题之后,会把对应的txt文件删除;
![[Pasted image 20220804151014.png]]
这里有设置一个字符字典,匹配对应的方法体;
![[Pasted image 20220804151143.png]]
![[Pasted image 20220804151219.png]]
![[Pasted image 20220804151449.png]]
![[Pasted image 20220804151711.png]]
这是调用字符字典函数的方法;
![[Pasted image 20220804152030.png]]
现在暂时不用其他两个,注释就好;
![[Pasted image 20220804152246.png]]
目前暂时只用到,双向发送,其中的步骤,是:svn还原→svn更新→git拉取;
![[Pasted image 20220804153811.png]]
然后,是把当前svn的状态,也保存到对应的文件夹;
![[Pasted image 20220804153658.png]]
保存之后,readLines() 接口,读取配置文件,每一行文本; 这里的strip()接口,是去掉多余的头尾空格等符号; 这里的逻辑,是记录svn删除的文件,把它合并到一个字符串里;
![[origin_img_v2_16859c5e-6c30-4417-a9d3-b5ebea27031g.jpg]]
strip()的相关说明 ↑
![[Pasted image 20220804154402.png]]
然后,再创建一个队列,在遍历log的时候,把名字放到队列里面; 这个队列,是用来处理特殊情况的;
svn重命名一个文件,逻辑上,属于是,删除一个文件,然后再新增一个文件;
![[Pasted image 20220804160334.png]]
是专门写了一个,ReName()的方法,来处理这种情况的; 其中,是有一个传参,这里,如果是文本类的传参,要加一个f的前缀;
![[Pasted image 20220804160851.png]]
如果在文本行里,找到"rename"字段,逻辑就进来,然后再判断一下; 这里需要注意的是,是需要添加strip()去掉首尾空格相关的;
![[Pasted image 20220804162557.png]]
如果条件满足,对应的布尔就会设置为true,也会调用一下,Rename()方法,通知会发给对应的飞书机器人;
![[Pasted image 20220804162708.png]]
后面的逻辑,如果isRename为True,就直接return不走下去了,也就不会跑到提交的逻辑;
![[Pasted image 20220804163554.png]]
这里的逻辑是,判断的是,如果git拉取,已经是最新版本,也是直接break就好;
![[Pasted image 20220804164337.png]]
![[Pasted image 20220804165414.png]]
需要注意的是,这里有定义一个布尔,是用来判断,是否为正常状态的,如果非正常状态,后面会直接return不跑下去;
![[Pasted image 20220804165604.png]]
前面gitNormal如果为false,就会调用这个方法,是用来发送通知,修改相同文件的;
![[Pasted image 20220804165923.png]]
然后,就是打开svn状态的文件了,也是读取每一行了;
![[Pasted image 20220805112745.png]]
这是配合白名单列表进行处理,如果文件名是属于后面生成的配置文件,是不进行版本管理操作的;
![[Pasted image 20220805113003.png]]
如果是在git里删除的,这时在svn的版本管理的表现,会是!前缀,通过svn相关指令,将这个文件添加到svn删除的版本管理即可;
![[Pasted image 20220805113116.png]]
如果是在git新增,也就是svn是没有加入到版本管理的,也是调用相关的svn指令,完成新增即可,不过这里有一个判断;
![[Pasted image 20220805113224.png]]
其中调用的函数,指的是,这个文件在svn已经删除的了,但是在git有修改,这时也会是,对于svn而言,是无版本控制的;
![[Pasted image 20220805113439.png]]
一旦出现这个情况,也是直接return就好;
![[Pasted image 20220805113501.png]]
![[Pasted image 20220805113507.png]]
删除多余的配置文件;
![[Pasted image 20220805113521.png]]
然后,提交svn和git即可;