Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Как правильно настроить compile в Jenkins с тестами?

jenkins
maven
Теги: #<Tag:0x00007f7b69fe04c0> #<Tag:0x00007f7b69fe0268>

(Bohdan Korinnyi) #1

Привет, начал осваивать Jenkins для запуска своих проектов на сервере. Возник вопрос, как настроить Jenkins так что бы тесты запускались через определенное время?


(Василий Чернов) #2

Привет, не до конца понятно, запускать вообще с переодичностью? В любом случае вам необходимо настроить buildtrigger, н-р так


Do different tests instead of repeating the same tests


(Bohdan Korinnyi) #3

Мне надо чтобы тесты запускались каждый второй раз когда я делаю compile(сборку проекта). Например я запустил первый раз job у меня сбилдился проект но без выполнения тестов, на второй раз делаю билд и уже должны запуститься тесты и так далее - с без с без…
Вы указали в формате cron, что значит ‘H’ и 04 ?? В 4 часа утра следующая сборка?

спасибо за внимание


(Василий Чернов) #4

На скриншоте лишь только пример конфигурации плагина. Да, запускается каждый день в 4 утра.
Может вам просто сделать джобу с тестами и без?

Do different tests instead of repeating the same tests


(Bohdan Korinnyi) #5

я то могу так сделать, не проблема, но у меня есть конкретное задание которое описано в вопросе, а с jenkins дружу только 2 дня потому и прошу помочь\


(Василий Чернов) #6

Тогда можно в билд части, сделать conditional part и там либо основываясь на BUILD_NUMBER проверять чётный или нечётный и в зависимости от этого запускать тесты или нет.

Либо же завести глобальную переменную, которую сетать в зависимости от того, запускалась ли тесты или нет с такой же проверкой в conditional part


Do different tests instead of repeating the same tests


(Stan) #7

Просьба обьяснять что и как вам надо сделать. Из сказанного есть куча вопросов:

Мне надо чтобы тесты запускались каждый второй раз когда я делаю compile

как вы делаете компайл? руками? после пуша в репозиторий? запускаете джобу сами? еще как-то?

Обясните все по-человечески :slight_smile:

Вы указали в формате cron, что значит ‘H’ и 04 ?? В 4 часа утра следующая сборка?

“H” нужен для балансировки, чуть более подробно в описании - https://issues.jenkins-ci.org/browse/JENKINS-17311


(Bohdan Korinnyi) #8

а как такое сделать?


(Bohdan Korinnyi) #9
  1. В Jenkins создал Item -> Maven project, исходники берет с git.
  2. В Goals and options пишу compile если хочу сделать билд для теста пишу test.
  3. Запускаю job нажав Собрать сейчас в русской версии Jenkins.
  4. Надо чтобы при нажатии Собрать сейчас происходил билд проекта, но тесты запускались не при каждом билде а через раз.
    Например:
    Я настроил чтобы сборка происходила каждые 2 минуты, в триггере написала */2 * * * *, и сделать так чтобы тесты запускались не каждый раз, а через раз, в 2 6 10 и тд мин, но со временем я навел только пример, не надо отталкиваться от этого, лучше всего описать цитату ниже.

(Stan) #10

Сразу скажу что такой костыль не будет долго работать. Что делать если билд упал? Будете ли запускать вы его тесты? Зачем, если он упал? Или впилите второй костыль, который будет проверять не упал ли билд в первый раз? Тогда четность-нечестность уже работать не будет. Что вы будете делать если тесты упали, а билд прошел? захотите запустить тесты второй раз? А они у вас всегда стабильные? А проблем с конфигурацией добов никогда не будет? Нужно будет впилить еще 100 костылей, в конце концов вы поймете что вы должны обозначить что за воркфлоу вы используете и действительно ли он подходит под ваши реалии.


(Василий Чернов) #11

Да, действительно, не ясна до конца задача, зачем запускать тесты через раз?


(Bohdan Korinnyi) #12

с помощью shell я могу получить BUILD_NUMBER и через echo вывести его на консоль при запуске, но как указать что если четный то запускать тест, а если нет то нет?

для разбора возможностей jenkins, не в целях тестирования !!!


(Василий Чернов) #13

Да, можно сделать сборку из 2х частей, каждый раз компилируем, а потом проверяем чётность номера билда, н-р так, но, как и говорил @st_eremin - это костыль!


Do different tests instead of repeating the same tests


(Bohdan Korinnyi) #14

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


(Василий Чернов) #15

Ну, раз у вас мавен, то скорей всего mvn test, вы же сами про это писали выше.


Do different tests instead of repeating the same tests


(Bohdan Korinnyi) #16

тоисть в структуре if для true писать mvn compile, а для false писать mvn compile test ??


я сделал такую часть, но у меня ошибка

if [$(($BUILD_NUMBER == $BUILD_NUMBER))]
then
   echo "equal"
else
   echo "not equal"
fi

такая ошибка, почему-то не сравнивает, хотя результат true

[workspace] $ /bin/sh -xe /tmp/hudson4862072185253311227.sh
+ [1]
/tmp/hudson4862072185253311227.sh: 2: /tmp/hudson4862072185253311227.sh: [1]: not found
+ echo not equal
not equal

(Stan) #17

Пример для винды, а у вас linux.


(Bohdan Korinnyi) #18

и что? пример для windows, а я свой код скинул, что тоже для windows? зачем давать ответ только чтобы считалось?

вопрос решился:blush: спасибо @Vasily_Chernov за ответ.

в shell нужно писать в таком формате, отталкиваясь от нужной переменной среды можно сделать запуск с тестом или без него. Ошибка была в синтаксисе скрипта.

if [ "$BUILD_NUMBER" = "$BUILD_NUMBER" ] // to verify the script
  then
    echo "equal"
    #здесь что надо то и делаем
  else
    echo "not equal"
fi