Desencadear uma reconstrução do Travis-CI sem enviar uma confirmação?


414

Usando o Travis-CI, é possível disparar uma reconstrução sem enviar um novo commit ao GitHub?

Caso de uso: Uma construção falha devido a uma externalidade. A fonte está realmente correta. Seria bom construir e passar se simplesmente re-executar.

Por exemplo, uma apt-getfalha ocorre porque um servidor de pacotes está inativo, mas o servidor está novamente em backup. No entanto, o status da construção é "travado" em "falhou" até que uma nova confirmação seja enviada.

Existe alguma maneira de convencer o Travis-CI a fazer outra compilação, além de enviar um commit "fictício"?

Respostas:


458
  • Se você tiver acesso de gravação ao repositório : Na tela de detalhes da compilação, existe um botão ↻ Reiniciar compilação . Também em "Mais opções", há um item de menu de criação de gatilho.

    Nota : Extensões do navegador como Ghostery podem impedir que o botão reiniciar seja exibido. Tente desativar a extensão ou o Travis CI da lista branca.

    Nota2 : Se a .travis.ymlconfiguração foi alterada no upstream, clicar no botão reconstruir executará o travis com a configuração antiga. Para aplicar alterações upstream na configuração do travis, é necessário adicionar commit ao PR ou fechá-lo / reabri-lo.

  • Se você enviou uma solicitação de recebimento : Você pode fechar o PR e abri-lo novamente . Isso acionará uma nova compilação.

Reinicie a compilação:

Reiniciar captura de tela de compilação

Criação do gatilho:

Trigger Build Captura de tela


1
Eu encontrei e usei isso em outros casos. Mas eu podia jurar que tinha um caso em que ele havia errado pela razão que descrevi acima, e o menu de engrenagem não tinha essa opção. Talvez tenha sido um acaso, ou talvez eu tenha me enganado. De qualquer forma, acho que você respondeu como deve funcionar, então vou em frente e marque sua resposta como aceita. Obrigado!
22813 Greg Hendershott #:

3
Se eu olhar para a história de construção de qualquer um dos projectos que eu próprio, com erros ou não, ele tem um botão de reiniciar
jbtule

20
Acho que um caso complicado é quando você envia uma solicitação de recebimento para o projeto de outra pessoa, e ela falha por motivos não relacionados ao seu PR por si só, e você sabe que seria bem-sucedido se você pudesse apenas cutucá-lo para tentar novamente. É compreensível por que você não pode (não é seu projeto) - mas também é compreensível por que você desejaria (seu PR incorretamente "parece ruim").
precisa

94
Não se esqueça que você tem que fazer o login para ver o seguinte: P
Michael J. Calkins

8
E você precisa ter acesso de gravação ao github repro. Portanto, isso não funcionará para garfos empurrados a montante.
Izhaki 9/07/2014

206

Se você abrir a guia Configurações do repositório no GitHub, clique em Integrações e serviços , encontre o Travis CI e clique em Editar , você verá um botão Serviço de teste . Isso acionará uma compilação.


6
Eu acho que o travis-ci removeu o botão de reinicialização, então essa é a única maneira que funcionou corretamente para mim. Ele executa duas compilações embora ...
Blaise

1
@ Blaise por acaso você usa Ghostery (ou similar)? Tente desativar isso. Para mim, isso faz com que o botão Reiniciar Compilação reapareça.
precisa

29
Isso funciona quando você ativa inicialmente o edifício Travis CI para um repo. O botão "recarregar compilação" não existe para um repo que não possui compilações anteriores.
27715 Brian H. Miller

12
Uma observação para idiotas como eu: abra Settingsno repositório no Github , não na página de repositórios do Travis! Não acredito que perdi 20 minutos tentando encontrar Service Hooksna página de Travis. :( #
John Red

83

Sei que você disse sem enviar um commit, mas algo útil, se você estiver trabalhando em um ramo que não seja o master, é confirmar um commit vazio.

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

Você pode refazer a recuperação no final e remover o squash / remover os commits vazios e funciona em todos os ganchos do git :)


