Este blog explica como criar um pipeline de implantação usando o Jenkins e o Docker para um aplicativo Java que se comunica com um banco de dados.

O Jenkins oferece suporte à criação de pipelines. Eles são criados com scripts de texto simples que usam uma DSL (linguagem específica de domínio) de pipeline baseada na linguagem de programação Groovy. O script, normalmente chamado de Arquivo Jenkins, define vários
para executar tarefas simples e complexas de acordo com os parâmetros que você estabelece. Uma vez criados, os pipelines podem desenvolver código e orquestrar o trabalho necessário para conduzir os aplicativos do commit à entrega.

Um pipeline consiste em etapas, e estágio. Um pipeline é executado em um nó - um computador que faz parte da instalação do Jenkins. Um pipeline geralmente consiste em várias etapas. Um estágio consiste em várias etapas. Ler
Primeiros passos com o Pipeline para obter mais detalhes.

Para o nosso aplicativo, aqui está o fluxo básico:

docker-pipeline-jenkins

O código-fonte completo do aplicativo usado está em github.com/arun-gupta/docker-jenkins-pipeline.

O aplicativo é definido no aplicativo da web diretório. Ele abre uma conexão com o diretório Couchbase e armazena um documento JSON simples usando SDK Java do Couchbase.
O aplicativo também tem um teste que verifica se o banco de dados realmente contém o documento que foi persistido.

Muito obrigado a @alexsotob por me ajudar com a configuração do Jenkins.

Vamos começar!

Faça o download e instale o Jenkins

  • Faça o download do Jenkins em jenkins.io. Isso foi testado com Jenkins 2.21.
  • Iniciar Jenkins:

    Esse comando inicia o Jenkins especificando o diretório inicial onde todas as informações de configuração são armazenadas. Ele também define a porta na qual o Jenkins
    está ouvindo, 9090 neste caso.
  • A primeira inicialização do Jenkins mostra a seguinte mensagem no console:

    Copie a senha mostrada aqui. Ela será usada para desbloquear o Jenkins.
  • Acesse o console do Jenkins em localhost:9090 e cole a senha:
    docker-pipeline-jenkins-unlock
    Clique em Próximo.
  • Crie o primeiro usuário administrador conforme mostrado:
    docker-pipeline-jenkins-create-admin-user
    Clique em Salvar e finalizar.
  • Clique em Instalar os plug-ins sugeridos:
    docker-pipeline-jenkins-install-suggested-plugins
    Vários plug-ins padrão estão instalados:
    docker-pipeline-jenkins-installing-suggested-plugins
    Achei surpreendente o fato de o Ant e o Subversion serem os plug-ins padrão.
  • A tela de login é exibida.
    docker-pipeline-jenkins-login
    Digite o nome de usuário e a senha especificados anteriormente.
  • Finalmente, o Jenkins está pronto para ser usado:
    docker-pipeline-jenkins-start-using

São muitas etapas para começar a usar o Jenkins básico. Eu realmente preciso passar por todos esses obstáculos para começar a usar o Jenkins? Existe uma maneira mais fácil, mais simples, mais burra, mais preguiçosa de começar a usar o Jenkins? Siga a Convenção sobre Configuração
e me dar uma instalação pré-configurada com um clique.

Instalar os plug-ins do Jenkins

Instale os plug-ins necessários no Jenkins.

  1. Se o seu projeto Java for criado usando o Maven, você precisará configurar o Maven no Jenkins. Clique em Gerenciar o Jenkins, Configuração global da ferramenta, Instalações do Mavene especifique o local do Maven.docker-pipeline-jenkins-configure-maven
    Nomeie a ferramenta como Maven3 Mais uma vez, é um pouco chato, porque Jenkins não pode pegar o local padrão do Maven em vez de esperar que o usuário especifique um local.
  2. Clique em Gerenciar o Jenkins, Gerenciar plug-ins, Disponível procure por tubo de encaixe. Selecione Pipeline do Docker da CloudBees, clique em Instalar sem reiniciar. docker-pipeline-jenkins-pipeline-plugin
    Clique em Instalar sem reiniciar.Plug-in de pipeline do Docker O plug-in entende o arquivo do Jenkins e executa
    os comandos listados ali.
  3. A próxima tela mostra a lista de plug-ins instalados:
    docker-pipeline-jenkins-pipeline-plugin-restart-jenkins
    A última linha mostra que o plug-in do Docker Pipeline da CloudBees foi instalado com êxito. Selecione Reiniciar o Jenkins caixa de seleção. Isso também instalará a reinicialização do Jenkins.

Criar trabalho Jenkins

Vamos criar um trabalho no Jenkins que executará o pipeline.

  1. Depois que o Jenkins for reiniciado, ele mostrará a tela de login. Digite o nome de usuário e a senha criados anteriormente. Isso o leva de volta a Instalação de plug-ins/atualizações página. Clique no ícone do Jenkins no canto superior esquerdo para ver o painel principal:
    docker-pipeline-jenkins-dashboard
  2. Clique em criar novos empregos, forneça o nome como linha de base do docker-jenkins e escolha o tipo como Pipeline:docker-pipeline-jenkins-create-project
    Clique em OK.
  3. Configure o Pipeline conforme mostrado:
    docker-pipeline-jenkins-configure-pipeline
    O repositório git local é usado nesse caso. Você certamente pode escolher um repositório hospedado no github. Além disso, esse repositório pode ser configurado com um git hook ou sondagem em um intervalo constante para acionar o pipeline. Clique em
    Salvar para salvar a configuração.

