Jenkins + Git/Gerrit + Инкрементальное сканирование Klocwork

Итак, у нас есть сервер Jenkins, мы используем gerrit для проверки кода нашей ветки разработки, у нас установлен плагин сообщества Klocwork.

Наш Jenkins порождает сборки, которые получают +1 голос за проверку при отправке патчей Gerrit.

В настоящее время мы сканируем Klocwork только каждые несколько часов в нашей объединенной ветке Develop, и я хотел бы вместо этого выполнять инкрементное / дифференциальное сканирование при каждой отправке набора исправлений, чтобы предотвратить появление плохого кода в первую очередь.

Поэтому я настраиваю плагин Klocwork в нашей конфигурации сборки Jenkins, но когда я добавляю шаг сборки с инкрементным сканированием, поскольку мы используем Git, мне требуется ввести SHA предыдущей фиксации. Я пробовал все, но безуспешно.

Я пробовал $GIT_PREVIOUS_SUCCESSFUL_COMMIT, но это не сработало и в любом случае показалось нам неправильным, потому что предыдущая фиксация Jenkins могла быть основана на совершенно другой ветке (родительской), поэтому разница в том, что изменилось, не имела бы смысла.

Затем у нас возникла идея, что предыдущий коммит, с которым он должен сравниваться, является родительским SHA, а не обязательно последней сборкой Jenkins, которая может быть или не быть в той же ветке.
Поэтому я добавил шаг сборки пакетного файла Windows перед нашим сборка, которая получает родительский SHA1 с помощью журнала git, передает его в файл, а затем использует SET для установки переменной env, такой как PARENT_COMMIT, с этим SHA1, который я затем попытался использовать %PARENT_COMMIT% в области «Previous Commit SHA» Klocwork инкрементный и сборка завершается неудачно, потому что не может найти var.

Я чувствую, что это обычное дело, поэтому решение должно быть до глупости простым, и мы делаем его намного сложнее, чем нужно, но я не могу найти никакой документации, которая говорит мне, что, черт возьми, поставить. в этой коробке.

Пожалуйста помоги :)

Спасибо!


person user1024792    schedule 11.10.2018    source источник


Ответы (1)


Вы используете плагин Jenkins gerrit-trigger для запуска сборок, верно? Таким образом, вы можете попробовать использовать $GERRIT_PATCHSET_REVISION^, который является первым родителем SHA1, определяемым переменной окружения GERRIT_PATCHSET_REVISION.

person Marcelo Ávila de Oliveira    schedule 11.10.2018
comment
Спасибо, это было близко, но направило меня в правильном направлении. Мне пришлось использовать $GERRIT_PATCHSET_REVISION^^, потому что наш Jenkins находится на компьютере с Windows, и приглашение cmd должно избегать ^. - person user1024792; 12.10.2018
comment
Большой! Я не знал, что мы используем ^^ для выхода из ^. - person Marcelo Ávila de Oliveira; 13.10.2018