Запустить перестроение Travis-CI, не нажимая коммит?

414

Можно ли с помощью Travis-CI инициировать перестроение, не выдвигая новый коммит в GitHub?

Вариант использования: сборка завершается неудачно из-за внешних факторов. Источник на самом деле правильный. Он будет построен нормально и пройдет, если просто перезапустить.

Например, происходит apt-getсбой из-за сбоя сервера пакетов, но сервер снова работает. Тем не менее, статус сборки «застрял» на «не удалось», пока не будет передан новый коммит.

Есть ли какой-нибудь способ подтолкнуть Travis-CI к другой сборке, кроме «фиктивного» коммита?

Грег Хендершотт
источник

Ответы:

458
  • Если у вас есть права на запись в репо : на подробном экране сборки есть кнопка ↻ Restart Build . Также в разделе «Дополнительные параметры» есть пункт меню триггера сборки.

    Примечание . Такие расширения браузера, как Ghostery, могут препятствовать отображению кнопки перезапуска. Попробуйте отключить расширение или белый список Travis CI.

    Примечание 2 : Если .travis.ymlконфигурация изменилась в восходящем потоке, нажатие кнопки перестроения запустит travis со старой конфигурацией. Чтобы применить восходящие изменения для конфигурации travis, нужно добавить коммит в PR или закрыть / открыть заново.

  • Если вы отправили запрос на удаление : Вы можете закрыть PR, а затем открыть его снова . Это вызовет новую сборку.

Перезапустите сборку:

Перезапустите Build Screen Shot

Trigger Build:

Снимок экрана триггера

jbtule
источник
1
Я нашел и использовал это в других случаях. Но я мог бы поклясться, что у меня был случай, когда он ошибался по причине, описанной выше, и в меню передач отсутствовала эта опция. Возможно, это был случайный случай или, возможно, я ошибся. В любом случае, я думаю, что вы ответили, как это должно работать, так что я пойду дальше и отмечу ваш ответ как принятый. Спасибо!
Грег Хендершотт,
3
Если я посмотрю на историю сборки любого из проектов, которыми я владею, с ошибкой или с ошибкой, у меня есть кнопка перезапуска
jbtule
20
Я думаю, что один сложный случай - это когда вы отправляете запрос на извлечение чужого проекта, и он ошибается по причинам, не связанным с вашим пиаром, и вы знаете, что он будет успешным, если вы просто подтолкнете его, чтобы повторить попытку. Понятно, почему вы не можете (не ваш проект), но также понятно, почему вы этого хотите (ваш PR неправильно «выглядит плохо»).
Грег Хендершотт,
94
Не забудьте, что вы должны войти в систему, чтобы увидеть это: P
Майкл Дж. Калкинс
8
И вам нужно иметь доступ на запись к репозиторию github. Так что это не сработает для форков, продвинутых вверх по течению.
Izhaki
206

Если вы откроете вкладку « Настройки » для репозитория на GitHub, нажмите « Интеграции и сервисы» , найдите Travis CI и нажмите « Редактировать» , вы увидите кнопку « Тестировать сервис» . Это вызовет сборку.

Аарон Хилл
источник
6
Я думаю, что travis-ci удалил кнопку перезапуска сборки, так что это единственный способ, который сработал для меня правильно. Он выполняет две сборки, хотя ...
Блейз
1
@ Blise случайно вы используете Ghostery (или похожий)? Попробуйте отключить это. Для меня это заставляет кнопку Restart Build появляться снова.
Грег Хендершотт
29
Это работает, когда вы изначально активируете здание Travis CI для репо. Кнопка «перезагрузить сборку» не существует для репозитория, в котором нет предыдущих сборок.
Брайан Дж. Миллер
12
Примечание для таких идиотов, как я: откройте Settingsв репозитории на Github , а не на странице репо Трэвиса! Я не могу поверить, что я потратил 20 минут, пытаясь найти Service Hooksна странице Трэвиса. :(
Джон Ред
83

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

git commit --allow-empty -m "Trigger"

Вы можете сделать ребаз в конце и удалить сквош / удалить пустые коммиты и работать через все git-хуки :)

