Este artigo foi traduzido por máquina.

NuGet

Criando uma galeria do NuGet

**Clark Sell
**Mark Nichols

Este é o terceiro e último artigo de nossa série sobre NuGet, um novo ecossistema de gerenciamento de pacote para desenvolvedores. NuGet, um projeto da Fundação Outercurve, dá.NET desenvolvedores uma maneira de consumir, criar e publicar pacotes. Até agora, a série lhe mostrou como gerenciar as bibliotecas de projeto com NuGet (msdn.microsoft.com/magazine/hh547106) e como se tornar um autor do NuGet (msdn.microsoft.com/magazine/hh708753). Neste artigo, vamos dar uma olhada em sua própria galeria de NuGet de hospedagem e criação de um processo de compilação para ajudar a gerenciar seus pacotes.

Por que hospedar a Galeria?

NuGet.org já existe como um repositório público para pacotes NuGet, assim você pode questionar o ponto de uma galeria de hospedagem. Isso é compreensível, mas aproveitando que sobre essa infra-estrutura de ecossistema dentro das paredes de seu próprio ambiente de dev? Por que não configurar sua galeria privada não só facilitar o ecossistema de desenvolvimento do produto mas, melhor ainda, para amarrá-lo diretamente a seus processos de compilação e implantação? Além disso, qualquer coisa que você vê em NuGet.org está disponível para você livre.

Neste artigo, vamos explorar as etapas necessárias para criar e consumir sua própria galeria de NuGet. Como já dissemos antes, incorporando NuGet em seu ciclo de vida de desenvolvimento não é complicado e será valeu a pena o esforço. Uma vez feito isso, seus problemas de consumo, a criação e distribuição de pacote se tornará não mais do que uma memória distante.

Antes de começar, vamos explorar um caso de uso que a maioria dos desenvolvedores já encontrou: controle de versão. Seu produto, dependendo de seu tamanho e complexidade, é muito provável que o resultado de muitas equipes, diferentes horários de lançamento e uma variedade de módulos (assemblies). Obviamente o produto lançado agradàvel é empacotado para os seus clientes, mas sua jornada para conclusão incluídos centenas, senão milhares de compilações, produzindo muitas versões diferentes de ativos do produto.

Na última década, as práticas de desenvolvimento — incluindo a compilação e implantação de sistemas automatizados — ajudou a reduzir a dor, mas eles sempre ficou aquém em termos de distribuição e escolha. Sistemas de gerenciamento de pacote fornecem a solução para isso.

Pense em seu próprio ecossistema de desenvolvimento, na qual diferentes equipes a trabalharem independentemente para publicar as versões que eles escolhem para consumo. Cada equipe, ao construir o seu próprio e agenda de lançamento, quer controlo e uma maneira fácil de publicar seus produtos. Com um sistema de gerenciamento de pacotes, cada equipe começa a decidir o que é o produto e como ele deve ter instalado e os clientes começam a decidir quando eles devem consumi-lo.

Até certo ponto, isso é muito semelhante ao código como aberto comunidades operarem, usando práticas comprovadas que facilmente dimensionar. Embora os pacotes que você encontrar em NuGet.org são bastante "grandes grãos", você pode seguir essas mesmas práticas para a sua construção de seus próprios aplicativos. Um exemplo bom, concreto do tipo de software que isso seria útil para pode ser uma biblioteca de auxiliar sua empresa constrói e mantém seus produtos públicos.

Talvez sua empresa restringe somente as bibliotecas e versões de que seus desenvolvedores podem usar. Este é outro grande motivo para que você possa hospedar sua própria galeria proprietária com os pacotes aprovados e versões de pacote.

Rápido e simples

A maneira mais fácil para hospedar sua própria galeria de NuGet é expor um compartilhamento de arquivo. Isso pode soar um pouco rudimentar, mas se você precisa de algo rápido e simples, esse método funciona muito bem. O compartilhamento pode ser estruturado como quiser, colocando seus pacotes — isto é, seu *. nupkg arquivos — em qualquer lugar no compartilhamento. Você pode se referir a parte como uma fonte de pacotes.

