Integrar Git & Jenkins para Scripts PowerShell Agendados

Se você e sua equipe têm um número excessivo de scripts do PowerShell espalhados, rodando sabe-se lá onde, este artigo é para você. Neste artigo, você aprenderá como configurar o popular servidor de automação Jenkins para gerenciar e executar scripts do PowerShell!

Você aprenderá como integrar o controle de versão do Git com o Jenkins para, em seguida, configurar e agendar scripts do PowerShell para serem executados em horários predefinidos.

Dispersão de Scripts do PowerShell: Isso Não Está Funcionando

Como engenheiro de automação, um dos principais desafios que minha equipe e eu tivemos que superar foi a dispersão agendada de scripts do PowerShell. Encontrei dezenas de scripts do PowerShell sendo agendados e executados de muitos lugares diferentes.

Cada engenheiro, ou equipe de engenheiros, tinha seu próprio servidor onde agendava as coisas. Cada tipo de script era executado no servidor que rodava esse serviço.

  • A domain controller ran all of the Active Directory scripts.
  • Um servidor Exchange executava todos os scripts do Exchange.
  • A member server ran all networking team scripts.
  • A member server ran all of the database scripts for the DBAs.
  • A member server ran all of the security team’s scripts.
  • …e assim por diante

Todo código que estava sendo executado em qualquer um desses servidores era salvo como um arquivo de script em um diretório temporário naquele servidor ou como uma pasta de script em uma unidade compartilhada. Era um pesadelo!

Acredite ou não, em grande parte, esse sistema funcionava bem. Os scripts eram executados conforme desejado e tínhamos backups em todos os servidores de qualquer maneira. Nenhum código foi perdido.

Era compreensivelmente fácil para todos ficarem satisfeitos com esse status quo. Melhorar esse sistema não era uma prioridade elevada.

Mas esse sistema não estava isento de falhas. Embora atendesse às necessidades de alguns engenheiros, não conseguia escalar ou ser facilmente mantido para sempre. Esse sistema também não permitia flexibilidade nas tarefas agendadas. Essa rigidez resultou em dez versões do mesmo script (com pequenas edições) sendo agendadas.

Entre em cena o Jenkins.

Por que o Jenkins?

Das várias opções que você tem para agendar e executar scripts do PowerShell, por que escolher o Jenkins? Usar um servidor Jenkins para executar scripts do PowerShell oferece muitos benefícios. Aqui estão alguns destaques:

Controle Melhorado

Uma vez que você tenha todos os seus scripts do PowerShell em um só lugar, não haverá dúvida sobre em qual servidor um script está sendo executado. Agora você pode esquecer aquele script que você escreveu dois anos atrás e que agora está desatualizado e bloqueando alguma conta de serviço.

Você pode organizar scripts em uma estrutura de pastas facilmente navegável, controlar exatamente onde todos os seus scripts são executados e até mesmo usar pipelines para dividir scripts monolíticos em partes menores e modulares que podem ser reutilizadas em vários trabalhos.

Agendamento Fácil

Com o Jenkins, você tem um único local central com suporte completo para agendar a execução de scripts do PowerShell. Você pode agendar diferentes scripts para serem executados em horários diferentes com parâmetros diferentes, ter uma GUI web agradável para gerenciar agendamentos e muito mais.

Controle de Versão

Ter scripts do PowerShell sob algum tipo de controle de versão resolve muitos problemas diferentes. Um deles é poder integrar com ferramentas como o Jenkins. O Jenkins pode se integrar com o Git e outros produtos de controle de versão para puxar automaticamente a última versão.

Registro Consolidado

Quando os scripts do PowerShell estão espalhados por toda parte e criando logs, os logs podem estar dispersos por toda parte. Com o Jenkins, você obtém um excelente registro em uma janela de saída legível em um site, em vez de ter que vasculhar algum arquivo de log que sua tarefa agendada criou.

Pré-requisitos/Requisitos

Este artigo será um guia sobre como configurar o Jenkins para executar scripts do PowerShell. Como tal, você vai precisar de algumas coisas para acompanhar.

Instalando o Plugin do PowerShell

Para executar scripts do PowerShell com o Jenkins, você terá que instalar o plugin do PowerShell. Para fazer isso, na página principal:

  1. Clique em Gerenciar Jenkins e depois em Gerenciar Plugins.
  2. Clique na aba Disponíveis.
  3. No lado direito da tela, digite powershell na caixa de Filtrar. Você deve então ver o plugin do PowerShell aparecer como mostrado abaixo.
Looking for the PowerShell extension

4.  Selecione a caixa de seleção Instalar e clique em Instalar sem reiniciar.

5. A instalação do plugin PowerShell criará uma opção de etapa de compilação do Windows PowerShell quando você fornecer o script do PowerShell para ser executado um pouco mais tarde.

Criando um trabalho

O Jenkins possui um conceito de trabalhos. Um trabalho é um conjunto de instruções que você pode fornecer ao Jenkins para saber quais scripts executar, cronogramas a seguir, etc. Você criará um trabalho nesta seção que executará um script do PowerShell. Para fazer isso, você configurará um trabalho que clonará um repositório Git no Jenkins.

  1. Depois de conectado ao Jenkins, clique em Novo Item no canto superior direito.
