Как извлечь данный массив строк с номерами из строки в groovy - PullRequest
1 голос
/ 10 января 2020

Я пытаюсь проверить, содержит ли commit-msg из git конкретный номер заявки с ключом проекта Jira, используя groovy в конвейере Jenkins

def string_array = ['CO', 'DEVOPSDESK', 'SEC', 'SRE', 'SRE00IN', 'SRE00EU', 'SRE00US', 'REL']
def string_msg = 'CO-10389, CO-10302 new commit'

Чтобы извлечь числа, которые я использую ниже logi c.

findAll( /\d+/ )*.toInteger()

Не уверен, как извлечь точный номер билета с ключом проекта. Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 10 января 2020

Вы можете использовать оператор поиска Groovy - =~ в сочетании с методом findAll() для извлечения всех соответствующих элементов. Для этого вы можете создать шаблон, соответствующий CO-\d+ ИЛИ DEOPSDESK-\d+ ИЛИ ... и так далее. Вы можете сохранить идентификаторы проекта в списке, а затем динамически создавать шаблон регулярных выражений.

Рассмотрим следующий пример:

def projectKeys = ['CO', 'DEVOPSDESK', 'SEC', 'SRE', 'SRE00IN', 'SRE00EU', 'SRE00US', 'REL']
def commitMessage = 'CO-10389, CO-10302 new commit'

// Generate a pattern "CO-\d+|DEVOPSDEKS-\d+|SEC-\d+|...
def pattern = projectKeys.collect { /${it}-\d+/ }.join("|")

// Uses =~ (find) operator and extracts matching elements
def jiraIds = (commitMessage =~ pattern).findAll()

assert jiraIds == ["CO-10389","CO-10302"]

// Another example
assert ("SEC-1,REL-2001 some text here" =~ pattern).findAll() == ["SEC-1","REL-2001"]
0 голосов
/ 10 января 2020

Регулярное выражение может быть собрано немного проще:

def projectKeys = ['CO', 'DEVOPSDESK', 'SEC', 'SRE', 'SRE00IN', 'SRE00EU', 'SRE00US', 'REL'] 
def commitMessage = 'CO-10389, REL-10302 new commit'

String regex = /(${projectKeys.join('|')})-\d+/

assert ['CO-10389', 'REL-10302'] == (commitMessage =~ regex).findAll()*.first()

У вас также может быть другой вариант с более точным контролем над соответствием:

def res = []
commitMessage.eachMatch( regex ){ res << it[ 0 ] }
assert ['CO-10389', 'REL-10302'] == res
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...