Como você aplica práticas de desenvolvimento como controle de versão, teste e integração / implantação contínua à administração do sistema?

18

Imagine que você gerenciará vários servidores com vários serviços diferentes usados ​​por várias pessoas. Agora diga que deseja reconfigurar ou substituir algum software em um desses servidores. Obviamente, você não deseja trabalhar em servidores que estão em produção.

Se fosse uma alteração de código, como desenvolvedor, eu faria a alteração em minha máquina de desenvolvimento local, testaria localmente e confirmaria a alteração em um sistema de controle de versão. As mudanças poderiam ser implementadas em um ambiente de teste, testadas posteriormente e finalmente implantadas em um ambiente de produção. Também seria fácil reverter, se necessário.

Geralmente, ou especificamente, como você consegue isso na administração do sistema?

(A primeira coisa que vem à mente é usar máquinas virtuais e colocar imagens de máquinas virtuais no controle de versão, mas tenho certeza de que há muita literatura e soluções inteligentes das quais atualmente não estou ciente.)

arex1337
fonte
Você está perguntando sobre ferramentas técnicas ou estruturas para gerenciar esse tipo de coisa? Porque seria difícil falar sobre a última opção sem mencionar coisas como gerenciamento de alterações e liberações da disciplina ITIL.
Rob Moir
@ DJPon3 Eu gostaria de saber sobre a abordagem geral (como você pensa sobre isso) e as ferramentas para fazê-lo. Sinta-se livre para usar meu último parágrafo como ponto de partida.
Arex1337

Respostas:

15

A resposta curta é "Gerenciamento de implantação de SO", "Gerenciamento de configuração" e "Empacotamento de software". A resposta longa segue.

Eu gostaria de acrescentar à resposta de Daniel Pittman com uma análise do que forma um "sistema" na administração de sistemas.

Um sistema ou ambiente será composto por:

  • Servidores
  • Sistema operacional
  • Configuração
  • Pacotes de fornecedores; e
  • Pacotes locais

Envolver estes serão processos como:

  • Implantação ou geração de SO
  • Gerenciamento de configurações
  • Gerenciamento de pacotes de software
  • Auditoria / registro
  • Monitoramento
  • Backups

E você gostaria que eles se combinassem para ajudá-lo a alcançar objetivos não funcionais, como:

  • Repetibilidade
  • Manutenção
  • Mensurabilidade
  • atuação
  • Rastreabilidade
  • Testabilidade
  • Mudança

Este é um despejo rápido do cérebro. Estou certo de que mais poderia ser adicionado a todas as listas.

Sua pergunta aborda várias delas sem usar as palavras específicas. Por exemplo, você deseja poder implantar facilmente e reverter, ou seja, deseja manutenção; você deseja fazer isso em um ambiente de teste e testar até que ele passe, ou seja, repetibilidade, testabilidade e mensurabilidade; você está pensando em colocar imagens vm no controle de versão, porque gostaria de repetir as implantações de sistema operacional e configuração.

Existem muitas ferramentas para ajudá-lo com isso, algumas delas mencionadas por Daniel. Alguns outros são:

  • Kickstarts (baseado em RedHat), Preseed (baseado em Debian), WDS (MS Windows) para implantar ambientes de SO conhecidos
  • Spacewalk / Satellite (baseado em RedHat), Diretivas de Grupo (MS Windows) para gerenciamento de configuração e pacotes
  • Sistemas de empacotamento YUM e APT para gerar, implantar, atualizar e remover pacotes (conjuntos de binários, dados e configuração que incluem um software)
  • Nagios, OpenNMS e SCOM para monitoramento
  • Amanda, Bacula e Windows Backup Server para backups
  • Munin, PCP e Hyperic para monitoramento de desempenho
  • CVS, SVN, GIT ou Bazaar para controle de versão
  • Hudson e Jenkins para gerenciamento de compilação
  • Selênio e robô para testes
  • Bugzilla, Request Tracker e Jira para gravação, comunicação e rastreamento

Novamente, essa não é uma lista abrangente, mas algo que guardo na minha cabeça para me guiar e espero que também o ajude.

nearora
fonte
O que é o Marvin? Não consigo encontrar uma referência a isso ou isso é um erro de digitação?
Thelsdj
s / Marvin / Hudson / - obrigado por descobrir que @thelsdj :-)
nearora
16

Disclaimer: Eu sou um dos desenvolvedores do Puppet.

A maneira óbvia é apenas aplicar os conceitos: definir um ciclo de desenvolvimento / teste / produção e promover mudanças através deles. Use o controle de versão para rastrear sistemas.

Em pouco tempo, iniciar esse caminho leva a descobrir que você realmente deseja ferramentas que automatizem essas coisas - essencialmente, que você deseja automatizar a administração de sistemas, para que você não use essas técnicas em máquinas, use-as no sistema que gerencia as máquinas.

Ferramentas como Chef , Puppet , Salt e CFEngine são ferramentas populares para atender a essa segunda necessidade. Eles trabalham na direção geral de transformar a administração de sistemas em uma solução central que você pode controlar e testar a versão.

O movimento DevOps é outra fonte de boas informações sobre como fazer isso. Embora o preceito seja uma melhor cooperação entre os desenvolvedores e a equipe de operações, ele também segue a mesma direção.

Daniel Pittman
fonte
15
Agora sabemos que a assediar sobre nossas perguntas fantoche ...
ewwhite
1

No mundo Windows, esses problemas relacionados ao gerenciamento do ciclo de vida dos aplicativos estão sendo tratados com o System Center 2012.

No System Center Virtual Machine Manager (SCVMM), os serviços são definidos usando 'Modelos de Serviço' (por exemplo, um serviço clássico de três camadas) e os ambientes de execução são definidos como 'Nuvens' (por exemplo, desenvolvimento, preparação, produção). Os modelos de serviço podem ser versionados e implementados (de maneira automatizada) para diferentes nuvens. Nos bastidores, o SCVMM faz o trabalho para provisionar, implantar e configurar o hardware virtualizado (VMs etc.) e software (SO, componentes de aplicativos etc.).

O System Center Service Manager é a peça que une isso do ponto de vista do processo. Por exemplo, o gerenciamento de problemas e o controle de alterações.

Richard B
fonte