1
Isso é brilhante, obrigado! Eu só quero acrescentar que tive que me refazer para mover o commit "Trigger" para mais adiante na história; caso contrário, simplesmente descartaria a nova compilação após a remoção do commit "Trigger".
pmos

63
Na mesma linha, você pode alterar a cometer e força de impulso existente: git commit --amend --no-edit && git empurrar -f
grahamrhay

4
@grahamrhay é o melhor para acionar uma compilação de relações públicas quando você não é o proprietário do repositório de destino, ele mantém o conteúdo, não é necessário mesclar, refazer ou fazer qualquer coisa. Faça uma resposta para que seja possível fazer uma votação mais visível.
TWiStErRob

Garfoi um repositório ao qual não tinha acesso e essa foi a única coisa que funcionou para mim porque o Travis não tinha nenhuma compilação que eu pudesse reiniciar no meu fork recém-criado.
Nick McCurdy

1
@TWiStErRob Alguém escreveu essa resposta abaixo.
Franklin Yu

30

Encontrei outra maneira de forçar a execução de compilações de CI e outros gatilhos:

  1. Execute git commit --amend --no-editsem nenhuma alteração. Isso recriará a última confirmação na ramificação atual.
  2. git push --force-with-lease origin pr-branch.

8
Eu não recomendaria isso. Modifica destrutivamente o histórico para confundir as pessoas que possuem ramificações baseadas nesse commit, e o --amendsinalizador também pode não alterar o HEADcommit em alguns casos.
Nick McCurdy

7
Acho bom para as raras ocasiões em que você precisa apenas de webhooks BUMP para um PR. Ninguém realmente deve se ramificar das solicitações de recebimento, para que ninguém confie no ID exato de confirmação.
Vlad Frolov 8/16

4
ir para git push --force-with-lease origin pr-branchassim que você fizer mudanças não acidentalmente nuclear de outra pessoa
binarymason

21

Faça login no Travis e vá para a página de compilação. Você verá um botão "Reiniciar compilação" no canto superior direito, ao lado do ícone de roda dentada:

captura de tela

Nota: você precisa ter acesso de gravação ao repositório vinculado do GitHub para que isso funcione.


11
Essa resposta é basicamente a mesma que a aceita e foi enviada muito mais tarde.
Dan Dascalescu

5
@DanDascalescu não tinha uma captura de tela quando postei. E só agora percebo que você pode editar a resposta de outra pessoa! ;)
Juan

1
@ Juan, você ainda pode excluir esta resposta, que eu sugiro fazer, pois está adicionando uma confusão desnecessária.
Rafal Enden

20

Se você possui um novo projeto no GitHub que possui .travis.yml, mas nunca foi testado, você pode executar testes sem confirmar desta maneira:

  1. ativar o teste nas configurações do Travis CI
  2. abrir a página do projeto no GitHub
  3. configurações abertas -> webhooks e serviços
  4. encontre o Travis CI nos serviços e pressione o botão editar
  5. pressione "Serviço de teste"

3
Esta é a resposta para aqueles com projetos recém-criados.
Eric MORAND 16/09

16

Você pode fazer isso usando a CLI do Travis . Conforme descrito na documentação , instale primeiro a ferramenta CLI e, em seguida:

travis login --org --auto
travis token

Você pode manter esse token em uma variável de ambiente TRAVIS_TOKEN, desde que o arquivo em que ele está armazenado não seja controlado por versão em algum lugar público.

Eu uso essa função para enviar gatilhos:

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"
 }

Você pode configurar sua própria construção Travis para o seu garfo.
Sam Brightman

Você pode criar a ramificação de sua bifurcação da qual a solicitação de recebimento é feita.
Sam Brightman

O ramo do seu PR e o PR são essencialmente a mesma coisa, certo? Se o upstream tiver outras alterações desde que você criou o PR, com certeza, será necessário refazê-lo para ter 100% de certeza. Mas isso precisaria acontecer de qualquer maneira, e o GitHub deve mostrar um botão de rebase na interface do usuário que acionaria uma nova compilação do PR nesse caso.
Sam Brightman

