Mostrar o estado atual da criação de Jenkins no repositório do GitHub

182

Existe uma maneira de mostrar o status de criação do Jenkins no GitHub Readme.md do meu projeto?

Eu uso o Jenkins para executar compilações de integração contínua. Após cada confirmação, garante que tudo seja compilado, além de executar testes de unidade e integração, antes de finalmente produzir pacotes de documentação e liberação.

Ainda existe o risco de cometer inadvertidamente algo que interrompe a construção. Seria bom para os usuários que visitam a página do projeto GitHub saberem que o mestre atual está nesse estado.

Jasper Blues
fonte
9
Por que isso foi votado para baixo? Há algo óbvio no manual do usuário de Jenkins que eu perdi? Eu fiz o Google de antemão e não consegui encontrar nada.
Jasper azuis
1
O servidor de construção Travis pode fazer algo assim, mas estou usando Jenkins no Osx. Aqui é o tipo de coisa que eu estou atrás: github.com/CocoaPods/CocoaPods
Jasper azuis
2
O link para a pergunta semelhante recomenda o Travis, que atualmente não suporta iOS e OSX, portanto, não responde à pergunta.
Jasper azuis
4
Esta não é uma duplicata .. Travis = Jenkins!
Banjocat

Respostas:

167

Ok, veja como você pode configurar o Jenkins para definir os status de compilação do GitHub. Isso pressupõe que você já tenha o Jenkins com o plug-in GitHub configurado para criar compilações a cada push.

  1. Vá para o GitHub, faça login, vá para Configurações , tokens de acesso pessoal , clique em Gerar novo token .

    captura de tela das configurações do GitHub

  2. Verifique o repo: status (não tenho certeza se isso é necessário, mas o fiz e funcionou para mim).

    captura de tela da geração de token do GitHub

  3. Gere o token, copie-o.

  4. Verifique se o usuário do GitHub que você vai usar é um colaborador de repositório (para repositórios particulares) ou é membro de uma equipe com acesso push e pull (para repositórios de organização) aos repositórios que você deseja criar.

  5. Vá para o servidor Jenkins, faça o login.

  6. Gerenciar JenkinsConfigurar sistema
  7. Em GitHub Web Hook, selecione Permitir que Jenkins gerencie automaticamente os URLs de gancho e especifique seu nome de usuário do GitHub e o token OAuth que você obteve na etapa 3.

    captura de tela das configurações globais do Jenkins

  8. Verifique se ele funciona com o botão Testar credencial . Salve as configurações.

  9. Localize o trabalho Jenkins e adicione Definir status de compilação no commit do GitHub nas etapas pós-compilação

    captura de tela da configuração do trabalho Jenkins

É isso aí. Agora faça uma compilação de teste e vá para o repositório GitHub para ver se funcionou. Clique em Ramos na página principal do repositório para ver os status da compilação.

foto da página principal onde você clica em 'ramificações'

Você deve ver marcas de seleção verdes:

captura de tela dos ramos do GitHub com status de compilação

Marius Gedminas
fonte
O GitHub atualizou seu fluxo de trabalho de autorização agora, os usuários não especificam mais o que permitir, os aplicativos devem solicitar o que precisam durante a autorização e o usuário aprovar as permissões solicitadas.
21815 Ian Vaughan
6
Isso não parece trabalhar com Jenkins> 1.609 e Github plug-in v 1.13.3 - Não consigo encontrar a opção "Let Jenkins auto-gerenciar URLs gancho"
endre
2
Concordo com o @pyeleven. Estou usando o Jenkins LTS 1.625.3 com o Github Plugin 1.16.0 e o Github API Plugin 1.71. Esta opção não aparece. Em vez disso, vejo uma lista suspensa de credenciais, mas nenhuma credencial é listada (mesmo que eu tenha credenciais configuradas). Essas credenciais aparecem ao ir para Avançar-> Gerenciar ações adicionais do Github -> Converter logon e senha em token do Github.
precisa saber é
4
Isso parece estar desatualizado; a ação pós-compilação esta resposta menciona agora está marcado como obsoleto e não há um segundo
Daenyth
1
Agora, os parâmetros da etapa de pós-construção foram alterados. @Alex tem resposta correta.
Bibek Mantree #
51

Enquanto isso, a interface do Jenkins e do GitHub mudou um pouco e demorei um pouco para descobrir como configurar o Jenkins agora corretamente. A explicação aqui é baseada na versão 2.121.1 do Jenkins.

Suponho também que você já configurou seu trabalho Jenkins ser acionado por um webhook ou por pesquisa. Essas são as etapas que eu tomei para fazê-lo funcionar:

  1. Configurar Github: criar token de acesso pessoal com escopo OAuth repo:status
  2. Configure o Jenkins: Configure Systeme adicione o OAuth Secret como um servidor GitHub - use Secret Textcomo um método de autenticação para colocar o OAuth Secret nele.
  3. Configure sua tarefa Jenkins: adicionar Set GitHub commit statuscomo ação pós-compilação . Defina o resultado do status como One of the default messages and statuses.
  4. Verifique seu resultado no GitHub: Verifique se você obtém o status da compilação e a duração da execução da compilação no commit do GitHub.

