Se voce é um usuário Linux, deve estar familiarizado com a instalação de pacotes. Quem nunca fez um apt-get install ou yum install ? Bom, isso também existe no mundo do Windows! Caso você não seja um usuário Linux, continue lendo, e logo entenderá para quê isso serve.

A idéia desse post é mostrar que, utilizando uma ferramenta de gerenciamento de pacotes, podemos guardar nossos artefatos gerados no processo de build de nossos produtos, ao invés guardar instaladores, dll's e nos preocuparmos com suas dependencias, podemos utilizar uma ferramente de gerenciamento de pacotes para resolver isso.

Vou mostrar como fazer isso em ambiente windows, utilizando o gerenciador de pacotes Chocolatey .

A gente usa por aqui!

Aqui na TecnoSpeed, utilizamos uma biblioteca para nossos produtos chamada de gov , que é distribuida em um binário no formato de ActiveX, ou seja, um arquivo com extensão .ocx. Cada produto utiliza uma determinada versão da gov.  

Ao gerar o pacote com o instalador, necessitamos pegar o binário na versão correta e empacotar tudo no formato de um instalador. Podemos ter dois tipos de solução para esse tipo de problema: sem o Chocolatey, poderiamos manter todos os binários gravados em uma pasta na rede ou commitar o binário no controlador de versão (SVN ou Git). Ambas as soluções tem seus prós e contras.

Nesse post vou mostrar outra possibilidade: utilizar um gerenciador de pacotes .

 

O que é gerenciamento de pacotes ?

Um gerenciador de pacotes é uma coleção de ferramentas utilizadas para automatizar a instalação, configuração e remoção de software. A idéia de gerenciamento de pacotes vem do Unix e depois Linux, onde existem muitos softwares pequenos que dependem de outros. Sem esse tipo de ferramenta, o Linux seria muito dificil de ser mantido.

Uma das vantagens desse tipo de ferramenta é a simplificação do processo de instalação de software. Para quem está no mundo windows e está acostumado com o famoso "next, next, finish", saiba que isso não é mais necessário! Utilizando o choco não é mais preciso baixar e ficar acompanhando a instalação, pois ele abstrai esses passos. Para qualquer instalação, basta um comando:

 
  choco install nome-do-pacote   

Ainda temos mais vantagens como segurança, confiança e simplicidade ao criar scripts de instalação/configuração. 

 

NuGet

Desenvolvido pela Microsoft , é um mecanismo criado para ser utilizado com .NET e permitir que código compilado(DLL) seja compartilhado. Os pacotes utilizam a extensão de arquivo .nupkg, que contém o arquivo binário e um manifesto que contém as informações do pacote.

 

Chocolatey

O Chocolatey é um gerenciador de pacotes que foi construido sob uma infraestrutura NuGet . Utiliza o conceito de repositório descentralizado, o que permite que, além do repositório central , também seja possível criar um servidor local próprio e armazenar seus binários de forma eficiente.

O Chocolatey é um servidor pago, que possui uma licença community com um pouco menos de recurso. Para quem precisa de um servidor apenas para automatizar a instalação de software, o community atende muito bem. É possivel subir pacotes personalizados no community.

Um dos recursos importantes disponíveis na versão paga é o download de pacotes . Com a community só é possivel instalar. A falta desse recursos atrapalha para a utilização como repositório de binários, pois é inviável gerar uma build onde você precisa coletar, copiar e empacotar arquivos.

Os programas que são disponibilizados para instalação através do chocolatey, são chamados de pacotes.

 

Como instalar o Client

A instalação do Client é bem simples. Copie e cole uma linha de comando em um cmd Administrador:

 
  @"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"   

 

Operações básicas

  • Para instalar qualquer coisa:
 
  choco install nome-do-pacote   
  • Para pesquisar por um pacote, existem duas formas: pelo site publico ou pelo console:
 
  choco list nome-do-pacote   

Por padrão, o Chocolatey sempre busca o pacote no servidor público e depois nos servidores que estão configurados como fontes. Na versão paga, isso pode ser configurado.

 

Instalando o Servidor

Instalação simulada no windows 10 x64 1703

  1. Instale o chocolatey
  2. choco install KB2919355 -y
  3. choco install KB2919442 -y
  4. choco install dotnet4.6.1 -y
  5. Re-inicie
  6. choco upgrade chocolatey.server -y
  7. choco install IIS-WebServer --source windowsfeatures
  8. Marcar no painel de controle do windows -> Programas -> Ativar ou desativar recursos do windows -> Serviços de informação da internet -> Ferramentas de Gerenciamento da  Web
  9. Execute  o INetMgr
  10. Do lado esquerdo dentro sites, remova o "Default Web Site"
  11. Clique direito em Sites -> Adicionar Site
  12. Em Nome do site, nome como por exemplo: choco
  13. Caminho físico, geralmente: C:\tools\chocolatey.server
  14. Marcar Iniciar site imediatamente
  15. Para testar basta abrir o navegador e digitar localhost

 

Configurando a maquina local para acessar o servidor criado

Por padrão, o Chocolatey busca os pacotes de chocolatey.org . Para adicionar nosso servidor, abra o navegador na maquina cliente e siga as instruções:
choco source add --name=internal_machine --source=http://localhost/chocolatey

 
  choco source add --name=internal_machine --source=http://localhost/chocolatey   

Obs.: Troque o localhost pelo ip do servidor ou dns.
em --name voce pode colocar o que achar mais apropriado, pois é apenas um alias local.

