Déclencher une reconstruction Travis-CI sans pousser un commit?

414

En utilisant Travis-CI, est-il possible de déclencher une reconstruction sans pousser un nouveau commit sur GitHub?

Cas d'utilisation: une génération échoue en raison d'une externalité. La source est en fait correcte. Il se construirait bien et passerait s'il était simplement relancé.

Par exemple, un apt-getéchec en raison d'un serveur de packages en panne, mais le serveur est à nouveau de sauvegarde. Cependant, l'état de génération est "bloqué" à "échoué" jusqu'à ce qu'un nouveau commit soit poussé.

Existe-t-il un moyen de pousser Travis-CI à faire une autre build, autre que de pousser un commit "factice"?

Greg Hendershott
la source

Réponses:

458
  • Si vous disposez d'un accès en écriture au référentiel : sur l'écran de détail de la build, il y a un bouton ↻ Redémarrer la build . Sous «Plus d'options», il y a également un élément de menu de génération de déclencheur.

    Remarque : les extensions de navigateur comme Ghostery peuvent empêcher l'affichage du bouton de redémarrage. Essayez de désactiver l'extension ou l'inscription sur liste blanche Travis CI.

    Remarque 2 : si la .travis.ymlconfiguration a changé en amont, un clic sur le bouton de reconstruction exécutera travis avec l'ancienne configuration. Pour appliquer des modifications en amont pour la configuration de travis, il faut ajouter un commit au PR ou le fermer / le rouvrir.

  • Si vous avez envoyé une demande d'extraction : vous pouvez fermer le PR, puis l'ouvrir à nouveau . Cela déclenchera une nouvelle version.

Redémarrez la construction:

Redémarrer la capture d'écran de construction

Construction du déclencheur:

Trigger Build Screen Shot

jbtule
la source
1
Je l'ai trouvé et utilisé dans d'autres cas. Mais j'aurais juré avoir eu un cas où il s'était trompé pour la raison que j'ai décrite ci-dessus, et le menu de vitesse n'avait pas cette option. Peut-être que c'était un coup de chance, ou peut-être que je me suis trompé. Quoi qu'il en soit, je pense que vous avez répondu comment cela devait fonctionner, alors je vais continuer et marquer votre réponse comme acceptée. Merci!
Greg Hendershott
3
Si je regarde l'historique de construction de l'un des projets que je possède, erroné ou échoué, il a un bouton de redémarrage
jbtule
20
Je pense qu'un cas délicat est celui où vous soumettez une demande de tirage pour le projet de quelqu'un d'autre, et il s'est trompé pour des raisons sans rapport avec votre PR en soi, et vous savez que cela réussirait si vous pouviez simplement le pousser pour réessayer. Il est compréhensible pourquoi vous ne pouvez pas (pas votre projet) - mais aussi pourquoi vous le souhaitez (votre PR "a l'air incorrect").
Greg Hendershott du
94
N'oubliez pas que vous devez être connecté pour voir ceci: P
Michael J. Calkins
8
Et vous devez avoir un accès en écriture à la repro github. Cela ne fonctionnera donc pas pour les fourches poussées en amont.
Izhaki
206

Si vous ouvrez l' onglet Paramètres du référentiel sur GitHub, cliquez sur Intégrations et services , recherchez Travis CI et cliquez sur Modifier , vous devriez voir un bouton Test Service . Cela déclenchera une construction.

Aaron Hill
la source
6
Je pense que travis-ci a supprimé le bouton de redémarrage, c'est donc le seul moyen qui a fonctionné pour moi. Il effectue cependant deux builds…
Blaise
1
@Blaise, par hasard, utilisez-vous Ghostery (ou similaire)? Essayez de désactiver cela. Pour moi, cela fait réapparaître le bouton Redémarrer la génération.
Greg Hendershott
29
Cela fonctionne lorsque vous activez initialement le bâtiment Travis CI pour un dépôt. Le bouton "reload build" n'existe pas pour un dépôt qui n'a pas de builds précédents.
Brian J. Miller,
12
Une note pour les idiots comme moi: Ouvrez Settingsdans le référentiel sur Github , pas sur la page de repo de Travis! Je ne peux pas croire que j'ai perdu 20 minutes à essayer de trouver Service Hookssur la page de Travis. :(
John Red
83

Je sais que vous avez dit sans pousser de validation, mais ce qui est pratique, si vous travaillez sur une branche autre que master, est de valider un commit vide.

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

Vous pouvez rebaser à la fin et supprimer le squash / supprimer les validations vides et fonctionne sur tous les hooks git :)