Configurar o Github

Criar token de acesso pessoal


insira a descrição da imagem aqui


insira a descrição da imagem aqui


insira a descrição da imagem aqui


Configurar Jenkins

insira a descrição da imagem aqui


insira a descrição da imagem aqui


insira a descrição da imagem aqui


insira a descrição da imagem aqui


insira a descrição da imagem aqui


Configurar trabalho de Jenkins

insira a descrição da imagem aqui


insira a descrição da imagem aqui


insira a descrição da imagem aqui


Resultado

Agora você verá o status dos seus commit e branches:

insira a descrição da imagem aqui

Alex
fonte
2
Wow finalmente encontrou uma solução, muito obrigado! Aquele "texto secreto" me deixou confusa.
01
Jenkins parece estar pressionando os status, mas meu repo particular não está pegando neles. Alguma sugestão?
Patrick Michaelsen
Atualização: meu problema estava relacionado à privacidade do meu repo. Eu devo ter um problema com minha configuração de credencial.
Patrick Michaelsen
Atualização: no fim das contas, descobri que isso só funciona se foi acionado por um push git real. A execução da construção você mesmo não aciona a atualização de status corretamente.
Patrick Michaelsen
1
A Manage Hookscaixa está destacada, mas não marcada nas imagens acima. Isso significa que deve ser desmarcada quando salvarmos?
Perplexabot
37

O que eu fiz é bem simples:

  1. Instale o plug-in de tarefa Hudson Post
  2. Crie um token de acesso pessoal aqui: https://github.com/settings/tokens
  3. Adicionar um plug-in de pós-tarefa que sempre coloca sucesso

    curl -XPOST -H "Authorization: token OAUTH TOKEN" https://api.github.com/repos/:organization/:repos/statuses/$(git rev-parse HEAD) -d "{
      \"state\": \"success\",
      \"target_url\": \"${BUILD_URL}\",
      \"description\": \"The build has succeeded!\"
    }"
    
  4. Adicione um plug-in de pós-tarefa que apresentará falha se "marcado como compilação como falha"

    curl -XPOST -H "Authorization: token OAUTH TOKEN" https://api.github.com/repos/:organization/:repos/statuses/$(git rev-parse HEAD) -d "{
      \"state\": \"failure\",
      \"target_url\": \"${BUILD_URL}\",
      \"description\": \"The build has failed!\"
    }"
    
  5. Você também pode adicionar uma chamada a pendente no início dos testes

    curl -XPOST -H "Authorization: token OAUTH TOKEN" https://api.github.com/repos/:organization/:repos/statuses/$(git rev-parse HEAD) -d "{
      \"state\": \"pending\",
      \"target_url\": \"${BUILD_URL}\",
      \"description\": \"The build is pending!\"
    }"
    

Captura de tela da configuração da tarefa Post build

Natim
fonte
Você também pode fazer isso a partir do Pipeline - por exemplo, você pode simplesmente chamá-lo através de she até mesmo aproveitar o armazenamento de credenciais Jenkins comwithCredentials
Ivan Kolmychek
Para o Teamcity, você pode usar: confluence.jetbrains.com/display/TCD10/Commit+Status+Publisher
Natim
24

Este plug-in deve funcionar: https://wiki.jenkins-ci.org/display/JENKINS/Embeddable+Build+Status+Plugin

Você deve incorporar emblemas como este em seu README.mdarquivo:

construir passagem

Koraktor
fonte
6
Infelizmente, parece que o GitHub começou a armazenar em cache essas imagens em algum serviço de hospedagem de imagens e elas estão sendo exibidas incorretamente agora.
axel22
Agora ele funciona muito bem se você configurar corretamente o acesso (usuário anônimo deve ser capaz de ver o status de compilação)
Dmitry Meshkov
11

A API de status de confirmação permite que você veja a " API de status de repositório ".

E desde 26 de abril de 2013, agora você pode ver o status da compilação na sua página de filial do repositório do GitHub :

criar status nas ramificações de repositório do GitHub

Isso significa que é outra maneira, visitando a página do projeto GitHub, para ver esses status em vez de ter apenas Jenkins.

A partir de 30 de abril de 2013, o terminal da API para status de confirmação foi estendido para permitir nomes de ramificações e tags, bem como confirmar SHAs .