Agora, toda vez que pedir para instalar um pacote, ele vai pesquisar no servidor chocolatey.org e depois no seu servidor local, para verificar a lista de servidores .

 
  choco sources   

 

Como criar um pacote

Criar um pacote não é uma coisa tão intuitiva, por isso utilizar a ferramenta NuGet Package Explorer é recomendável, pois vai reduzir a curva de aprendizado com a ferramenta.

Para instalar a NuGet Package Explorer, utilize o comando abaixo:

 
  choco install nugetpackageexplorer   

 

Para tornar mais simples a criação de pacotes, vou resumir o que é necessário para criar o pacote da gov, pois o NuGet é um padrão bem poderoso e os detalhes mais profundos estão fora do escopo desse post.

Basicamente, o Chocolatey utiliza pacotes NuGet que podem ser facilmente identificados pela extensão .nupkg. Os pacotes suportados pelo Chocolatey podem ser gerados pelo NuGet ou pelo próprio Chocolatey, através do comando choco .

Para gerar um pacote NuGet, voce precisa de 3 coisas:

  1. O artefato a ser empacotado,
  2. o manifesto,
  3. e o script de instalação.

 

1. Criando o Manifesto

Um manifesto é um arquivo xml com a extensão .nuspec, para nosso exemplo vamos chamar de spdGovX.nuspec, segue o modelo de arquivo que você pode utilizar para criar outros pacotes.

 
  <?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
  <metadata>
    <id>spdGovX</id>
    <version>1.6.7.1443-beta</version>
    <title>Utilitários para os produtos TecnoSpeed S/A</title>
    <authors>wesller.franca</authors>
    <owners>wesller.franca</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Ferramentas utilitárias para os produtos TecnoSpeed S/A</description>
    <copyright>TecnoSpeed S/A</copyright>
    <tags>spdGov Gov</tags>
  </metadata>
  <files>
    <file src="chocolateyinstall.ps1" target="chocolateyinstall.ps1" />
    <file src="setup_spdgov.exe" target="setup_spdgov.exe" />
  </files>
</package>   

É um arquivo xml bem simples, vamos as particularidades, na tag version existe um -beta, isso diz para o chocolatey que é uma versão beta e por isso ele não será listado com o choco list

Para visualizar os pacotes que são beta

 
  choco list --pre   

Outro detalhe é que o chocolatey realiza o controle de versão automaticamente, a cada versão enviada ele vai armazenando internamente e sempre disponibiliza através do choco install a última, para instalar uma versão especifica é preciso informar o parametro --version. A ferramenta utiliza o conceito de imutabilidade, isso significa que se enviar a mesma versão duas vezes vai dar erro. É possivel reenviar uma mesma versão, mas da uma pouco mais de trabalho.

No grupo de tag's <Files> são informados os arquivos que serão adicionados ao pacote, para esse exemplo estamos empacotando o script de instalação(chocolateyinstall.ps1) e o arquivo com o instalador da gov. 

 

2. Criando um script básico

O script chocolateyinstall.ps1, precisa estar na mesma pasta do arquivo spdGovX.nuspec, esse script é baseado no powershell, e é responsável por realizar a instalação e configuração dos artefatos contidos no pacote, segue um exemplo

 
  Install-ChocolateyInstallPackage -PackageName 'spdGovX' -FileType 'exe' `
  -SilentArgs '/VerySilent' `
  -File "$(Split-Path -Parent $MyInvocation.MyCommand.Definition)\setup_spdgov.exe" `
  -ValidExitCodes = @(-1,0)   

Como Powershell não é minha especialidade, vou deixar aqui o link para maiores informações, mas basicamente ele apenas chama o instalador da gov no modo silencioso.

  • Gerando o pacote

Até agora aprendemos a parte de configuração de um pacote, vamos ver como gerar o pacote e envia-lo para o servidor

 
  nuget pack spdGovX2.nuspec   
  • Enviando para o servidor local
 
  choco push --source http://meu-servidor/chocolatey spdGovX.1.6.7.1443.nupkg -k token-autenticacao --force   
  • Para verificar se o pacote subiu para o servidor
 
  choco list spdGovX

Saida do console:
Chocolatey v0.10.11
spdGovX 1.6.7.1443
1 packages found.   
  • Verificando versões beta
 
  C:\>choco list spdgov -a
Chocolatey v0.10.11
spdGovX 1.6.7.1415
spdGovX 1.6.7.1385
02 packages found.

C:\>choco list spdgov -a --pre
Chocolatey v0.10.11
spdGovX 1.6.7.1447-beta
spdGovX 1.6.7.1415-beta
spdGovX 1.6.7.1415
spdGovX 1.6.7.1385
04 packages found.   

 

Nesse post aprendemos o que é um gerenciador de pacotes e como gerar um pacote como o Chocolatey. Mas como isso pode ajudar no armazenamento de artefatos de build?

Os script's que citei podem ser facilmente adaptados para um ambiente de CI / CD . Partindo do pressuposto que você automatizou o scripts acima, o nosso dia-dia se torna mais simples, para enviar uma nova versão para o servidor você só precisa fazer um choco pack e choco push .

Para baixar o binário só precisa fazer um choco download , ou para instalar choco install . Isso é ,muito mais simples, pois não precisamos se preocupar onde vai ficar o binário e nem como será armazenado! ;)

Acesse outros conteúdos gratuitos para desenvolvedores de Software!

Conheça a Revista TecnoUpdate, essencial para Software Houses!