Como posso controlar um repositório upstream espelhado?

5

Eu gerencio muitos servidores que abrangem vários ambientes (dev, qa, staging e production). Para ajudar a gerenciá-los, temos vários repositórios em um servidor da Web local para nossos aplicativos (por exemplo, app_1_el6, app_2_el7 etc.). Também espelhamos vários repositórios upstream que fornecem dependências para nossos rpms personalizados (por exemplo, EL Repo [1], EPEL [2] etc.) para reduzir o tempo de download de pacotes.

Atualmente, um trabalho cron sincroniza o nosso local com os repositórios upstream. De tempos em tempos, receberemos uma atualização que causa um problema (por exemplo, incompatibilidade com um de nossos pacotes). Isso acaba causando muita dor, o que eu gostaria de evitar.

O que eu gostaria de fazer é criar algum tipo de controle de versão para o nosso espelho local dos repositórios upstream. Eu gostaria de ter certeza, por exemplo, que se um novo pacote for introduzido em um repositório upstream que quebra nosso rpms customizado, eu tenho uma maneira de reverter ou de alguma forma isolar esse pacote. Qual é a melhor maneira de fazer isso?

[1] link

[2] link

    
por CHK 26.08.2015 / 16:44

3 respostas

3

Michael Hampton fez referência a uma resposta que menciona Katello e Spacewalk , Satellite é o produto que a RedHat oferece para realizar isso.

Katello é para o satélite o que o Fedora é para o RedHat (de acordo com isto )

Ambientes do ciclo de vida e visualizações de conteúdo são o que você procura no Katello:

Promoting a Content View

Initially a Content View is published to Library as version 1. If there are Content Hosts in other environments that would like to consume this Content View, a version of the content view will need to be promoted to those environments. For example, given the Content View “New Content View”, version 1 of which has been promoted to the Dev environment. Any Content Hosts in Dev attached to the Content View would remain at version 1 until a version 2 is both published and promoted to the Dev environment.

Amostra de visualização de conteúdo http://www.katello.org/docs/2.3/user_guide/ content_views / promote_content_view2.png

Visualização de conteúdo que promove o progresso http://www.katello.org/docs/2.3/user_guide /content_views/promote_content_view3.png

    
por 11.05.2016 / 22:25
1

Para expandir a resposta do fuero, usamos o RedHat Satellite para conseguir isso. Satélite é uma combinação das ferramentas de código aberto Foreman e Katello . Especificamente, o aspecto Katello é o que fornece este "Gerenciamento do ciclo de vida".

No Katello, você define repositórios upstream para sincronizar a partir de: yum repos, forjar fantoches, git servers, etc. Você então sincroniza o conteúdo na Biblioteca e "promove" através de vários ambientes. Um exemplo comum seria "Biblioteca - > Dev - > Teste - > Produção".

Houve uma boa palestra em uma das conferências de marionetes há algum tempo, onde alguns dos desenvolvedores fizeram uma demonstração de Katello / Foreman. Link no YouTube .

Uma coisa a notar: no momento, estamos tentando resolver o problema da distribuição e do rastreamento binários, o que a Katello não resolve. O que quero dizer com isso é que temos um conjunto de módulos Puppet e RPMs / binários associados, mas Katello não oferece nenhuma maneira de "instantâneo" para exportar para um sistema diferente. Katello manterá uma "visão" estática dessas coisas, mas não há como confirmar o que está nessa visão - não posso dizer ao cliente que eles têm "versão X" do sistema, nem posso confirmar que a visão deles está usando é exatamente o mesmo que o meu. Tudo depende quando eles sincronizaram e o que estava nos repositórios no momento.

Estamos considerando ferramentas como o Nexus / Artifactory para fornecer essa funcionalidade no momento, portanto, convém dar uma olhada nelas também.

    
por 17.05.2016 / 11:03
0

Bem, você pode facilmente configurar seu próprio sistema para fazer isso.
Já existe uma ferramenta chamada reposync que você pode usar para sincronizar todo o repositório.
Agora, o único elo perdido é como você não desorganiza seu espaço em disco com as coisas.
Faça um pouco de leitura sobre a desduplicação de dados com o brtfs (por exemplo, como ele foi mesclado no kernel principal, verifique este projeto ) / You pode usar qualquer outro sistema de arquivos com deduplicação de dados como Lessfs /
A partir daí, você pode configurar seu espaço de armazenamento de dados usando qualquer sistema de arquivos que permita deduplicação e, em seguida, usar seu cronjob para fazer a sincronização, mas dessa vez a nova sincronização, então digamos que você pode facilmente acabar com essa estrutura:
2016-05-15
2016-05-16
2017-05-17
produção - > 2016-05-15 (ligação simbólica)
encenação - > 2016-05-17 (ligação simbólica)
Agora, como você já tem desduplicação nesses dados, não perderá espaço no espaço.

É claro que isso adiciona a sobrecarga de ter que manter seu próprio symlinking e o que não, mas hey usando Katello você ainda precisa clicar:

    
por 15.05.2016 / 23:39