Executar o Jenkins Build

Antes de iniciar o trabalho, o banco de dados do Couchbase precisa ser iniciado explicitamente como:

Isso será resolvido após #9 foi corrigido. Verifique se você pode acessar o Couchbase em http://localhost:8091, use Administrador como o login e senha como a senha. Clique em Compartimentos de dados e veja a guia livros balde criado.
docker-pipeline-couchbase-books
Clique em Construir agora e você verá um resultado semelhante a:
docker-pipeline-jenkins-build-run
Todo verde é bom!

Vamos tentar entender o que aconteceu nos bastidores. Arquivo Jenkins descreve como o pipeline é criado. No nível superior, ele tem quatro estágios - Package, Create
Imagem do Docker, Executar aplicativo e Executar testes. Cada estágio é mostrado como uma caixa no painel do Jenkins. O tempo total gasto em cada estágio é mostrado na caixa.

Vamos entender o que acontece em cada estágio.

  • Pacote - O código-fonte do aplicativo reside no diretório aplicativo da web diretório. Comando Maven mvn clean package -DskipTests é usado para criar um arquivo JAR do aplicativo. Observe que o projeto maven também inclui
    os testes e são explicitamente ignorados usando -DskipTests. Normalmente, os testes estariam em um projeto separado a jusanteO projeto Maven cria um arquivo JAR distante
    do aplicativo e inclui todas as dependências.
  • Criar imagem do Docker - A imagem do Docker do aplicativo é criada usando o Dockerfile no aplicativo da web diretório.
    A imagem simplesmente inclui o JAR fat e o executa usando java -jarCada imagem é marcada com o número de compilação usando ${env.BUILD_NUMBER}.
  • Executar aplicativo - A execução do aplicativo envolve a execução do contêiner do Docker do aplicativo. O endereço IP do contêiner do banco de dados é identificado usando o parâmetro inspeção de docas O contêiner do banco de dados e o aplicativo
    estão ambos em execução no contêiner padrão ponte rede. Isso permite que os dois contêineres se comuniquem entre si. Outro aprimoramento seria executar o pipeline em um cluster no modo swarm. Isso exigiria a criação de
    e usar um sobreposição rede.
  • Executar testes - Os testes são executados no contêiner usando o teste mvn comando. Se os testes forem aprovados, a imagem será enviada para o Docker Hub. Os resultados do teste são capturados de qualquer maneira. Esse estágio também mostra o uso de tentar/captura/finalmente no Jenkinsfile. Se os testes forem aprovados, a imagem será enviada para o Docker Hub. Nesse caso, ela está disponível em hub.docker.com/r/arungupta/docker-jenkins-pipeline/tags/.

Algumas tarefas ...

  • Mova os testes para um projeto downstream (#7)
  • Use o Git hook ou poll para acionar o pipeline (#8)
  • Automatizar a inicialização/desligamento do banco de dados (#9)
  • Execute o pipeline em um cluster de Docker Engines com o modo Swarm (#10)
  • Mostrar configuração alternativa para enviar a imagem para o bintray (#11)

Outro ponto problemático é que a sintaxe das variáveis globais não parece estar documentada em lugar algum. Ela só está disponível em :/job/docker-jenkins-pipeline/pipeline-syntax/globals. Mais uma vez, isso é um pouco ruim!

Não é impossível, apenas ainda não foi implementado" #sadpanda

Algumas referências adicionais para ler:

Mais informações sobre o Couchbase:

Sinta-se à vontade para registrar bugs em github.com/arun-gupta/docker-jenkins-pipeline/issues ou enviar RP.

Autor

Postado por Arun Gupta, vice-presidente de defesa do desenvolvedor, Couchbase

Arun Gupta é o vice-presidente de defesa do desenvolvedor na Couchbase. Ele criou e liderou comunidades de desenvolvedores por mais de 10 anos na Sun, Oracle e Red Hat. Ele tem grande experiência na liderança de equipes multifuncionais para desenvolver e executar estratégias, planejamento e execução de conteúdo, campanhas de marketing e programas. Antes disso, liderou equipes de engenharia na Sun e é membro fundador da equipe Java EE. Gupta é autor de mais de 2.000 postagens em blogs sobre tecnologia. Ele tem uma vasta experiência em palestras em mais de 40 países sobre diversos tópicos e é um JavaOne Rock Star há três anos consecutivos. Gupta também fundou o capítulo Devoxx4Kids nos EUA e continua a promover a educação tecnológica entre as crianças. Autor de vários livros sobre tecnologia, corredor ávido, viajante do mundo inteiro, campeão de Java, líder de JUG, membro do NetBeans Dream Team e capitão do Docker, ele pode ser facilmente acessado em @arungupta.

Deixar uma resposta