Git — Дженкинс Показывает, Что Задание Не Выполнено, Если Нечего Фиксировать В Gitlab

  • Автор темы Елена1972
  • Обновлено
  • 22, Oct 2024
  • #1

Я использовал одно задание Jenkins, которое извлекает репозиторий из gitlab.

Затем он изменит файлы и отправит их в gitlab (только если какой-либо пользователь добавил новые файлы/изменил содержимое в gitlab). В противном случае он просто выполняет пустой коммит. Когда происходят пустые фиксации и push, задание Дженкинса показывает мне, что задание не выполнено. Только в этом случае я хочу, чтобы Дженкинс показал себя успешным.

[1. Extract simplified configuration] $ /bin/sh -xe 
/tmp/jenkins2112147489595430303.sh
+ chmod +x script.sh
+ ./script.sh
+ git add .
+ git commit -a -m 'Changes pushed by Jenkins'
HEAD detached at ee35229
nothing to commit, working directory clean
Build step 'Execute shell' marked build as failure
Triggering a new build of 2. Erase Answers
Finished: FAILURE

Есть ли способ сделать это?

Елена1972


Рег
28 Sep, 2012

Тем
69

Постов
187

Баллов
562
  • 25, Oct 2024
  • #2

Чтобы добиться успеха, вам нужно избегать ненулевых кодов выхода. Простым решением было бы изменить последнюю строку вашего скрипта на

if( some use case ) {

currentBuild.result = 'SUCCESS'

echo "Job succeeded."

return
}
, but better solutions would parse the output of git-add and only run git-commit when there is something to commit.

 

Milka2006


Рег
15 Apr, 2006

Тем
62

Постов
188

Баллов
508
  • 25, Oct 2024
  • #3

В моем автоматическом задании jenkins, запускаемом ежедневно, если нет изменений, команда git commit возвращает 1. Это пометит сборку как неудачную. Чтобы решить эту проблему, я использую эти две команды на этапе сборки оболочки:

git commit
  • первый в конечном итоге добавит все неподготовленные файлы во все рабочее дерево (эквивалентно
    git diff
    );
  • второй выполнит фиксацию тогда и только тогда, когда есть различия с версией HEAD рабочего каталога. Если
    git add --all
    command has exit code zero then the
    git add -A
    git diff-index --quiet HEAD || git commit -m "Jenkins automatic update commit"
    
    команда выполняется.
 

Alex Moskalenko


Рег
26 Oct, 2006

Тем
82

Постов
207

Баллов
677
  • 25, Oct 2024
  • #4

Я предполагаю, что у вас есть способ узнать, пуст ли коммит или нет.

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

git commit -a -m 'Changes pushed by Jenkins' || true

У вас есть два варианта размещения. Помещение этого внутри этапа приведет к успешному выходу только из этого этапа. Помещение его за пределы стадии (но внутри узла) завершит всю работу как успешную.

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

 

AbeGor


Рег
31 Mar, 2010

Тем
67

Постов
188

Баллов
573
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно