使用Jenkins和Github自动发布Notes

时间:2016-12-09 08:40:09

标签: git jenkins

我有一个Jenkins构建,它将使用标记创建预发布,然后上传工件。为了补充这一点,我还想创建一些基本的发行说明,所以现在所有的功能分支都是自上一个标记以来创建/合并到master中的。

更新

我找到git log --oneline --decorate但是我可以从最后一个标签中获取日志吗?所以标记13.4.013.4.9之间的提交作为示例

我想在那之后,我需要将结果解析成一个数组,然后我可以从中提取我想要的结果。

1 个答案:

答案 0 :(得分:0)

我在周末取得了一些进展并认为我会分享,尽管欢迎任何改进指针,因为我确信这可以做得更好。

首先,我需要从上一个标记中获取所有提交,直到当前版本的master

 // Get Commits
 def commits = sh script: """ git log ${previous_tag}..HEAD --oneline --decorate""", returnStdout: true
 def array = commits.split("\\n");

然后我需要提取所有具有特定标识符的提交(我们做的事情)

// Declare array and get all commits starting with STRING1|string1
ArrayList<String> mycommits = new ArrayList<>(array.length);
 for(int i =0; i < array.length; i++) {
    Pattern pattern = Pattern.compile("^\\w{7}\\s(STRING1-|string1-)");
    Matcher matcher = pattern.matcher(array[i]);
   if(matcher.find()) {
     mycommits.add(array[i]) 
   }
 }

然后,由于提交消息可能被复制或者标识符在特定故事中被多次使用,我创建了一个HashSet,以确保只存储唯一值(删除所有重复)

// Put all unique mycommits matches into a set
 Set<String> mycommits_set = new HashSet<String>(mycommits.size());
 for(int i =0; i < mycommits.size(); i++) {
    Pattern pattern = Pattern.compile("(STRING1-|string1-)\\w+");
    Matcher matcher = pattern.matcher(mycommits[i]);
   if(matcher.find()) {
     String id = matcher.group().toUpperCase();
     mycommits_set.add("[" + id + "](https://jira.dev.organisaiton.co.uk/browse/" + id + ")");
   }
 }

然后最终返回到ArrayList,以便我可以遍历

// Unique results back to List object
 List<String> list = new ArrayList<String>(mycommits_set);
 String listString = "";
 for (String s : list)
 {
   listString += s + "\\n";
 }

这将返回以下字符串(减少为2以保存更多列表)

"[STRING1-2150](https://jira.dev.organisation.co.uk/browse/STRING1-2150)
 [STRING1-2151](https://jira.dev.organisation.co.uk/browse/STRING1-2151)
 "