jasonmit
источник
1
Это великолепно, спасибо! Я просто хочу добавить, что мне пришлось перебазировать, чтобы сдвинуть коммит «Триггер» дальше в историю; в противном случае он просто откажется от новой сборки после удаления триггерного коммита.
pmos
63
в том же духе вы можете изменить существующий коммит и принудительный push: git commit --amend --no-edit && git push -f
grahamrhay
4
@grahamrhay - лучше всего запускать PR-сборку, когда вы не являетесь владельцем целевого репо, он хранит содержимое, нет необходимости объединять, перемещать или делать что-либо еще. Пожалуйста, сделайте ответ, чтобы можно было выразить это более заметно.
TWiStErRob
Я раздвоил репозиторий, к которому у меня не было доступа, и это было единственное, что сработало для меня, потому что у Трэвиса не было никаких сборок, которые я мог бы перезапустить на своем недавно созданном форке.
Ник МакКарди
1
@TWiStErRob Кто-то еще написал такой ответ ниже.
Франклин Ю
30

Я нашел другой способ принудительно перезапустить сборки CI и другие триггеры:

  1. Запустить git commit --amend --no-edit без изменений. Это позволит воссоздать последний коммит в текущей ветке.
  2. git push --force-with-lease origin pr-branch,
Влад Фролов
источник
8
Я бы не рекомендовал это. Он деструктивно изменяет историю, поэтому может запутать людей, у которых есть ветки, основанные на этом коммите, и --amendфлаг также может не изменить HEADкоммит в некоторых случаях.
Ник МакКарди
7
Я нахожу это прекрасным для тех редких случаев, когда вам нужен только BUMP webhooks для PR. Никто не должен разветвляться на запросы извлечения, поэтому никто не будет полагаться на точный идентификатор фиксации.
Влад Фролов
4
иди, git push --force-with-lease origin pr-branchчтобы случайно не
уничтожить
21

Войдите в Travis и перейдите на страницу сборки. Вы увидите кнопку «Перезапустить сборку» в правом верхнем углу рядом со значком шестеренки:

Screengrab

Примечание: вам нужно иметь доступ на запись к связанному репозиторию GitHub, чтобы это работало.

Juan
источник
11
Этот ответ в основном совпадает с принятым и был представлен гораздо позже.
Дан Даскалеску
5
@DanDascalescu у меня не было скриншота, когда я писал. И только теперь я понимаю, что вы можете редактировать чужой ответ! ;)
Хуан
1
@Juan, вы все еще можете удалить этот ответ, который я предлагаю сделать, поскольку он добавляет ненужный беспорядок.
Рафаль Энден
20

Если у вас есть новый проект на GitHub, который имеет .travis.yml, но никогда не тестировался, вы можете запускать тесты без коммитов следующим образом:

  1. включить тестирование в настройках Travis CI
  2. открыть страницу проекта на GitHub
  3. открыть настройки -> веб-хук и сервисы
  4. найдите Travis CI в сервисах и нажмите кнопку редактирования
  5. нажмите "Тестовый сервис"
lampslave
источник
3
Это ответ для тех, кто с недавно созданными проектами.
Эрик МОРАНД
16

Вы можете сделать это с помощью Travis CLI . Как описано в документации , сначала установите инструмент CLI, затем:

travis login --org --auto
travis token

Вы можете хранить этот токен в переменной окружения TRAVIS_TOKEN, если файл, в котором вы его храните, не является управляемым версией где-то общедоступным.

Я использую эту функцию для отправки триггеров:

function travis_trigger() {
     local org=$1 && shift
     local repo=$1 && shift
     local branch=${1:-master} && shift

     body="{
             \"request\": {
               \"branch\": \"${branch}\"
              }
           }"

     curl -s -X POST \
          -H "Content-Type: application/json" \
          -H "Accept: application/json" \
          -H "Travis-API-Version: 3" \
          -H "Authorization: token $TRAVIS_TOKEN" \
          -d "$body" \
          "https://api.travis-ci.org/repo/${org}%2F${repo}/requests"
 }
Сэм Брайтман
источник
Вы можете настроить свою собственную сборку Travis для своего форка.
Сэм Брайтман
Вы можете построить ветку своего форка, из которой сделан запрос на извлечение.
Сэм Брайтман
Отрасль вашего пиара и пиар это по сути одно и то же, верно? Если с тех пор, как вы сделали PR, в апстриме есть другие изменения, конечно, вам нужно перебазировать его, чтобы быть на 100% уверенным. Но это должно произойти в любом случае, и GitHub должен показать кнопку ребаз в пользовательском интерфейсе, которая в этом случае вызовет новую сборку PR.
Сэм Брайтман
11

