Привет, начал осваивать Jenkins для запуска своих проектов на сервере. Возник вопрос, как настроить Jenkins так что бы тесты запускались через определенное время?
Привет, не до конца понятно, запускать вообще с переодичностью? В любом случае вам необходимо настроить buildtrigger, н-р так
Do different tests instead of repeating the same tests
Мне надо чтобы тесты запускались каждый второй раз когда я делаю compile(сборку проекта). Например я запустил первый раз job у меня сбилдился проект но без выполнения тестов, на второй раз делаю билд и уже должны запуститься тесты и так далее - с без с без…
Вы указали в формате cron, что значит ‘H’ и 04 ?? В 4 часа утра следующая сборка?
спасибо за внимание
На скриншоте лишь только пример конфигурации плагина. Да, запускается каждый день в 4 утра.
Может вам просто сделать джобу с тестами и без?
Do different tests instead of repeating the same tests
я то могу так сделать, не проблема, но у меня есть конкретное задание которое описано в вопросе, а с jenkins дружу только 2 дня потому и прошу помочь\
Тогда можно в билд части, сделать conditional part и там либо основываясь на BUILD_NUMBER проверять чётный или нечётный и в зависимости от этого запускать тесты или нет.
Либо же завести глобальную переменную, которую сетать в зависимости от того, запускалась ли тесты или нет с такой же проверкой в conditional part
Do different tests instead of repeating the same tests
Просьба обьяснять что и как вам надо сделать. Из сказанного есть куча вопросов:
Мне надо чтобы тесты запускались каждый второй раз когда я делаю compile
как вы делаете компайл? руками? после пуша в репозиторий? запускаете джобу сами? еще как-то?
Обясните все по-человечески
Вы указали в формате cron, что значит ‘H’ и 04 ?? В 4 часа утра следующая сборка?
“H” нужен для балансировки, чуть более подробно в описании - [JENKINS-17311] Expand and encourage use of hash syntax in crontabs - Jenkins Jira
а как такое сделать?
- В Jenkins создал
Item
->Maven project
, исходники берет с git. - В
Goals and options
пишуcompile
если хочу сделать билд для теста пишуtest
. - Запускаю
job
нажавСобрать сейчас
в русской версииJenkins
. - Надо чтобы при нажатии
Собрать сейчас
происходил билд проекта, но тесты запускались не при каждом билде а через раз.
Например:
Я настроил чтобы сборка происходила каждые 2 минуты, в триггере написала*/2 * * * *
, и сделать так чтобы тесты запускались не каждый раз, а через раз, в2 6 10 и тд
мин, но со временем я навел только пример, не надо отталкиваться от этого, лучше всего описать цитату ниже.
Сразу скажу что такой костыль не будет долго работать. Что делать если билд упал? Будете ли запускать вы его тесты? Зачем, если он упал? Или впилите второй костыль, который будет проверять не упал ли билд в первый раз? Тогда четность-нечестность уже работать не будет. Что вы будете делать если тесты упали, а билд прошел? захотите запустить тесты второй раз? А они у вас всегда стабильные? А проблем с конфигурацией добов никогда не будет? Нужно будет впилить еще 100 костылей, в конце концов вы поймете что вы должны обозначить что за воркфлоу вы используете и действительно ли он подходит под ваши реалии.
Да, действительно, не ясна до конца задача, зачем запускать тесты через раз?
с помощью shell я могу получить BUILD_NUMBER и через echo
вывести его на консоль при запуске, но как указать что если четный то запускать тест, а если нет то нет?
для разбора возможностей jenkins, не в целях тестирования !!!
Да, можно сделать сборку из 2х частей, каждый раз компилируем, а потом проверяем чётность номера билда, н-р так, но, как и говорил @st_eremin - это костыль!
Do different tests instead of repeating the same tests
да, Вы выводите на консоль информацию что надо запускать тест потому что четный номер билда, но как запустить сам тест, а не отпечатать сообщение?
Ну, раз у вас мавен, то скорей всего mvn test, вы же сами про это писали выше.
Do different tests instead of repeating the same tests
тоисть в структуре 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
Пример для винды, а у вас linux.
и что? пример для windows
, а я свой код скинул, что тоже для windows
? зачем давать ответ только чтобы считалось?
вопрос решился:blush: спасибо @Vasily_Chernov за ответ.
в shell
нужно писать в таком формате, отталкиваясь от нужной переменной среды можно сделать запуск с тестом или без него. Ошибка была в синтаксисе скрипта.
if [ "$BUILD_NUMBER" = "$BUILD_NUMBER" ] // to verify the script
then
echo "equal"
#здесь что надо то и делаем
else
echo "not equal"
fi