Tutorial: Implantar seu aplicativo em máquinas virtuais do Linux no Azure usando o Jenkins e o Azure DevOps ServicesTutorial: Deploy your app to Linux virtual machines in Azure with using Jenkins and Azure DevOps Services

A integração contínua (CI) e a implementação contínua (CD) formam um pipeline através do qual pode criar, lançar e implementar o seu código.Continuous integration (CI) and continuous deployment (CD) form a pipeline by which you can build, release, and deploy your code. Os Serviços de DevOps do Azure fornecem um conjunto completo com todas a funcionalidades das ferramentas de automatização de CI/CD para implementação no Azure.Azure DevOps Services provides a complete, fully featured set of CI/CD automation tools for deployment to Azure. Jenkins é uma ferramenta popular de terceiros baseada no servidor de CI/CD que também fornece a automatização de CI/CD.Jenkins is a popular third-party CI/CD server-based tool that also provides CI/CD automation. Pode utilizar os Serviços de DevOps do Azure e o Jenkins em conjunto para personalizar a forma como fornece o serviço ou a aplicação na cloud.You can use Azure DevOps Services and Jenkins together to customize how you deliver your cloud app or service.

Neste tutorial, vai utilizar o Jenkins para criar uma aplicação Web Node.js.In this tutorial, you use Jenkins to build a Node.js web app. Em seguida, utilize o Azure DevOps para implementá-laYou then use Azure DevOps to deploy it

num grupo de implementação que contém máquinas virtuais do Linux (VMs).to a deployment group that contains Linux virtual machines (VMs). Saiba como:You learn how to:

  • Obter a aplicação de exemplo.Get the sample app.
  • Configurar os plug-ins Jenkins.Configure Jenkins plug-ins.
  • Configurar um projeto Jenkins Freestyle para Node.js.Configure a Jenkins Freestyle project for Node.js.
  • Configurar o Jenkins para integração nos Serviços de DevOps do Azure.Configure Jenkins for Azure DevOps Services integration.
  • Criar um ponto final de serviço Jenkins.Create a Jenkins service endpoint.
  • Criar um grupo de implementação para as máquinas virtuais do Azure.Create a deployment group for the Azure virtual machines.
  • Crie um pipeline de liberação de Azure Pipelines.Create an Azure Pipelines release pipeline.
  • Executar implementações manuais e acionadas por CI.Execute manual and CI-triggered deployments.

Antes de começarBefore you begin

Obter a aplicação de exemploGet the sample app

Precisa de uma aplicação para a implementação, armazenada num repositório de Git.You need an app to deploy, stored in a Git repository. Para este tutorial, recomendamos que utilize esta aplicação de exemplo disponível no GitHub.For this tutorial, we recommend that you use this sample app available from GitHub. Este tutorial contém um script de exemplo que serve para instalar o Node.js e uma aplicação.This tutorial contains a sample script that's used for installing Node.js and an application. Se pretender trabalhar com o seu próprio repositório, deve configurar um exemplo semelhante.If you want to work with your own repository, you should configure a similar sample.

Crie uma bifurcação desta aplicação e tome nota da localização (URL) para utilizar em passos posteriores deste tutorial.Create a fork of this app and take note of the location (URL) for use in later steps of this tutorial. Para obter mais informações, veja Fork a repo (Bifurcar um repositório).For more information, see Fork a repo.

Nota

A aplicação foi criada através do Yeoman eThe app was built through Yeoman. utiliza o Express, o bower e o grunt.It uses Express, bower, and grunt. Possui também alguns pacotes npm como dependências.And it has some npm packages as dependencies. O exemplo contém também um script que configura o Nginx e implementa a aplicação,The sample also contains a script that sets up Nginx and deploys the app. que é executada nas máquinas virtuais.It is executed on the virtual machines. Especificamente, o script:Specifically, the script:

  1. Instala o Node, o Nginx e o PM2.Installs Node, Nginx, and PM2.
  2. Configura o Nginx e o PM2.Configures Nginx and PM2.
  3. Inicia a aplicação Node.Starts the Node app.

