Se você e sua equipe têm muitos scripts do PowerShell espalhados por aí, 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 programada 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 agendavam 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 um drive compartilhado. Era um pesadelo!
Acredite ou não, na maior parte, este 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.
Compreensivelmente, era fácil para todos ficarem satisfeitos com esse status quo. Melhorar esse sistema não estava no topo da lista de prioridades.
Mas esse sistema não estava livre de falhas. Embora atendesse às necessidades de alguns engenheiros, não era capaz de escalar ou ser facilmente mantido para sempre. Esse sistema também não permitia flexibilidade nas tarefas agendadas. Essa rigidez levou a dez versões do mesmo script (com pequenas edições) sendo agendadas.
Entre o Jenkins.
Por que Jenkins?
De todas as 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:
Maior Controle
Uma vez que você tenha todos os seus scripts do PowerShell em um só lugar, não há dúvida sobre em qual servidor um script é executado. Agora você pode esquecer aquele script que você escreveu há dois anos 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 grandes em fragmentos modulares menores que podem ser reutilizados em vários trabalhos.
Agendamento Fácil
Com o Jenkins, você tem um único lugar central com suporte completo para agendar a execução de scripts do PowerShell. Você pode agendar diferentes scripts para serem executados em diferentes momentos com diferentes parâmetros, ter uma interface web GUI 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 desses é poder integrar com ferramentas como o Jenkins. O Jenkins pode se integrar ao Git e a outros produtos de controle de versão para puxar automaticamente a versão mais recente.
Registro Consolidado
Quando os scripts do PowerShell estão espalhados por toda parte e criando logs, os logs podem estar espalhados 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 procurar em algum arquivo de log que sua tarefa agendada fez.
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.
- A running Jenkins server
- O Git instalado no seu servidor Jenkins ou agente de construção
- A Git repo set up containing your PowerShell scripts (Be sure you know the repo URL)
- Plugin Git do Jenkins
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:
- Clique em Gerenciar Jenkins e depois em Gerenciar Plugins.
- Clique na guia Disponível.
- No lado direito da tela, digite powershell na caixa Filtrar. Você deve então ver o plugin do PowerShell aparecer conforme mostrado abaixo.

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 passo de compilação do Windows PowerShell quando você fornecer o script do PowerShell para ser executado um pouco mais tarde.
Criando um Job
O Jenkins possui o conceito de jobs. Um job é um conjunto de instruções que você pode fornecer ao Jenkins para saber quais scripts executar, cronogramas a serem seguidos, etc. Você criará um job nesta seção que executará um script do PowerShell. Para fazer isso, você configurará um job que clonará um repositório Git no Jenkins.
- Ao fazer login no Jenkins, clique em New Item no canto superior direito.

2. Em seguida, você verá a tela mostrada abaixo. Selecione Projeto Freestyle. Este tipo de job permitirá maior flexibilidade.

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

4. Agora você estará na tela de Configuração do Job. Você verá uma seção chamada Controle de Código Fonte como mostrado abaixo. Isso permite que você especifique qual repositório Git o Jenkins clonará para disponibilizar ao job. Para esta demonstração, escolha Git.

5. Quando você clicar em Git, 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.

Abaixo está a explicação 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://NOMESERVIDOR: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, você pode criar uma clicando em Adicionar.
- Nome – Isso pode ser deixado em branco.
- Refspec – Isso pode ser deixado em branco.
- Especificador de Ramo – Isso permite que você escolha em qual ramo você deseja que este trabalho seja executado. Por padrão, ele irá puxar o ramo master, mas se você tiver outro ramo de teste que deseja usar, você pode especificá-lo 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 do ramo master do repositório Git chamado Hello World.ps1. Dentro deste script, você tem uma única linha:
Você gostaria de executar este script quando o trabalho rodar. Para fazer isso, você terá que criar uma etapa de compilação.
O Jenkins permite que você especifique numerosas 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:
- Clique no botão Adicionar etapa de compilação e escolha Windows PowerShell.

Dentro da caixa de Comando, dot source o script PowerShell localizado no seu repositório Git como 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).

Agora clique em Salvar para salvar o trabalho.
Agora você deve ter um trabalho configurado para invocar um script PowerShell de um repositório Git!
Executando o Script PowerShell
Agora que você criou um trabalho, execute-o e dê uma olhada na saída.
- Garanta que você esteja 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/.
- Na tela principal do trabalho, clique em Construir Agora no lado esquerdo, como mostrado abaixo.

Clicar em Construir Agora lança imediatamente uma construção do trabalho atual. Para trabalhos que são complexos e levam um 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, no entanto, o trabalho será executado praticamente instantaneamente.
Para ver os resultados, clique no visto verde ao lado da construção.

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

Agendas e Desencadeadores
Atualmente, você tem um trabalho que pode ser executado sempre que necessário e que gera 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.

Essas são suas opções para fazer um trabalho ser executado sem exigir que você clique em Build Now no Jenkins.
Criando um Agendamento
Há algumas opções diferentes para criar gatilhos. Neste exemplo, vamos mantê-lo simples.
- Selecione Build periodicamente. Este gatilho permite que você agende trabalhos usando uma sintaxe de agendamento semelhante ao cron.
2. Configure o trabalho para ser executado às 7h30 de segunda, quarta e sexta-feira, como mostrado abaixo.

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

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