Запретить заданию Jenkins запускать дополнительные задания с помощью git commit - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь создать конвейер Jenkins, который выполняет следующие шаги на высоком уровне:

  1. Отправка уведомлений о сборке
  2. Запуск тестов lint
  3. ВыполнениеТесты CI
  4. Обновление информации о версии в паре файлов
  5. Использование git для фиксации обновлений файлов, создания тегов и отправки изменений в исходное состояние
  6. Загрузка файлов в проектв другую систему
  7. Отправка уведомлений

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

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

1 Ответ

0 голосов
/ 30 сентября 2019

Вы можете использовать generic-webhook-plugin ,

Например, веб-хиты GitHub в Jenkins используются для запуска сборки всякий раз, когда разработчик передает что-то в ветку, в каждом веб-крюке мыиметь следующую информацию

git repository name
branch which was changed
commit id
commit message
commit author
etc ...

Чтобы избежать зацикливания

  • сохранить идентификатор коммитов Jenkins в файл и добавить файл в git игнорировать
  • считывание идентификатора удаленного коммита с помощью pushуниверсальный триггер webhook
  • сравнение идентификатора локальной файловой фиксации с идентификатором удаленной фиксации
  • Если то же самое, это означает, что коммит от Jenkins, если нет, это значит, что коммит не от Jenkins

Вот фрагмент кода, который может помочь или измениться соответствующим образом, он не создаст вид

#!/bin/bash
webhook_commit_id=$commit
commit_by_jenkins=commit_by_jenkins.txt
if [ ! -f $commit_by_jenkins ]
then
    echo "creating local file name commit_by_jenkins.txt, please add this file to git ignore"
    touch commit_by_jenkins.txt
fi
jenkins_commit=`cat commit_by_jenkins.txt`
if [ "${webhook_commit_id}" == "${jenkins_commit}" ]; then 
    echo "commit by jekins server, ignoring commit"
else
      echo "commiting code from jenkins servver"
      git add -A && git commit -m "commit by jenkins server" && git rev-parse HEAD > commit_by_jenkins.txt
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...