Configurar os plug-ins JenkinsConfigure Jenkins plug-ins

Primeiro, você deve configurar dois plug-ins Jenkins: NodeJS e implantação contínua do vs Team Services.First, you must configure two Jenkins plug-ins: NodeJS and VS Team Services Continuous Deployment.

  1. Abra a sua conta do Jenkins e selecione Gerir Jenkins.Open your Jenkins account and select Manage Jenkins.
  2. Na página Gerir Jenkins, selecione Gerir Plug-ins.On the Manage Jenkins page, select Manage Plugins.
  3. Filtre a lista para localizar o plug-in NodeJS e selecione a opção Instalar sem reiniciar.Filter the list to locate the NodeJS plug-in, and select the Install without restart option. Adicionar o plug-in NodeJS ao JenkinsAdding the NodeJS plugin to Jenkins
  4. Filtre a lista para localizar o plug-in Implementação Contínua do VS Team Services e selecione a opção Instalar sem reiniciar.Filter the list to find the VS Team Services Continuous Deployment plug-in and select the Install without restart option.
  5. Aceda ao dashboard do Jenkins e selecione Gerir Jenkins.Go back to the Jenkins dashboard and select Manage Jenkins.
  6. Selecione Configuração da Ferramenta Global.Select Global Tool Configuration. Localize o NodeJS e selecione Instalações do NodeJS.Find NodeJS and select NodeJS installations.
  7. Selecione a opção Instalar automaticamente e, em seguida, introduza um valor de Nome.Select the Install automatically option, and then enter a Name value.
  8. Selecione Guardar.Select Save.

Configurar um projeto Jenkins Freestyle para Node.jsConfigure a Jenkins Freestyle project for Node.js

  1. Selecione Novo Item.Select New Item. Introduza um nome de item.Enter an item name.
  2. Selecione Projeto Freestyle.Select Freestyle project. Selecione OK.Select OK.
  3. No separador Gestão do Código Fonte, selecione Git e introduza os detalhes do repositório e o ramo que contém o código da aplicação.On the Source Code Management tab, select Git and enter the details of the repository and the branch that contain your app code.
    Adicionar um repositório à compilaçãoAdd a repo to your build
  4. No separador Acionadores da Compilação, selecione Consultar SCM e introduza a agenda H/03 * * * * para consultar o repositório de Git a cada três minutos para ver se sofreu alterações.On the Build Triggers tab, select Poll SCM and enter the schedule H/03 * * * * to poll the Git repository for changes every three minutes.
  5. No separador Ambiente da Compilação, selecione Fornecer CAMINHO da posição armázem/pasta de Node & npm e selecione o valor Instalação do NodeJS.On the Build Environment tab, select Provide Node & npm bin/ folder PATH and select the NodeJS Installation value. Defina o ficheiro npmrc para utilizar a predefinição do sistema.Leave npmrc file set to use system default.
  6. No separador Compilação, selecione Executar shell e introduza o comando npm install para confirmar que todas as dependências são atualizadas.On the Build tab, select Execute shell and enter the command npm install to ensure that all dependencies are updated.

Configurar o Jenkins para integração nos Serviços de DevOps do AzureConfigure Jenkins for Azure DevOps Services integration

Nota

Verifique se o token de acesso pessoal (PAT) que utiliza para os seguintes passos contém a permissão Versão (ler, escrever, executar e gerir) nos Serviços de DevOps do Azure.Ensure that the personal access token (PAT) you use for the following steps contains the Release (read, write, execute and manage) permission in Azure DevOps Services.

  1. Crie um PAT na sua organização de Serviços de DevOps do Azure, se ainda não tiver um.Create a PAT in your Azure DevOps Services organization if you don't already have one. O Jenkins precisa destas informações para aceder à sua organização de Serviços de DevOps do Azure.Jenkins requires this information to access your Azure DevOps Services organization. Confirme que armazena as informações do token para os próximos passos nesta secção.Be sure to store the token information for upcoming steps in this section.

    Para saber como gerar um token, leia How do I create a personal access token for Azure DevOps Services? (Como criar um token de acesso pessoal para os Azure DevOps Services?).To learn how to generate a token, read How do I create a personal access token for Azure DevOps Services?.

  2. No separador Ações Pós-compilação, selecione Adicionar ação pós-compilação.In the Post-build Actions tab, select Add post-build action. Selecione Arquivar os artefactos.Select Archive the artifacts.

  3. Em Ficheiros a arquivar, introduza **/* para incluir todos os ficheiros.For Files to archive, enter **/* to include all files.

  4. Para criar outra ação, selecione Adicionar ação pós-compilação.To create another action, select Add post-build action.

  5. Selecione Acionar versão no TFS/Team Services.Select Trigger release in TFS/Team Services. Introduza o URI para a sua organização de Serviços de DevOps do Azure, tal como https://{your-organization-name}.visualstudio.com.Enter the URI for your Azure DevOps Services organization, such as https://{your-organization-name}.visualstudio.com.

  6. Introduza o nome do Projeto.Enter the Project name.

  7. Escolha um nome para o pipeline de versão.Choose a name for the release pipeline. (Vai criar este pipeline de versão mais tarde nos Serviços de DevOps do Azure.)(You create this release pipeline later in Azure DevOps Services.)

  8. Escolha as credenciais para ligar ao seu ambiente dos Serviços de DevOps do Azure ou do Team Foundation Server:Choose credentials to connect to your Azure DevOps Services or Team Foundation Server environment:

    • Deixe o Nome de utilizador em branco se estiver a utilizar os Serviços de DevOps do Azure.Leave Username blank if you are using Azure DevOps Services.
    • Introduza um nome de utilizador e uma palavra-passe, se estiver com uma versão no local do Team Foundation Server.Enter a username and password if you are using an on-premises version of Team Foundation Server.
      Configurar ações pós-compilação do Jenkins
  9. Guarde o projeto Jenkins.Save the Jenkins project.

Criar um ponto final de serviço JenkinsCreate a Jenkins service endpoint

Um ponto final de serviço permite aos Serviços de DevOps do Azure ligar ao Jenkins.A service endpoint allows Azure DevOps Services to connect to Jenkins.

  1. Abra a página Serviços nos Serviços de DevOps do Azure, abra a lista Novo Ponto Final de Serviço e selecione Jenkins.Open the Services page in Azure DevOps Services, open the New Service Endpoint list, and select Jenkins. Adicionar um ponto final JenkinsAdd a Jenkins endpoint
  2. Introduza um nome para a ligação.Enter a name for the connection.
  3. Introduza o URL do servidor Jenkins e selecione a opção Aceitar certificados SSL não fidedignos.Enter the URL of your Jenkins server, and select the Accept untrusted SSL certificates option. Um exemplo de URL é http://{OseuURLJenkins}.westcentralus.cloudapp.azure.com.An example URL is http://{YourJenkinsURL}.westcentralus.cloudapp.azure.com.
  4. Introduza o nome de utilizador e a palavra-passe da sua conta Jenkins.Enter the username and password for your Jenkins account.
  5. Selecione Verificar ligação para verificar se as informações estão corretas.Select Verify connection to check that the information is correct.
  6. Selecione OK para criar o ponto final de serviço.Select OK to create the service endpoint.

Criar um grupo de implementação para as máquinas virtuais do AzureCreate a deployment group for Azure virtual machines

Precisa de um grupo de implementação para registar o agente dos Serviços de DevOps do Azure para que o pipeline de versão possa ser implementado na máquina virtual.You need a deployment group to register the Azure DevOps Services agent so the release pipeline can be deployed to your virtual machine. Os grupos de implementação facilitam a definição de grupos de computadores de destino lógicos para a implementação e para instalar o agente necessário em cada computador.Deployment groups make it easy to define logical groups of target machines for deployment, and to install the required agent on each machine.

