Qual é a diferença entre Jenkins e outro IC, como o GitLab CI, drone.io, que vem com a distribuição Git. Em algumas pesquisas, só pude descobrir que a edição da comunidade GitLab não permite a adição de Jenkins, mas a edição corporativa do GitLab permite. Existem outras diferenças significativas?
129
Respostas:
Esta é a minha experiência:
No meu trabalho, gerenciamos nossos repositórios com o GitLab EE e temos um servidor Jenkins (1.6) em execução.
Na base, eles fazem praticamente o mesmo. Eles executarão alguns scripts em uma imagem de servidor / Docker.
TL; DR;
A maioria dos servidores de CI é bastante direta ( concourse.ci ), gitlab-ci , circle-ci , travis-ci , drone.io , gocd e o que mais você tem. Eles permitem executar scripts shell / bat a partir de uma definição de arquivo YAML. Jenkins é muito mais conectável e vem com uma interface do usuário. Isso pode ser uma vantagem ou uma desvantagem, dependendo de suas necessidades.
Jenkins é muito configurável por causa de todos os plugins disponíveis. A desvantagem disso é que seu servidor de IC pode se tornar um espaguete de plugins.
Na minha opinião, encadear e orquestrar trabalhos em Jenkins é muito mais simples (por causa da interface do usuário) do que via YAML (chamando comandos curl). Além disso, o Jenkins suporta plugins que instalam certos binários quando eles não estão disponíveis no seu servidor (não sabemos disso para os outros).
Atualmente (o Jenkins 2 também suporta mais "ci adequado" com o plug- in
Jenkinsfile
e o pipline, que vem por padrão a partir do Jenkins 2), mas costumava ser menos acoplado ao repositório do que o CI do GitLab.O uso de arquivos YAML para definir seu pipeline de construção (e, no final, executar shell / bat puro) é mais limpo.
Os plug-ins disponíveis para o Jenkins permitem visualizar todos os tipos de relatórios, como resultados de testes, cobertura e outros analisadores estáticos. Obviamente, você sempre pode escrever ou usar uma ferramenta para fazer isso por você, mas é definitivamente uma vantagem para Jenkins (especialmente para gerentes que tendem a valorizar muito esses relatórios).
Ultimamente, tenho trabalhado cada vez mais com o GitLab CI. No GitLab, eles estão fazendo um ótimo trabalho, tornando toda a experiência divertida. Entendo que as pessoas usam o Jenkins, mas quando você tem o GitLab em execução e está disponível, é realmente fácil começar a usar o GitLab CI. Não haverá nada que se integre tão perfeitamente quanto o GitLab CI, mesmo que eles se esforcem bastante nas integrações de terceiros.
Algumas vantagens no momento da escrita:
fonte
Concordo com a maioria das anotações de Rik, mas minha opinião sobre o que é mais simples é o oposto : o GitLab está provando ser uma ferramenta incrível de se trabalhar.
A maior parte do poder vem de ser independente e integrar tudo no mesmo produto na mesma guia do navegador: do navegador do repositório, do quadro de problemas ou do histórico de construção às ferramentas e monitoramento de implantação .
Estou usando agora para automatizar e testar como um aplicativo é instalado em diferentes distribuições Linux, e é rápido demais para configurar (tente abrir uma configuração complexa de tarefas Jenkins no Firefox e aguarde o script não responsivo aparecer vs quão leve é a edição
.gitlab-ci.yml
).O tempo gasto na configuração / dimensionamento de escravos é consideravelmente menor graças aos binários dos corredores ; além do fato de que no GitLab.com você obtém corredores compartilhados bastante decentes e gratuitos.
Jenkins se sente mais manual depois de algumas semanas sendo um usuário avançado do GitLab CI, por exemplo, duplicando trabalhos por filial, instalando plugins para fazer coisas simples, como o upload de SCP. O único caso de uso que enfrentei onde sinto falta hoje é quando mais de um repositório está envolvido; que ainda precisa ser bem resolvido.
No momento, estou escrevendo uma série no IC do GitLab para demonstrar como não é tão difícil configurar sua infraestrutura de CI de repositório com ele. Publicado na semana passada, o primeiro artigo apresenta os princípios, prós e contras e as diferenças com outras ferramentas: Integração contínua rápida e natural com o GitLab CI
fonte
Jenkinsfile
. Você está certo de queJenkinsfile
possui groovy (+ java libs adicionais) disponíveis para executar código, onde o.gitlab-ci.yaml
arquivo suporta principalmente shell, mas (dependendo da localização do runner). Por outro lado, você também pode chamar isso de um script de shell, mas a desvantagem é que você está criando dependências de máquina (que na minha opinião não são muito transparentes).Antes de tudo, a partir de hoje, o GitLab Community Edition pode ser totalmente interoperável com o Jenkins. Nenhuma pergunta.
A seguir, dou alguns comentários sobre uma experiência bem-sucedida combinando o Jenkins e o GitLab CI. Também discutirei se você deve usar os dois ou apenas um deles e por que motivo.
Espero que isso lhe forneça informações de qualidade em seus próprios projetos.
Pontos fortes do GitLab CI e Jenkins
IC do GitLab
O GitLab CI é naturalmente integrado no GitLab SCM. Você pode criar pipelines usando
gitlab-ci.yml
arquivos e manipulá-los através de uma interface gráfica.Esses pipelines como código podem obviamente ser armazenados na base de código, impondo a prática "tudo como código" (acesso, controle de versão, reprodutibilidade, reutilização etc.).
O GitLab CI é uma ótima ferramenta de gerenciamento visual:
Jenkins
Jenkins é uma ótima ferramenta de construção. Sua força está em seus muitos plugins. Especialmente, tive muita sorte em usar plugins de interface entre o Jenkins e outras ferramentas de CI ou CD. Essa é sempre uma opção melhor do que recriar (possivelmente mal) uma interface de diálogo entre dois componentes.
O pipeline como código também está disponível usando
groovy
scripts.Usando o GitLab CI e Jenkins juntos
Pode parecer um pouco redundante a princípio, mas a combinação de GitLab CI e Jenkins é bastante poderosa.
Outro benefício desse projeto é ter um acoplamento frouxo entre as ferramentas:
O compromisso
Bem, é claro, há um preço a pagar por esse projeto: a configuração inicial é complicada e você precisa ter um nível mínimo de entendimento de muitas ferramentas.
Por esse motivo, eu não recomendo essa configuração, a menos que
Se você não estiver em nenhuma dessas situações, provavelmente estará melhor com apenas uma das duas, mas não com as duas.
Se eu tivesse que escolher um
O GitLab CI e Jenkins têm prós e contras. Ambos são ferramentas poderosas. Então qual escolher?
resposta 1
Escolha aquele em que sua equipe (ou alguém próximo) já possui um certo nível de experiência.
Resposta 2
Se vocês são todos novatos em tecnologias de CI, basta escolher um e seguir em frente.
Aqueles de vocês que estão usando o GitLab e não têm certeza de que continuarão fazendo isso ainda precisam ter em mente que, ter escolhido o IC do GitLab implicaria na lixeira de todos os seus pipelines de CI / CD.
A palavra final é: o equilíbrio se inclina um pouco para Jenkins por causa de seus muitos plugins, mas é provável que o GitLab CI preencha rapidamente a lacuna.
fonte
Gostaria de adicionar algumas descobertas de minhas experiências recentes com o GitLab CI. Os recursos que acompanham o 11.6 e o 11.7 são incríveis!
Especificamente, adoro
only
condições que basicamente permitem que você construa pipelines separados paramerge_request
oupush
(a lista completa está aqui )Além disso, eu realmente gosto da ausência de plugins. Quando preciso de uma funcionalidade mais complexa, basta escrever uma imagem personalizada do Docker que lida com a funcionalidade necessária (é o mesmo conceito que você pode ver no drone.io ).
Se você está pensando em DRY , é absolutamente possível hoje em dia! Você pode escrever seus "modelos"
Coloque-os em algum repositório público, inclua-os no pipeline principal:
E use-os para estender algum trabalho:
Eu amo tanto o GitLab CI! Sim, (até agora) não é possível desenhar bons gráficos com cobertura e assim por diante, mas no geral é uma ferramenta realmente interessante!
Edit (2019-02-23): aqui está o meu post sobre coisas que eu amo no GitLab CI. Foi escrito em 11.7 "era", portanto, quando você está lendo esta resposta, o GitLab CI provavelmente possui muitos outros recursos.
Editar (2019/07/10): gitlab CI agora suporta múltiplos
extends
, por exemploConsulte a documentação oficial para obter mais informações sobre várias extensões
fonte
se seus trabalhos de compilação / publicação / implantação e teste não são muito complexos, o uso do gitlab ci tem vantagens naturais.
Como o gitlab-ci.yml está presente ao lado do seu código em todas as ramificações, você pode modificar suas etapas ci / cd particularmente testes (que diferem entre os ambientes) de forma mais eficaz.
Por exemplo, você deseja fazer testes de unidade para qualquer entrada no ramo dev, enquanto você pode executar testes funcionais completos na filial do controle de qualidade e um tipo limitado de testes apenas na produção, que pode ser alcançado facilmente usando o gitlab ci.
A segunda vantagem, além da excelente interface do usuário, é a capacidade de usar imagens do docker para executar qualquer estágio, mantendo o corredor do host intacto e, portanto, menos propenso a erros.
além disso, o gitlab ci faria o check-in automaticamente para você e você não precisará gerenciar o jenkins master separadamente
fonte