jasonmit
la source
1
C'est génial, merci! Je veux juste ajouter que j'ai dû rebaser pour déplacer le commit "Trigger" plus bas dans l'histoire; sinon, il rejetterait simplement la nouvelle version lors de la suppression du commit "Trigger".
pmos
63
dans le même ordre d'idées, vous pouvez modifier le commit et la force push existants: git commit --amend --no-edit && git push -f
grahamrhay
4
@grahamrhay est le meilleur moyen de déclencher une génération de relations publiques lorsque vous n'êtes pas propriétaire du référentiel cible, il conserve le contenu, pas besoin de fusionner ou de rebaser ou de faire quoi que ce soit. Veuillez en faire une réponse afin qu'il soit possible de voter de manière plus visible.
TWiStErRob
J'ai bifurqué un référentiel auquel je n'avais pas accès, et c'était la seule chose qui a fonctionné pour moi car Travis n'avait pas de builds que je pouvais redémarrer sur ma nouvelle fourche créée.
Nick McCurdy
1
@TWiStErRob Quelqu'un d'autre a écrit une telle réponse ci-dessous.
Franklin Yu
30

J'ai trouvé une autre façon de forcer les builds de CI à réexécuter et d'autres déclencheurs:

  1. Exécutez git commit --amend --no-editsans aucune modification. Cela recréera le dernier commit de la branche actuelle.
  2. git push --force-with-lease origin pr-branch.
Vlad Frolov
la source
8
Je ne recommanderais pas ça. Il modifie de manière destructive l'historique afin de perturber les personnes dont les branches sont basées sur ce commit, et le --amenddrapeau peut également ne pas modifier le HEADcommit dans certains cas.
Nick McCurdy
7
Je le trouve bien pour les rares occasions où vous n'avez besoin que de webhooks BUMP pour un PR. Personne ne devrait vraiment se dériver des pull-requests, donc personne ne s'appuiera sur l'identifiant de validation exact.
Vlad Frolov
4
allez-y pour git push --force-with-lease origin pr-branchque vous ne
nukez
21

Connectez-vous à Travis et accédez à la page de construction. Vous verrez un bouton "Redémarrer la construction" dans le coin supérieur droit, à côté de l'icône d'engrenage:

capture d'écran

Remarque: vous devez avoir un accès en écriture au référentiel GitHub lié pour que cela fonctionne.

Juan
la source
11
Cette réponse est fondamentalement la même que celle acceptée le et a été soumise beaucoup plus tard.
Dan Dascalescu
5
@DanDascalescu, il n'y avait pas de capture d'écran lorsque j'ai posté. Et je me rends compte maintenant que vous pouvez modifier la réponse de quelqu'un d'autre! ;)
Juan
1
@Juan, vous pouvez toujours supprimer cette réponse, ce que je suggère de faire car cela ajoute un encombrement inutile.
Rafal Enden
20

Si vous avez un nouveau projet sur GitHub qui a .travis.yml, mais n'a jamais été testé, vous pouvez exécuter des tests sans valider de cette façon:

  1. activer les tests dans les paramètres Travis CI
  2. ouvrir la page du projet sur GitHub
  3. ouvrir les paramètres -> webhooks et services
  4. recherchez Travis CI dans les services et appuyez sur le bouton Modifier
  5. appuyez sur "Test service"
lampes esclave
la source
3
C'est la réponse pour ceux qui ont des projets nouvellement créés.
Eric MORAND
16

Vous pouvez le faire à l'aide de la CLI Travis . Comme décrit dans la documentation , installez d'abord l'outil CLI, puis:

travis login --org --auto
travis token

Vous pouvez conserver ce jeton dans une variable d'environnement TRAVIS_TOKEN, tant que le fichier dans lequel vous le conservez n'est pas contrôlé par la version dans un endroit public.

J'utilise cette fonction pour soumettre des déclencheurs:

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"
 }
Sam Brightman
la source
Vous pouvez configurer votre propre build Travis pour votre fourche.
Sam Brightman
Vous pouvez créer la branche de votre fourche à partir de laquelle la demande d'extraction est effectuée.
Sam Brightman
La branche de votre PR et le PR sont essentiellement la même chose, non? Si en amont a d'autres changements depuis que vous avez fait le PR, vous devez le rebaser pour être sûr à 100%. Mais cela devrait se produire de toute façon, et GitHub devrait afficher un bouton de rebase dans l'interface utilisateur qui déclencherait une nouvelle version du PR dans ce cas.
Sam Brightman
11