Com a origem do pacote criada, vamos adicioná-lo ao ambiente de desenvolvimento. Você pode ter quantas fontes de pacotes conforme desejado e mover facilmente entre cada uma. Para editar os códigos fontes do pacote no Visual Studio, vá para ferramentas | Opções | O Gerenciador de pacotes | Fontes de pacotes (consulte Figura 1). Observe que, como do presente escrito, versão 1.5 foi atual. Você deve esperar pequenas diferenças entre versões do NuGet.

Adding a Package Source in Visual Studio
Figura 1 Adicionando uma pacote fonte no Visual Studio

Aqui você pode adicionar, remover e alterar a origem do pacote padrão. Se preferir, você pode fazer o mesmo no WebMatrix, um ambiente de desenvolvimento grátis. Basta clicar no ícone do NuGet galeria no menu principal e selecione Add Source, como mostrado na Figura 2.

Adding a Package Source in WebMatrix
Figura 2 Adicionando uma fonte de pacotes no WebMatrix

Como você pode ver, ambas as figuras listam duas fontes do pacote. Você pode optar por usar apenas um ou todos a qualquer momento.

Apresentando o NuGet Galeria

Enquanto a fonte de pacotes de sistema de arquivos é muito fácil de configurar e começar a usar, se decompõe muito rapidamente quando você começar dimensionamento. Felizmente, NuGet.orgwas construída com exatamente isto em mente, para fornecer uma plataforma aberta para as pessoas a tomar, estender e construir sobre para suas próprias necessidades. Você pode encontrar o projeto NuGet galeria no github.com/NuGet/NuGetGallery. Galeria do NuGet é um ASP.NET MVC 3 projeto construído em cima de Razor, OData, SQL Server e Windows Azure.

A melhor maneira de compreender as características e a funcionalidade que Galeria NuGet tem para oferecer seu ecossistema de desenvolvimento é simplesmente explorar NuGet.org.

Antes de você pode criar e publicar um pacote, você precisa ser um usuário registrado. Depois de registrado, você tem plenos direitos para carregar e gerenciar seus pacotes e editar seu perfil. Você também pode gerar a chave de API exclusiva que permite que você automatize pacotes de publicação para a Galeria (ver Figura 3). Para obter mais informações sobre a publicação de um pacote, consulte o artigo anterior desta série, "Tornando-se um autor NuGet."

A Registered User Account in NuGet
Figura 3 conta de usuário registrado no NuGet

Quando você carregar um pacote para a Galeria NuGet, ele automaticamente recebe seu próprio lugar na Galeria, como mostrado na Figura 4.

A Package Uploaded to the NuGet Gallery
Figura 4 pacote carregado a Galeria NuGet

Isto é onde você pode exibir todas as informações importantes sobre um pacote. Para cada pacote, a Galeria NuGet controla os downloads da versão, total downloads, datas, licenças e assim por diante. Evidentemente, um pacote sobre o NuGet.orgsite provavelmente renderá consideravelmente maiores números de transferência dados seu ecossistema, mas essas estatísticas são vitais para qualquer autor de pacote, independentemente do tamanho do projeto.

O feed de pacote é claramente a característica mais importante da pilha global. Ele é um OData de alimentação você encontrará em http://YourGallery/api/v2. Esta é a mesma URL que você vai usar como sua fonte de pacote. Sem este feed, todo o poder do NuGet é perdida.

Introdução

Antes de começar, verifique se que você tem o seguinte instalado:

No momento da redação deste texto, não há nenhum instaladores para a Galeria e o projeto está em desenvolvimento ativo. Isso significa que é sempre melhor ir à página inicial do projeto para obter as informações mais recentes. Você precisará baixar a fonte e compilá-lo, que é simple.

Para obter a fonte, você pode apenas baixar uma cópia zipada do ramo mestre mais recente ou clonar a fonte base com git, da seguinte forma:

$ git clone https://github.com/NuGet/NuGetGallery.git

Quando você tiver feito isso, você terá a base de origem inteiro localmente.Na sua raiz, você encontrará um script do Windows PowerShell chamado Build-Solution.ps1.Execute este script para configurar a sua máquina e construir a fonte.

Se você executar a fonte, você observará que olha e se sente exatamente como NuGet.org.Você pode estar pensando de tweaking a interface do usuário, talvez modificando a página inicial.Isso é compreensível, mas tenha cuidado, especialmente se suas intenções são a permanecerem em sincronia com a base de origem mestre.

Compilação processo Meets NuGet Galeria

