Chocolatey: Gerencie artefatos gerados<br> no Build com mais eficiência

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


A ideia 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 dependências.

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 é distribuída 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. Assim, podemos ter dois tipos de solução para esse tipo de problema: sem o Chocolatey, poderíamos manter todos os binários gravados em uma pasta na rede ou commitar o binário no controlador de versão (SVN ou Git). Contudo 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 ideia de gerenciamento de pacotes vem do Unix e depois Linux, onde existem muitos softwares pequenos que dependem de outros. Então, sem esse tipo de ferramenta, o Linux seria muito difícil 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

 

Aliás, 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 construído sob uma infraestrutura NuGet. Utiliza o conceito de repositório descentralizado, o que permite que eventualmente, 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, portanto o community atende muito bem. É possível subir pacotes personalizados no community.

Um dos recursos importantes disponíveis na versão paga é o download de pacotes. Com a community só é possível instalar. Assim, a falta desse recurso 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. Reinicie
      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

 

Obs.: Troque o localhost pelo ip do servidor ou dns. Em –name você pode colocar o que achar mais apropriado, pois é apenas um 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. 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 parâmetro –version. A ferramenta utiliza o conceito de imutabilidade, isso significa que se enviar a mesma versão duas vezes vai dar erro. É possível reenviar uma mesma versão, entretanto 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!

Formada em Publicidade e Propaganda. Cria conteúdos para o PlugMobile, a solução mobile da TecnoSpeed.

Artigos relacionados