Nota

No procedimento seguinte, instale os pré-requisitos e não execute o script com privilégios sudo.In the following procedure, be sure to install the prerequisites and don't run the script with sudo privileges.

  1. Abra o separador Versões do hub Compilação & Versão, abra os Grupos de implementação e selecione + Novo.Open the Releases tab of the Build & Release hub, open Deployment groups, and select + New.
  2. Introduza um nome para o grupo de implementação e uma descrição opcional.Enter a name for the deployment group, and an optional description. Em seguida, selecione Criar.Then select Create.
  3. Escolha o sistema operativo da máquina virtual de destino da implementação.Choose the operating system for your deployment target virtual machine. Por exemplo, selecione Ubuntu 16.04 + .For example, select Ubuntu 16.04+.
  4. Selecione Utilizar um token de acesso pessoal no script para autenticação.Select Use a personal access token in the script for authentication.
  5. Selecione a ligação Pré-requisitos do sistema.Select the System prerequisites link. Instale os pré-requisitos do sistema operativo.Install the prerequisites for your operating system.
  6. Selecione Copiar script para área de transferência para copiar o script.Select Copy script to clipboard to copy the script.
  7. Inicie sessão na máquina virtual de destino da implementação e execute o script.Log in to your deployment target virtual machine and run the script. Não execute o script com privilégios sudo.Don't run the script with sudo privileges.
  8. Após a instalação, são-lhe solicitadas etiquetas do grupo de implementação.After the installation, you are prompted for deployment group tags. Aceite as predefinições.Accept the defaults.
  9. Nos Serviços de DevOps do Azure, procure a máquina virtual recém-registada em Destinos, em Grupos de Implementação.In Azure DevOps Services, check for your newly registered virtual machine in Targets under Deployment Groups.

Criar um pipeline de liberação de Azure PipelinesCreate an Azure Pipelines release pipeline

Um pipeline de versão especifica o processo que os Azure Pipelines utilizam para implementar a aplicação.A release pipeline specifies the process that Azure Pipelines uses to deploy the app. Neste exemplo, executa um script de shell.In this example, you execute a shell script.

Para criar o pipeline de versão no Azure Pipelines:To create the release pipeline in Azure Pipelines:

  1. Abra o separador Versões do hub Compilação & Versão e selecione Criar pipeline de versão.Open the Releases tab of the Build & Release hub, and select Create release pipeline.
  2. Selecione o modelo Vazio ao optar por começar com um Processo vazio.Select the Empty template by choosing to start with an Empty process.
  3. Na secção Artefactos, selecione + Adicionar Artefactos e escolha Jenkins como Tipo de origem.In the Artifacts section, select + Add Artifact and choose Jenkins for Source type. Selecione a ligação de ponto final de serviço Jenkins.Select your Jenkins service endpoint connection. Em seguida, selecione a tarefa de origem Jenkins e selecione Adicionar.Then select the Jenkins source job and select Add.
  4. Selecione as reticências junto a Ambiente 1.Select the ellipsis next to Environment 1. Selecione Adicionar fase do grupo de implementação.Select Add deployment group phase.
  5. Escolha o grupo de implementação.Choose your deployment group.
  6. Selecione + para adicionar uma tarefa à Fase do grupo de implementação.Select + to add a task to Deployment group phase.
  7. Selecione a tarefa Script de Shell e, em seguida, Adicionar.Select the Shell Script task and select Add. A tarefa Script de Shell fornece a configuração para que um script seja executado em cada servidor para instalar o Node.js e iniciar a aplicação.The Shell Script task provides the configuration for a script to run on each server in order to install Node.js and start the app.
  8. Em Caminho do Script, introduza $(System.DefaultWorkingDirectory)/Fabrikam-Node/deployscript.sh.For Script Path, enter $(System.DefaultWorkingDirectory)/Fabrikam-Node/deployscript.sh.
  9. Selecione Avançado e, em seguida, ative Especificar Diretório de Trabalho.Select Advanced, and then enable Specify Working Directory.
  10. Em Diretório de Trabalho, introduza $(System.DefaultWorkingDirectory)/Fabrikam-Node.For Working Directory, enter $(System.DefaultWorkingDirectory)/Fabrikam-Node.
  11. Edite o nome do pipeline de versão para o nome que especificou no separador Ações Pós-compilação da compilação no Jenkins.Edit the name of the release pipeline to the name that you specified on the Post-build Actions tab of the build in Jenkins. O Jenkins precisa que este nome tenha a capacidade de acionar uma nova versão quando os artefactos de origem são adaptados.Jenkins requires this name to be able to trigger a new release when the source artifacts are updated.
  12. Selecione Guardar e OK para guardar o pipeline de versão.Select Save and select OK to save the release pipeline.