O próximo passo lógico é integrar sua galeria NuGet com seus processos de compilação existente.Se você não tiver um processo de compilação e você está procurando um pouco "como começar" orientação com o Team Foundation Server (TFS) desenvolver processos, verifique o Microsoft Visual Studio ALM Rangers construir guia de personalização no rabcg.codeplex.com.

Está bem: Você tem uma biblioteca que você deseja disponibilizar em uma galeria, que poderia ser a galeria oficial do NuGet, uma galeria de proprietária ou mesmo um compartilhamento de arquivo local.Não importa o que, você vai ter que realizar determinadas tarefas para criar o pacote NuGet, e eles são geralmente as mesmas tarefas não importa onde reside a Galeria.

Através do curso de desenvolvimento de seu produto, você repetidamente atravessará o processo de codificação, compilação, empacotamento, empurrando e publicação.Você vai também, esperamos, incluir um par de doses saudáveis de testes; resulta do que testes podem fazer você a desviar-se publicar na Galeria, se você encontrar quaisquer problemas (ver Figura 5).

The NuGet Development ProcessFigura 5 O processo de desenvolvimento do NuGet

Manter os consumidores felizes com o software de trabalho é uma coisa boa, e você terá um tempo mais fácil fazê-lo usando um processo gerenciado.Lembre-se, porém, do processo gerenciado não pode ser totalmente automatizado; não há nenhum substituto para verificação humana.Não pense que você pode publicar apenas porque seu software passa todos os testes automatizados.Você poderia publicar um pacote que não está pronto e fazer seu consumidor irritado facilmente.Além disso, eles não serão felizes se você publica constantemente e eles não conseguem acompanhar as versões sempre em mutação.Certifique-se de uma decisão consciente de publicação.

Use o processo de construção para construir, pacote e enviar sua biblioteca NuGet para uma galeria onde você executa testes finais e fazer essa verificação humana.Dessa forma, você pode escolher integração contínua ou uma compilação agendada automaticamente empurrar o pacote e torná-lo pronto para que você possa testar.Como você pode fazer isso?Aqui está um exemplo usando o TFS e sua capacidade de compilação automatizada baseada em fluxo de trabalho.

NuGet.exe é um aplicativo do console autônomo, orientado por parâmetros, mas facilmente pode ser chamado por outro processo, como o TFS Team Build.Compilação da equipe executa um fluxo de trabalho; em termos TFS, este é um conjunto de atividades personalizadas, controlada através de um modelo de compilação e iniciado por uma definição de compilação.Um pacote de soluções para automatizar o processo de desenvolvimento do NuGet é o projeto de NuGetter na nugetter.codeplex.com.Este projeto fornece um shell automatizado em torno da aplicação de NuGet.exe.Vamos usar este pacote para mostrar o que pode ser feito e coisas para pensar sobre como é trabalhar em direção a automatizar seus próprios pacotes NuGet.

Como Figura 6 mostra, a definição de compilação no TFS é onde você fornecer todas as informações necessárias para fazer a embalagem, empurrar e publicar.Construção de um processo de construção flexível e reproduzíveis para NuGet requer várias partes de dados e as opções que ativar ou desativar as partes do processo.Os dados são organizados em categorias, que são intituladas para lhe dar um sentido da ordem em que os passos são executados.

Nugetter Build TemplateFigura 6 modelo de compilação de Nugetter

A seção de PrePackaging é usada para embalagem de NuGet complicada ou multiframework que requer alguma preparação inicial.NuGetter pode chamar um script do Windows PowerShell (se você desejo) para organizar os arquivos de biblioteca para facilitar a embalagem.Esta etapa não é necessária, portanto, você pode usar o parâmetro flag "Invocar o Script do PowerShell" dizer o processo se deve executar o script.

Você pode usar um.arquivo nuspec diretamente para definir como seu pacote será criado ou você pode fazer assim indirectamente através de um arquivo. csproj.Cabe a você; Use a abordagem que melhor se adapte às suas necessidades.