VonC
fonte
Onde coloco os URLs a serem atingidos? Existe um plug-in ou eu tenho que usar cachos em uma etapa de construção?
Ian Vaughan
@IanVaughan, o que você quer dizer com "bater"? Para ver o que? Para ver um status, seria um curl( developer.github.com/v3/repos/statuses/… )
VonC
Desculpe, sim, eu sabia que a ondulação podia ser usada e conhecia a interface da API. Era mais onde colocá-la, e se não houvesse uma abstração de nível superior da ondulação disponível? ou seja, eu poderia adicionar um curl POST antes que a compilação comece a declarar que o commit / PR está sendo construído e depois um depois, mas tudo isso parece um nível muito baixo e esperava que houvesse um plug-in de nível superior fazendo esse material para mim.
Ian Vaughan
Desde então, encontrei o Janky, que é bastante pesado para o meu caso de uso, parece fazer o que quero.
22813 Ian Vaughan
7

Se você possui um Githubplugin instalado no seu computador Jenkins, pode fazê-lo da Post build actionsseguinte maneira:

definir status de compilação no github

Rémy Virin
fonte
13
Isso parece falhar silenciosamente.
você precisa saber é o seguinte: `` chrylis -cautiouslyoptimistic
4
Esta resposta não possui detalhes: como criar um token de acesso OAuth no GitHub para permitir que o plug-in do GitHub use as APIs necessárias para definir o status da compilação? Quais permissões são necessárias nesse token? Onde na configuração do Jenkins posso especificar o nome de usuário / token?
Marius Gedminas
2
Isso realmente não é útil, como você acessa essa janela de diálogo?
precisa saber é o seguinte
5

Adicione a linha abaixo no seu README.md e altere a URL de acordo com o seu projeto jenkins.

[![Build Status](https://jenkins../..project/lastBuild/buildStatus)](https://jenkins../..project/lastBuild/)
Kaushal
fonte
O gráfico é carregado automaticamente? Parece que não é para mim ...
HX_unbanned 30/01
Sim, não vai funcionar. Você precisa atualizar sua página.
Kaushal
3

No que diz respeito à criação do ramo protegido do Jenkins e do GitHub. Estou usando o Jenkins 2.6, e estas são as etapas que eu fiz para fazê-lo funcionar:

Na página do GitHub do seu repositório:

  1. Navegue para Configurações> Ramos.
  2. Em Proteger ramificações, clique no menu Escolher uma ramificação afogada e selecione a ramificação que deseja definir como ramificação protegida.
  3. Ative as opções conforme necessário.

No servidor Jenkins: (Verifique se você tem o plug-in Git e GitHub instalado)

  1. Navegue para Gerenciar Jenkins> Configurar sistema.
  2. No GitHub, defina o URL da API como https://api.github.com . Embora este seja o valor padrão.
  3. Selecione seu token gerado para as credenciais. Se você ainda não gerou um token, clique em Avançado ... e, em Ações adicionais, você pode converter seu login e senha em token e usá-lo como sua credencial.

Além disso, verifique se a conta do GitHub que seu Jenkins está usando é um colaborador do repositório. Eu o configurei com o nível de permissão de gravação.

Espero que isto ajude.

d 'homem fantasma
fonte
2

Eu segui as instruções de Alex e funcionou.

Mas, para o GitHub Enterprise, você precisa modificar o URL da API ao adicionar o servidor ao Jenkins.

Por exemplo, se sua empresa for creditcard.com, seu URL será

https://github.creditcard.com/api/v3/

Adan Amarillas
fonte
1

Editar:

Não estou mais usando essa abordagem, use uma das outras respostas.

Atualização: o que acabei fazendo, para o nosso caso específico: (as respostas acima foram ótimas - obrigado!)

Como nosso servidor de compilação não está na Internet, temos um script para publicar o status de compilação na ramificação gh-pages no github.

  • Falha no início dos carimbos de construção
  • Sucesso dos carimbos de final de construção
  • O projeto é executado após o projeto principal para publicar resultados -> status da compilação, documentos da API, relatórios de teste e cobertura de teste.

O GitHub armazena em cache as imagens, por isso criamos o arquivo .htaccess, que instrui um tempo limite curto para a imagem de status da compilação.

Coloque isso no diretório com a imagem de status de construção:

ExpiresByType image/png "access plus 2 minutes"

Aqui está o script de compilação. O destino que publica nas páginas gh é '--publish.site.dry.run'

Com menos de 400 linhas de configuração, temos:

  • Compilar verificações
  • testes de unidade e integração
  • Relatórios de teste
  • Relatórios de cobertura de código
  • Documentos da API
  • Publicando no Github

. . e esse script pode ser executado dentro ou fora do Jenkins, para que:

  • Os desenvolvedores podem executar esse script antes de confirmar, reduzindo a chance de uma construção quebrada que afeta outros.
  • É fácil reproduzir uma falha localmente.

Os resultados:

A página principal do projeto possui o status da compilação, atualizado após cada compilação, junto com os últimos documentos da API, resultados e cobertura do teste.

Jasper Blues
fonte
Ótimo feedback, mais preciso do que minha resposta. +1
VonC
1
Link de script de construção está morto
Saikat
Você tem um link ao vivo para o seu script?
lan
Pararam de usar essa abordagem - acho que as outras respostas serão melhores.
Jasper Blues