Executar implementações manuais e acionadas por CIExecute manual and CI-triggered deployments

  1. Selecione + Versão e Criar Versão.Select + Release and select Create Release.
  2. Selecione a compilação que concluiu na lista pendente realçada e selecione Fila.Select the build that you completed in the highlighted drop-down list, and select Queue.
  3. Escolha a ligação da versão na mensagem pop-up.Choose the release link in the pop-up message. Por exemplo: "Versão de lançamento-1 foi criada".For example: "Release Release-1 has been created."
  4. Abra o separador Registos para ver o resultado da consola de versão.Open the Logs tab to watch the release console output.
  5. No browser, abra o URL de um dos servidores que adicionou ao grupo de implementação.In your browser, open the URL of one of the servers that you added to your deployment group. Por exemplo, introduza http://{o-seu-endereço-ip-do-servidor} .For example, enter http://{your-server-ip-address}.
  6. Aceda ao repositório de origem do Git e modifique os conteúdos do cabeçalho h1 no ficheiro app/views/index.jade com algum texto alterado.Go to the source Git repository and modify the contents of the h1 heading in the file app/views/index.jade with some changed text.
  7. Consolide as alterações.Commit your change.
  8. Após alguns minutos, verá uma nova versão criada na página Versões do Azure DevOps.After a few minutes, you will see a new release created on the Releases page of Azure DevOps. Abra a versão para ver a implementação a decorrer.Open the release to see the deployment taking place. Parabéns!Congratulations!

Resolver problemas nos plug-ins do JenkinsTroubleshooting the Jenkins plugin

Se se deparar com erros nos plug-ins do Jenkins, comunique os problemas com os componentes específicos no Jenkins JIRA.If you encounter any bugs with the Jenkins plugins, file an issue in the Jenkins JIRA for the specific component.

Passos seguintesNext steps

Neste tutorial, automatizou a implementação de uma aplicação no Azure com o Jenkins para a compilação e com os Serviços de DevOps do Azure para a versão.In this tutorial, you automated the deployment of an app to Azure by using Jenkins for build and Azure DevOps Services for release. Aprendeu a:You learned how to:

  • Criar a aplicação no Jenkins.Build your app in Jenkins.
  • Configurar o Jenkins para integração nos Serviços de DevOps do Azure.Configure Jenkins for Azure DevOps Services integration.
  • Criar um grupo de implementação para as máquinas virtuais do Azure.Create a deployment group for the Azure virtual machines.
  • Criar um pipeline de versão para configurar as VMs e implementar a aplicação.Create a release pipeline that configures the VMs and deploys the app.

Para saber mais sobre como implementar uma pilha LAMP (Linux, Apache, MySQL e PHP), avance para o próximo tutorial.To learn about how to deploy a LAMP (Linux, Apache, MySQL, and PHP) stack, advance to the next tutorial.