Como você pode ver, todos os parâmetros necessários para embalagem são incluídos.Versão, caminho base (pasta de origem para embalagem), chave de API e Galeria localização (chamado de origem) são fornecidos como parte da definição de compilação.No entanto, a segurança dessas informações pode ser de grande importância para você.Por exemplo, a chave de API é o que permite que você e somente você empurrar pacotes NuGet para a Galeria.Se essa chave torna-se pública, qualquer pessoa poderia empurrar pacotes falsos em seu nome.Por causa disto, o NuGetter permite que você forneça a chave de API real ou um caminho para um arquivo que contém a chave.Se você usar um caminho do arquivo, o processo de compilação lê o arquivo, extrai a chave e usa-lo sem listar a chave no registro e segurança é mantida.Obviamente, o ID de serviço de compilação deve ter acesso de leitura para o arquivo para este trabalho.

Outro problema potencial para você está gerenciando a versão do seu pacote.Em Figura 6, o número de versão é fornecido na definição de compilação.Mas, você realmente deseja manter alterar esse número na definição de compilação?O que acontece quando você tem várias compilações (integração contínua [CI], diariamente, outras agendadas e várias compilações manuais)?NuGetter dá-lhe a escolha para inserir a versão diretamente ou, como acontece com a chave de API, você pode fornecer um caminho de arquivo que construir várias definições podem usar.Eles serão todos usam o mesmo número de versão e você pode gerenciá-lo em um só lugar.

O destino de empurrar o exemplo é a Galeria NuGet, mas isto é onde você forneça o destino da compilação mesmo se você está empurrando o seu pacote para uma galeria interna ou para um armazenamento de arquivo local.Este é um outro caso onde o processo de compilação talvez precise intervir.NuGet.exe espera um URL como o destino e se você está empurrando para um armazenamento local — que não vai ser um URL — o processo deve interpretar o formato de destino.Neste caso, em vez de usar NuGet.exe para fazer o envio, você tem o processo de compilação fazê-lo.

Por razões de integralidade e paridade de recursos com NuGet.exe, NuGetter fornecer para publicação automatizada.Basta ter em mente nossas advertências anteriores antes de decidir usar esse recurso.

Pela maneira, você não precisa se preocupar que seus consumidores podem perder nenhuma atualização dos pacotes.A Comunidade tem isso coberto com NuGetFeed (github.com/NuGetFeed/NuGetFeed).NuGetFeed permite que você construa um feed RSS personalizado baseado em pacotes que você selecionar.Os consumidores podem adicionar um feed personalizado ao seu leitor de RSS favorito e ser informados de todas as atualizações.

Outra opção para criar um feed do NuGet é MyGet na MyGet.org.MyGet pode ser perfeito para aqueles de vocês que querem uma NuGet privado de alimentação para sua lista de pacotes aprovados mas não quer gastar tempo, dinheiro e esforço criar e manter sua própria infra-estrutura de galeria.MyGet é uma solução hospedada que permita que você críe galerias muito rapidamente que são específicas para suas necessidades.Consulte o site MyGet para obter informações mais detalhadas.

Finalmente, como mencionamos anteriormente, NuGet e NuGet Galeria são projetos open source.Isso significa você está habilitada a contribuir qualquer coisa de documentação para recursos ou quebra alguns bugs ao longo do caminho.Na página inicial do github, a equipe do projeto tem detalhadas as etapas exatas que você pode tomar para contribuir.

Resumindo

NuGet sem dúvida mudou a forma como pensamos sobre a nossa.Ecossistema de gerenciamento de pacote NET, tanto pública como privada.Galeria de NuGet e NuGetFeed são componentes essenciais para a conclusão desse ecossistema.Trazer essas ferramentas em sua rotina diária abre novas possibilidades.Como observado, NuGet galeria está em desenvolvimento ativo, portanto certifique-se de visitar github.com/NuGet/NuGetGallery para obter as informações mais atualizadas.

Você pode encontrar todos os links utilizados no presente artigo e muito mais no on.csell.net/HostingNuGet

Clark Sell é como um evangelista de Web sênior para Microsoft fora de Chicago. He podcasts no DeveloperSmackdown.com, blogs em csell.net e pode ser encontrado no Twitter em twitter.com/csell5.

Mark Nichols é consultor sênior de software para Microsoft fora de Chicago. He podcasts no DeveloperSmackdown.com, blogs logs em marnick.net e pode ser encontrado no Twitter em twitter.com/mark_nic.

Graças aos seguintes especialistas técnicos para revisão deste artigo: David Ebbo, Phil Haack e Satrom de Brandon