Як налаштувати Travis-CI для створення запитів на витягування та злиття для керування без надмірності


76

Якщо сказати "BDD":

Передумови:
Враховуючи, що я беру участь у репозиторії GH

Коли я створюю запит на витягування,
тоді Тревіс повинен створити останній коміт

Коли я натискаю на існуючий запит на витяг,
тоді Тревіс повинен створити останній коміт

Коли я об'єдную запит на витягування з master,
тоді Тревіс повинен створити master

Мене збентежили налаштування "побудови натискань" і "побудови PR" Тревіса-КІ:

  • Увімкнення обох призводить до того, що кожен запит на витягування Тревісом будується двічі
    • один раз для коміту на цій гілці
    • і ще раз для злиття коміту цієї гілки до місця призначення
  • Увімкнення просто "побудувати PR" призводить до побудови PR, але не призводить до збірок після злиття (тобто на master).
  • Увімкнення грубої сили "штовхає" задовольняє вищезазначені критерії, будуючи всі натискання на репо. Ви можете спробувати доопрацювати речі за допомогою білого та чорного переліків, але це, мабуть, вас вкусить, якщо ви не будете суворо дисципліновані з назвами гілок.

Це пояснюється детальніше в документах Travis-CI та випуску GH № 3241 .

Хтось знає конфігурацію, яка відповідає наведеним критеріям?


Збірка гілок та збірка PR - це різні збірки, які можуть мати різні результати. Побудова гілки - це просто верхівка гілки. Збірка PR - це кінчик гілки, об’єднаної для освоєння. Це фактично сталося б, якби ви об’єднали гілку для освоєння в цей момент. Якщо з відкриттям гілки інші речі були об’єднані для обробки, тож злиття вперед неможливо, це буде відрізнятися від побудови гілки.
Деніел Стівенс,

Відповіді:


108

Врешті-решт я знайшов ще одну проблему GH ( № 2111 ), яка дала мені ідею спробувати включити як PR, так і натискання, але з білим списком, щоб обмежити натискання на певну гілку. Здається, це відповідає критеріям мого робочого процесу. Ось що я зробив:

  1. Увімкніть як PR, так і натискання гілок у налаштуваннях Тревіса для репо:

налаштування travis push / pr увімкнено

  1. Перейти .travis.ymlдо гілки білого спискуmaster (тобто лише побудова натискань на master):
філії:
  лише: 
    - майстер
  1. Перевірте його, створивши PR із .travis.ymlзміною , і ще один PR із деякими порожніми комітами, щоб перевірити, чи працює він і для форків .

  2. Перевірте успішну збірку комітів злиття від майстра .

результат побудови злиття до майстра


Підтверджуючи цю роботу. Дивіться цей запит на витягування .
Brandon Bradley

4
Чи все ще це працює для PR-підгалузей, які вказують на щось інше, ніж master? Я вважаю, що це базується на дивній химерності з PR-розробниками Тревіса і не може працювати в цьому випадку.
fotinakis

Я вважаю , що він повинен, так як він налаштований , щоб зібрати всі тягнути запити (незалежно від базової галузі), але обмежується тільки будувати поштовхи до master.
Брайан Герстл

@fotinakis - у GitHub є три варіанти, які відповідають трьом різним типам об’єднань. Виберіть варіант, який зберігає всі допоміжні гілки / функції, щоб включити їх до натискання. Тоді, можливо, вам доведеться попрацювати над travis.yml, я думаю, щоб отримати конкретні гілки / функції або виключити
user2347763

Це не працює для запитів на витягування, які не націлені на майстра - вони просто не збираються.
Кори Ноель


10

Якщо припустити, що ви хочете створити всі PR, щось на зразок наведеного нижче зробить свою справу. Увімкніть збірки гілок та PR на сторінці налаштувань і поставте цей рядок як перший рядок у вашому travis.yml:

if: (type = push AND branch IN (master, dev)) OR (type = pull_request AND NOT branch =~ /no-ci/)

Це спробує побудувати push на всіх натисканнях і PR побудувати на всіх натисканнях на відкритий PR, але відфільтрує всі, які не відповідають умові. Можливо, вам доведеться трохи змінити це - пункт про те, щоб не будувати гілки, де де-небудь в їх назві немає ci, є, очевидно, необов’язковим, і у вас може не бути двох гілок, на яких ви завжди хочете запускати збірки.

Детальніше про умови та умовні збірки ви можете прочитати на сайті Тревіса.



2

Ви можете використовувати наступний робочий процес, якщо хочете перевірити не тільки masterгілку, але й деякі інші гілки:

  • Утримуйте ввімкненими як "Побудова натискань", так і "Побудова запитів на витяг"
  • Додайте branches:exceptдирективу до .travis.yml:

    branches:
      except:
        - /^pr\..*/
    

У цій конфігурації:

  • будь-яке комітування до гілки feature-Aспричинить побудову
  • будь-яке комітування до гілки pr.feature-Aне спричинить побудову
  • якщо гілка pr.feature-Aвикористовується у відкритому запиті на витягування, тоді буде ініційовано складання

Приклад робочого процесу

  • тимчасова гілка WIP, спільна для кількох розробників:, wip.feature-Aбудь-яке комітування до цієї гілки спричинить побудову
  • коли гілка готова до об'єднання, masterви можете перейменувати її з wip.feature-Aна pr.feature-Aта відкрити запит на витягування
  • якщо під час розгляду запиту на витягування ви хочете застосувати нові виправлення, просто натисніть pr.feature-A

На всіх описаних вище кроках буде запущено лише одну збірку.


0

Для одного зі сховищ, з якими я працював, ось що я хотів:

Існує originрепо, яке є основним репо, яке робить всі релізи.

Я хотів , щоб все тягнути запити , що надходять в masterгалузь походження має бути побудовані з Travis тільки один раз , незалежно від того , що вона виходить від роздвоєною репо або будь-який інший галузі на originсебе.

У цьому випадку це працює як шарм

if: (type == push) OR (type == pull_request AND fork == true)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.