Теперь Трэвис предлагает способ запуска «пользовательской» сборки из своего веб-интерфейса. Найдите кнопку меню «Дополнительные параметры» с правой стороны в верхней части страницы вашего проекта.

Дополнительные параметры → Trigger Build

Затем вам будет представлено диалоговое окно, в котором вы можете выбрать ветку и настроить конфигурацию:

Диалоговое окно Custom Build

В то время, когда я пишу это, он находится в бета-версии и, кажется, слегка глючит (но я ожидаю, что они скоро исправят проблемы).

иконоборец
источник
2
Спасибо. Для меня это лучший ответ, потому что триггерная сборка изменяет также идентификатор сборки, а не простой перестройкой (с помощью кнопки). Если вы используете идентификатор Travis в своих скриптах, это важно знать.
Карима Рафес
2
Это должно быть выше
Gillespie
8

Если вы устанавливаете Travis CI Client, вы можете travis restart <job#>вручную запустить сборку из консоли. Вы можете найти последнюю работу # для филиала, используяtravis show <branch>

travis show master
travis restart 48 #use Job number without .1
travis logs master

Travis CI Client

ОБНОВЛЕНИЕ: К сожалению, похоже, что это не запускает новую сборку с использованием последнего коммита, а просто перезапускает предыдущую сборку с использованием предыдущего состояния репо.

Грег Брей
источник
Я не понимаю примечание обновления. Из команды кажется, что вы можете определить, какую работу перезапустить. Таким образом, вопрос заключается в том, чтобы запустить задание, предположительно, большинство людей захотят сделать это, если их коммит уже сработал, но они хотят проверить его снова, чтобы ... О, я думаю, вы не можете деактивировать триггеры ветвления коммитов и вручную построить HEAD.
Redanimalwar
@redanimalwar типичный пример использования - принудительная сборка CI, когда он не может обнаружить изменения или находится в тихом периоде.
Сэм Брайтман
4

Я должен упомянуть здесь, что у нас теперь есть средства для запуска новой сборки в сети. См. Https://blog.travis-ci.com/2017-08-24-trigger-custom-build для получения подробной информации.

TL; DR Нажмите «Дополнительные параметры» и выберите «Построение триггера».

banzaiman
источник
Это не сработает, если у вас нет прав на запись / колаборатор в репозиторий и вы хотите перезапустить сборку для своего собственного запроса извлечения. Я не вижу такой возможности. И когда вы пытаетесь использовать Travis CLI, он говорит, что build #xxxx has been restarted если вы
заглянете
3

Если сборка никогда не происходила (возможно, вы не вовремя включили переключатель сборки Pull-Request), вы можете пометить Pull-запрос на Github как закрытый, затем пометить его как открытый, и будет запущена новая сборка.

viperguynaz
источник
1

Я только что запустил тесты по запросу на повторное выполнение, щелкнув здесь «Обновить ветку»: компонент тестов github

Фрейзер Киркман
источник
1

Вот что сработало для меня, чтобы вызвать перестроение на PR, который Dependabot открыл, но потерпел неудачу из-за ошибок в .travis.yml:

  1. Закрыть пиар
  2. Подождите, пока Dependabot оставит комментарий («Хорошо, я больше не буду уведомлять вас об этом выпуске, но свяжусь с вами, когда будет доступна новая версия».). Это удалит свою ветку.
  3. Восстановить ветку удаляемого Dependabot (что-то вроде dependabot/cargo/tempfile-3.0.4).
  4. Откройте пиар снова
grooveplex
источник
1

Пожалуйста, сначала войдите в систему Travis. Кнопка восстановления не появляется, пока вы не вошли в систему. Я знаю, что это очевидно, но кто-то просто нажал на нее ;-)

dinvlad
источник
0

иногда случается так, что сервер делает некоторые ошибки. Попробуйте выйти / войти, и тогда все может быть правильно. (Да, это случилось сегодня днем ​​со мной.)

XenoAmess
источник
-1

Simlpy закройте и снова откройте PR, если у вас нет прав на запись.

Пунит Найк
источник
Нет, ПОЖАЛУЙСТА, не оставляйте запросы на вывоз мусора, это раздражает. Просто добавьте новые коммиты в вашу ветку (например, вы можете изменить дату фиксации: git commit --amend --date = now && git push -f).
интр