我有一个Jenkins构建,它将使用标记创建预发布,然后上传工件。为了补充这一点,我还想创建一些基本的发行说明,所以现在所有的功能分支都是自上一个标记以来创建/合并到master中的。
我找到git log --oneline --decorate
但是我可以从最后一个标签中获取日志吗?所以标记13.4.0
和13.4.9
之间的提交作为示例
我想在那之后,我需要将结果解析成一个数组,然后我可以从中提取我想要的结果。
答案 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)
"