Travis offre désormais un moyen de déclencher une construction "personnalisée" à partir de leur interface utilisateur Web. Recherchez le bouton de menu "Plus d'options" sur le côté droit près du haut de la page de votre projet.

Plus d'options → Trigger Build

Une boîte de dialogue vous sera alors présentée dans laquelle vous pourrez choisir la branche et personnaliser la configuration:

Boîte de dialogue de construction personnalisée

Au moment où j'écris ceci, il est en version bêta et semble être légèrement bogué (mais je m'attends à ce que les problèmes soient résolus bientôt).

iconoclaste
la source
2
Merci. Pour moi, c'est la meilleure réponse car une génération de déclencheur change également l'ID de la génération, pas avec une simple reconstruction (via le bouton). Si vous utilisez l'identifiant de Travis dans vos scripts, il est important de le savoir.
Karima Rafes
2
Cela doit être plus haut
Gillespie
8

Si vous installez le client Travis CI, vous pouvez utiliser travis restart <job#>pour réexécuter manuellement une génération à partir de la console. Vous pouvez trouver le dernier numéro de tâche d'une succursale à l'aide detravis show <branch>

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

Client Travis CI

MISE À JOUR: Malheureusement, il semble que cela ne démarre pas une nouvelle génération en utilisant le dernier commit, mais redémarre simplement une génération précédente en utilisant l'état précédent du dépôt.

Greg Bray
la source
Je ne comprends pas la note de mise à jour. À partir de la commande, il semble que vous puissiez définir le travail à redémarrer. Donc, la question est sur le point de déclencher un travail, en principe la plupart des gens voudraient le faire si leur commit est déjà déclenché mais ils veulent le tester à nouveau donc ... Oh je suppose que vous ne pouvez pas désactiver les déclencheurs de branche de commit et construire manuellement HEAD.
redanimalwar
@redanimalwar un cas d'utilisation courant force une génération de CI lorsqu'il ne parvient pas à détecter les changements ou est dans une période de silence.
Sam Brightman
4

Je dois mentionner ici que nous avons maintenant un moyen de déclencher une nouvelle version sur le Web. Voir https://blog.travis-ci.com/2017-08-24-trigger-custom-build pour plus de détails.

TL; DR Cliquez sur "Plus d'options" et choisissez "Génération de déclencheur".

banzaiman
la source
Cela ne fonctionne pas si vous n'avez aucun accès en écriture / collaborateur au référentiel et que vous souhaitez réexécuter la génération pour votre propre demande d'extraction. Je ne vois pas cette option. Et lorsque vous essayez la CLI Travis, cela dit, build #xxxx has been restarted mais si vous regardez dans la page Web, vous ne voyez aucune construction en cours
bitek
3

Si la génération ne s'est jamais produite (peut-être que vous n'avez pas activé le commutateur de génération de demande de traction à temps), vous pouvez marquer la demande de traction sur Github comme fermée, puis la marquer comme ouverte et une nouvelle génération sera déclenchée.

viperguynaz
la source
1

Je viens de déclencher les tests sur une demande de tirage à relancer en cliquant sur «Mettre à jour la branche» ici: composant de tests de vérification github

Frazer Kirkman
la source
1

Voici ce qui a fonctionné pour moi pour déclencher une reconstruction sur un PR que Dependabot avait ouvert, mais qui a échoué en raison d'erreurs dans .travis.yml:

  1. Fermez le PR
  2. Attendez que Dependabot commente ("OK, je ne vous informerai plus de cette version, mais je vous contacterai lorsqu'une nouvelle version sera disponible."). Il supprimera sa branche.
  3. Restaurer la branche Dependabot supprimée (quelque chose comme dependabot/cargo/tempfile-3.0.4).
  4. Ouvrez à nouveau le PR
grooveplex
la source
1

Veuillez d'abord vous connecter à Travis. Le bouton de reconstruction n'apparaît pas tant que vous n'êtes pas connecté. Je sais que cela est évident, mais quelqu'un l'a également déclenché ;-)

dinvlad
la source
0

il arrive parfois que le serveur fasse des erreurs. essayez de vous déconnecter / vous connecter et tout ira peut-être bien. (Oui, cela m'est arrivé cet après-midi.)

XenoAmess
la source
-1

Simlpy fermez et rouvrez le PR si vous n'avez pas accès en écriture.

Punit Naik
la source
Non, S'IL VOUS PLAÎT ne laissez pas de demandes de récupération d'ordures, c'est ennuyeux. Envoyez simplement de nouveaux commit (s) à votre branche (par exemple, vous pouvez changer la date de commit: git commit --amend --date = now && git push -f).
intgr