web-dev-qa-db-fra.com

Comment configurer Travis-CI pour créer des demandes d'extraction et des fusions pour maîtriser sans redondance

Pour le dire en termes "BDD":

Contexte:
Étant donné que je contribue à un dépôt de GH

Lorsque je crée une demande de tirage
Alors Travis devrait construire le dernier commit

Lorsque je pousse vers une demande d'extraction existante
Alors Travis devrait construire le dernier commit

Lorsque je fusionne une demande de tirage pour la maîtriser
Alors Travis devrait construire le maître

J'ai été troublé par les paramètres de "push de construction" et de "construction de PR" de Travis-CI, comme:

  • En activant les deux, chaque demande de tirage est générée deux fois par Travis
    • une fois pour le commit sur cette branche
    • et encore une fois pour le commit de fusion de cette branche dans sa destination
  • L'activation de "build PRs" uniquement provoque la construction de PRs, mais n'entraîne pas de builds post-fusion (c'est-à-dire sur le maître).
  • L'activation de la force brute "push" satisfait les critères ci-dessus en créant toutes les poussées vers le référentiel. Vous pouvez essayer de broyer les choses par des branches blanches et noires, mais cela vous mordra probablement à moins que vous ne soyez rigoureusement discipliné avec les noms des branches.

Ceci est expliqué plus en docs Travis-CI et GH numéro # 3241 .

Quelqu'un connaît une configuration qui répond aux critères ci-dessus?

57
Brian Gerstle

J'ai finalement trouvé un autre problème de GH ( # 2111 ) qui m'a donné l'idée d'essayer d'activer à la fois les RP et les push, mais avec une liste blanche pour restreindre les push à une branche spécifique. Cela semble répondre aux critères de mon flux de travail. Voici ce que j'ai fait:

  1. Activez à la fois les RP et les poussées de branche dans les paramètres de Travis pour le dépôt:

travis Push/pr settings enabled

  1. Changement .travis.yml à liste blanche master branche (c.-à-d. que seuls les push de build vers le master):
 succursales: 
 uniquement: 
 - maître 
  1. Testez-le en créant un PR avec le .travis.yml change , et un autre PR avec des validations vides pour le vérifier fonctionne aussi pour les fourches .

  2. Vérifiez génération de validation de fusion réussie à partir du maître .

build result of merge to master

94
Brian Gerstle

Vient de se trouver dans travis docs

Ajouter à .travis.yml

if: type = Push

alternativement:

if: type = pull_request
10
grosser

L'approche de la liste blanche décrite dans la réponse acceptée présente certaines limites importantes. En particulier, il ne prend pas en charge la création de branches arbitraires non redondantes sans ouvrir de PR.

J'ai ouvert n problème demandant une meilleure solution .

3
John

Vous pouvez utiliser le workflow suivant si vous souhaitez tester non seulement la branche master mais aussi d'autres branches:

  • Gardez les "Build pushes" et "Build pull requests" ON
  • Ajouter branches:except directive à votre .travis.yml:

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

Dans cette configuration:

  • tout commit sur la branche feature-A déclenchera la construction
  • tout commit sur la branche pr.feature-A ne déclenchera pas la construction
  • si branche pr.feature-A est utilisé dans la demande de tirage ouverte, puis la génération sera déclenchée

Exemple de workflow

  • branche WIP temporaire partagée entre plusieurs développeurs: wip.feature-A, tout commit sur cette branche déclenchera la construction
  • lorsque la branche est prête à être fusionnée en master vous pouvez la renommer depuis wip.feature-A à pr.feature-A et demande d'ouverture
  • si, lors de l'examen de la demande d'extraction, vous souhaitez appliquer de nouveaux correctifs, appuyez simplement sur pr.feature-A

Sur toutes les étapes ci-dessus, une seule génération sera déclenchée.

2
user2288008

En supposant que vous vouliez construire tous les PR , quelque chose comme le suivant fera l'affaire. Activez les versions de branche et PR sur la page des paramètres et placez cette ligne comme première ligne dans votre travis.yml:

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

Cela tentera une génération Push sur toutes les poussées et une génération PR sur toutes les poussées vers un PR ouvert, mais filtrera toutes celles qui ne remplissent pas la condition. Vous devrez peut-être modifier cela un peu - la clause de ne pas créer de branches avec no-ci quelque part dans leur nom est évidemment facultative, et vous ne pouvez pas avoir deux branches sur lesquelles vous souhaitez toujours exécuter des builds.

Vous pouvez en savoir plus sur conditions et versions conditionnelles sur le site de Travis.

2
Corey Noel