linux cpu占用率如何看
269
2022-09-06
GitHook+JGit实现最新代码的自动克隆或者项目的自动部署
需求思路开工
设置webhook响应webhook的服务器
需求就是保证后台系统的报表sql是分析师每次push后的最新sql。 通过这种方式也可以实现项目的自动部署,pull最新项目后重启tomcat或者其它服务器就好了。。。
思路
思路一:起初想的是在正式环境中init 一个远程git仓库。每次分析师把sql push到正式环境中。可以使用git的hook功能在push之后做一些操作。测试都成功了,此时发现一个令人伤心的事情就是正式环境中无权限操作。。只能部署项目。唉,只能想别的办法。思路二:在gitlab有一个webhook,相信你看到hook就知道了,钩子,也就是回调函数。通过webhook我们可以在push,merge等操作后可以发送一个 我们需要在服务器上初始化一个git本地仓库,克隆代码到本地仓库,然后对文件进行分析。 所以这里需要另外一个知识:JGit. 通过这个工具我们可以使用java语言操作git,如果想更深入的了解,请自行google哦。在这里我只使用到了clone,checkout和pull。并没有使用add ,commit ,push等操作。
@ResponseBody public void setTitle() { File gitFile = new File("D://temp"); if (cloneRepository(gitFile)) { System.out.println("clone success"); checkFiles(gitFile); } else { System.out.println("clone failure"); } }
clone和checkout操作
首先判断本地仓库是否已经存在 ,若不存在则clone远程仓库。 若已经存在则拉取相应分支上的代码。
; if (new File(gitFile.getAbsolutePath() + "/.git").exists()) { git = Git.open(gitFile); //检测dev分支是否已经存在 若不存在则新建分支 List localBranch = git.branchList().call(); boolean isCreate = true; for (Ref branch : localBranch) { if (branch.getName().endsWith("dev")) { isCreate = false; break; } } git.checkout().setCreateBranch(isCreate).setName("dev").setUpstreamMode(CreateBranchCommand.SetupUpstreamMode.TRACK).call(); git.pull().call(); } else { List
遍历本地仓库
然后就是递归遍历本地仓库了
private void checkFiles(File file) { File files[] = file.listFiles(); if (files != null && files.length > 0) { for (File file1 : files) { String fileName = file1.getName(); if (file1.isDirectory() && fileName.endsWith(".git")) continue; System.out.println(fileName); System.out.println("内容是:\n" + readFile(file1)); System.out.println("------------------------------------"); checkFiles(file1); } } }
IO流读取内容
private String readFile(File file) { BufferedReader br = null; StringBuilder sb = new StringBuilder(); String line = null; try { br = new BufferedReader(new FileReader(file)); while ((line = br.readLine()) != null) { sb.append(line).append("\n"); } return sb.toString(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } return ""; }
运行结果
图片太小的话可以新标签打开图片。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~