11

O Travis agora oferece uma maneira de acionar uma compilação "personalizada" a partir da interface do usuário da web. Procure o botão de menu "Mais opções" no lado direito, próximo à parte superior da página do seu projeto.

Mais opções → Criação do acionador

Você receberá uma caixa de diálogo na qual poderá escolher a ramificação e personalizar a configuração:

Caixa de diálogo Construção Personalizada

No momento em que escrevo isso, ele está na versão beta e parece um pouco problemático (mas espero que eles resolvam os problemas em breve).


2
Obrigado. Para mim, é a melhor resposta, porque uma construção de gatilho muda também o ID da construção, não com uma simples reconstrução (através do botão). Se você usa a identificação do Travis em seus scripts, é importante saber.
Karima Rafes

2
Isso precisa ser mais alto
Gillespie

8

Se você instalar o Travis CI Client, poderá usar travis restart <job#>novamente para executar manualmente uma compilação no console. Você pode encontrar o último número de trabalho de uma filial usandotravis show <branch>

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

Travis CI Client

ATUALIZAÇÃO: Infelizmente, parece que isso não inicia uma nova compilação usando a confirmação mais recente, mas apenas reinicia uma compilação anterior usando o estado anterior do repositório.


Não entendo a nota de atualização. Pelo comando, parece que você pode definir qual trabalho reiniciar. Portanto, a pergunta está prestes a desencadear um trabalho, presumivelmente a maioria das pessoas gostaria de fazer isso se o seu commit já foi acionado, mas eles querem testá-lo novamente para isso ... Ah, eu acho que você não pode desativar os gatilhos de commit commit e criar manualmente o HEAD.
Redanimalwar #

@redanimalwar Um caso de uso comum está forçando a criação de um IC quando falha em detectar alterações ou em um período silencioso.
18716 Sam Sammanman

4

Devo mencionar aqui que agora temos um meio de desencadear uma nova compilação na web. Consulte https://blog.travis-ci.com/2017-08-24-trigger-custom-build para obter detalhes.

TL; DR Clique em "Mais opções" e escolha "Trigger build".


Isso não funcionará se você não tiver acesso de gravação / colaborador ao repositório e desejar executar novamente a compilação para sua própria solicitação de recebimento. Não vejo essa opção. E ao tentar o Travis CLI, ele diz build #xxxx has been restarted , mas se você olhar na página web você não vê qualquer construção acontecendo
Bitek

3

Se a construção nunca ocorreu (talvez você não tenha ativado a opção de solicitação de solicitação pull), marque a solicitação de solicitação no Github como fechada e depois como aberta e uma nova compilação será acionada.


1

Acabei de acionar os testes em uma solicitação pull para serem executados novamente clicando em 'atualizar ramo' aqui: componente de testes de verificação do github


1

Aqui está o que funcionou para desencadear uma reconstrução em um PR que o Dependabot havia aberto, mas falhou devido a erros em .travis.yml:

  1. Feche o PR
  2. Aguarde o Dependabot comentar ("OK, não voltarei a notificá-lo sobre este lançamento, mas entrarei em contato quando uma nova versão estiver disponível."). Ele removerá seu ramo.
  3. Restaure o ramo que o Dependabot removeu (algo como dependabot/cargo/tempfile-3.0.4).
  4. Abra o PR novamente

1

Certifique-se de fazer login no Travis primeiro. O botão de reconstrução não aparece até que você esteja logado. Eu sei que isso é óbvio, mas alguém também tropeçou nele ;-)


0

às vezes acontece que o servidor cometeu alguns erros. tente sair / entrar e tudo pode estar certo nesse momento. (Sim, aconteceu esta tarde comigo.)


-1

Simlpy feche e reabra o PR se você não tiver acesso de gravação.


Não, POR FAVOR, não deixe solicitações de coleta de lixo, é irritante. Basta enviar novos commit (s) para sua ramificação (por exemplo, você pode alterar a data de commit: git commit --amend --date = now && git push -f).
intgr 6/07/19
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.