New Item menu option

2. Em seguida, você será apresentado à tela mostrada abaixo. Selecione Projeto Freestyle. Esse tipo de trabalho permitirá a maior flexibilidade.

Creating a new Jenkins project

3. Dê ao trabalho o nome Hello World e clique em OK.

Using Hello World for the project name

4. Agora você deve estar na tela de Configuração do Trabalho. Você deve ver uma seção chamada Gerenciamento de Código-fonte como mostrado abaixo. Isso permite que você especifique qual repositório Git o Jenkins clonará para disponibilizar para o trabalho. Para esta demonstração, escolha Git.

Source Code Management option

5. Quando você clicar em Git, você deverá ver uma opção pedindo as informações do seu repositório Git. Este é o repositório Git que contém seus scripts do PowerShell.

Setting the Git repo

Abaixo está uma quebra de cada campo:

  • URL do Repositório – O URL apontando para o repositório Git. No TFS, por exemplo, o URL pode parecer com isso: *http://NOMEDOSERVIDOR:8080/tfs//Messaging/_git/Dynamic Distro List*
  • Credenciais – Um nome de usuário/senha que tenha acesso ao repositório. Se você ainda não tiver uma credencial configurada, pode criar uma clicando em Adicionar.
  • Nome – Isso pode ser deixado em branco.
  • Refspec – Isso pode ser deixado em branco.
  • Especificador de Ramificação – Isso permite que você escolha em qual ramificação deseja que este trabalho seja usado. Por padrão, ele irá puxar a ramificação master, mas se você tiver outra ramificação de teste que deseja usar, pode especificá-la aqui.

Você também pode clonar mais de um repositório para um trabalho usando o botão Adicionar Repositório acima. Isso é útil se você tiver módulos ou outras dependências que precisa em um repositório separado.

Adicionando a Etapa de Compilação do Windows PowerShell

Talvez você tenha um script na raiz da ramificação master do repositório Git chamado Hello World.ps1. Dentro deste script, você tem uma única linha:

Write-Host "Hello World, I'm a Jenkins build!"

Você gostaria de executar este script quando o trabalho for executado. Para fazer isso, você terá que criar uma etapa de compilação.

O Jenkins permite que você especifique várias etapas de compilação por trabalho. Para seus propósitos, você precisa adicionar uma etapa de compilação Windows PowerShell. Para fazer isso, na tela de configuração do trabalho:

  1. Clique no botão Adicionar etapa de compilação e escolha Windows PowerShell.
Windows PowerShell Build step

2. Dentro da caixa de Comando, fonte de ponto o script do PowerShell localizado no seu repositório Git conforme mostrado abaixo. Você pode ver que estamos usando uma variável de ambiente do PowerShell chamada WORKSPACE. Esta variável representa o diretório de trabalho atual (a pasta raiz do repositório Git).

Running the Hello World.ps1 script

3. Agora clique em Salvar para salvar o trabalho.

Agora você deve ter um trabalho configurado para invocar um script do PowerShell de um repositório Git!

Executando o Script do PowerShell

Agora que você criou um trabalho, execute-o e dê uma olhada na saída.

  1. Assegure-se de estar na tela principal do trabalho. Se você usou o nome Hello World para este trabalho, a URL padrão será http://localhost:8080/job/Hello world/.
  2. Na tela principal do trabalho, clique em Construir Agora no lado esquerdo, conforme mostrado abaixo.
Running the build

Clicando em Construir Agora lança imediatamente uma construção do trabalho atual. Para trabalhos que são complexos e levam algum tempo para serem executados, você terá a capacidade de clicar na construção e ver a saída em tempo real enquanto é executada. Neste caso, porém, o trabalho será executado praticamente instantaneamente.

4. Para ver os resultados, clique no check verde ao lado da construção.

Inspecting build results

Se tudo correu conforme o planejado, você verá algo como o seguinte na sua saída:

Build log results

Horários e Acionadores

Agora você tem um trabalho que pode ser executado sempre que necessário e que produz a mensagem Hello World. Mas um dos principais pontos de venda do Jenkins é substituir tarefas agendadas. Não queremos ter que entrar e executá-lo manualmente. Se você reabrir esse trabalho, verá uma seção chamada Acionadores de Compilação.

Available build triggers

Essas são suas opções para fazer um trabalho ser executado sem precisar clicar em Compilar Agora no Jenkins.

Criando um Agendamento

Há algumas opções diferentes para criar acionadores. Neste exemplo, vamos mantê-lo simples.

  1. Selecione Compilar periodicamente. Esse acionador permite agendar trabalhos usando uma sintaxe de agendamento semelhante a cron.

2. Configure o trabalho para ser executado às 7h30 nas segundas, quartas e sextas, conforme mostrado abaixo.

Setting schedule to 7:30AM MWF

3.  Salve as alterações e aguarde.

Quando a data e hora atribuídas ocorrerem, você verá o script sendo executado conforme desejado em Histórico de Compilação.

Build running on schedule

Agora você tem um script PowerShell agendado no Jenkins que será executado em um intervalo recorrente.

Leitura Adicional

Source:
https://adamtheautomator.com/powershell-jenkins/