Há alguns meses, escrevi sobre Criação de um pipeline de implantação contínua com o Node.js e o Jenkinsonde o aplicativo Node.js estava usando Couchbase de alguma forma. Essencialmente, ele pegava um projeto do GitHub, instalava as dependências, executava os testes e, em seguida, executava o aplicativo em algum servidor, sendo que algum servidor era a mesma máquina em que o Jenkins estava.

O Jenkins é ótimo, mas dá muito trabalho para ser configurado e continuar funcionando. Em vez disso, existem soluções hospedadas de integração contínua (CI) e implantação contínua (CD), como CircleCI.

Veremos como pegar um projeto Node.js que tem controle de versão no GitHub e implantá-lo continuamente em algum servidor remoto usando o CircleCI sempre que um push for feito.

Antes de continuar, você já deve ter criado uma conta CircleCI, ter um servidor remoto disponível e ter um projeto Node.js disponível no GitHub.

Neste exemplo, estou usando um Droplet que criei em Oceano Digital e o Projeto de armazenamento de perfil de usuário em Node.js Eu já havia escrito sobre isso há algum tempo. Sinta-se à vontade para usar o que quiser.

Preparando o servidor remoto para conexões SSH

O objetivo da implantação contínua é poder implantar automaticamente um projeto estável em seu servidor sem problemas.

Ao usar o CircleCI, durante a etapa de implantação, queremos que nosso projeto seja copiado depois que nosso fluxo de trabalho de teste for bem-sucedido. Isso pode acontecer por meio de um SCP ou de um Git Checkout com uma série de comandos no servidor remoto. O que melhor atender às suas necessidades.

Como estamos usando o Node.js, é melhor usar a última opção porque precisaremos instalar dependências e reiniciar o serviço do Node.js. Isso é um pouco mais profundo do que apenas copiar arquivos. Por esse motivo, precisaremos do CircleCI para podermos nos conectar à nossa instância remota via SSH.

A maneira mais segura de fazer isso é criar uma chave privada SSH para o CircleCI. Em seu servidor, supondo que ele seja Linux, execute o seguinte:

Você receberá uma série de perguntas sobre a chave. É importante que essa chave SSH não contenha uma senha, pois o CircleCI não oferece suporte a senhas de chaves até o momento.

Depois que a chave for gerada, execute o seguinte:

O comando acima pressupõe que você nomeou sua chave id_rsa. Ele anexará a chave pública ao final do arquivo chaves_autorizadas arquivo.

O conteúdo do id_rsa O arquivo de chave privada precisa ser copiado para o painel do CircleCI mais adiante neste guia.

Antes de projetar o fluxo de trabalho, precisamos clonar o projeto do GitHub em nosso servidor. Veja o exemplo a seguir:

É importante lembrar onde você clonou o projeto, pois ele será usado pelo script de implantação em nosso fluxo de trabalho. O CircleCI fará o SSH em nosso servidor e executará um git pull dentro do diretório do projeto.

Projetando as etapas do fluxo de trabalho

Antes de o projeto ser coletado pelo CircleCI, ele precisa ser alterado um pouco no GitHub. O CircleCI, como muitas outras soluções de CI/CD, exige que um arquivo de configuração seja colocado no projeto.

Supondo que você esteja olhando para o projeto de loja de perfil de usuárioPrecisamos criar um diretório chamado .circleci na raiz com um arquivo chamado config.yml.

Abra este .circleci/config.yml e adicione o seguinte:

Então, o que está acontecendo na configuração acima?

Estamos dizendo que queremos criar um contêiner do Docker executando o Node 7.x para realizar nossos testes e outros testes de fluxo de trabalho. Com relação às etapas, primeiro é feito o check-out do projeto do GitHub no contêiner. Em seguida, instalamos todas as dependências no projeto, pois elas não foram confirmadas no GitHub. A package.json do nosso projeto tem um script chamado teste que, em teoria, executaria nossos testes. Nosso projeto não tem nenhum teste real.

Desde que as três etapas anteriores tenham sido bem-sucedidas, será feita uma implantação. Esse comando fará o SSH em nosso servidor, navegará até o diretório de nossa escolha, fará alterações no projeto, instalará quaisquer dependências potencialmente novas e iniciará o para sempre processo.

Podemos implantar nosso projeto por meio do SSH porque, neste ponto, temos certeza de que as etapas locais anteriores foram bem-sucedidas no contêiner.

Faça o commit das alterações do projeto no GitHub para que possamos configurar o projeto no painel do CircleCI.

Configuração do projeto no painel de controle do CircleCI

Algumas coisas precisam ser configuradas no CircleCI para que o pipeline de CI/CD funcione para o projeto. Em seu Painel de controle do CircleCI encontre o projeto do GitHub que você deseja gerenciar. Se você tiver vinculado o GitHub ao CircleCI, há uma boa chance de que ele já apareça devido à adição do arquivo de configuração.

Nas configurações do projeto, localize a opção Permissões de SSH seção.

CircleCI SSH Permissions Example

Copie a chave privada criada anteriormente para esta seção. Isso permitirá que o CircleCI se conecte ao seu servidor para implantação. Lembre-se, a partir de agora, a chave SSH deve ser sem senha.

Nesse ponto, todos os futuros envios para o GitHub devem resultar no início do pipeline. Se tudo for aprovado, você poderá acessar as alterações à medida que elas ocorrem no seu servidor que executa o Node.js.

Onde está o benefício do NoSQL?

Digamos que suas alterações de código envolvam alterações no modelo de dados. Se você estivesse usando um RDBMS, provavelmente teria que enviar um script SQL com um monte de ALTER toda vez que você faz uma alteração. Embora seja possível, isso definitivamente não é conveniente.

Vamos ser um pouco mais específicos aqui.

Digamos que eu quisesse incluir informações de endereço em cada um dos meus perfis de usuário, algo que não estava sendo coletado anteriormente. Com o NoSQL e um modelo JSON flexível, eu poderia simplesmente adicionar as informações aos meus objetos JavaScript que estão sendo salvos e concluir o salvamento. Não há necessidade de criar nenhum script de migração.

Conclusão

Você acabou de ver como usar o CircleCI para a implantação contínua de um aplicativo da Web Node.js. Usamos um armazenamento de perfil de usuário aplicativo de um exemplo anteriore o implantou em um servidor via SSH sempre que novas alterações eram enviadas para o GitHub.

Há muitas soluções de integração e implantação contínuas disponíveis. Se quiser hospedar sua própria solução, você pode conferir uma variação deste tutorial que usa o Jenkins chamado, Criar um pipeline de implantação contínua com o Node.js e o Jenkins.

Autor

Postado por Nic Raboy, defensor dos desenvolvedores, Couchbase

Nic Raboy é um defensor das modernas tecnologias de desenvolvimento móvel e da Web. Ele tem experiência em Java, JavaScript, Golang e uma variedade de estruturas, como Angular, NativeScript e Apache Cordova. Nic escreve sobre suas experiências de desenvolvimento relacionadas a tornar o desenvolvimento móvel e da Web mais fácil de entender.

Um comentário

Deixar uma resposta