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

17

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

Se isso fosse uma alteração de código, como desenvolvedor, faria a alteração em minha máquina de desenvolvimento local, testaria-a localmente e confirmaria a alteração em um sistema de controle de versão. As alterações poderiam então ser implantadas em um ambiente de preparação, testadas posteriormente e finalmente implementadas em um ambiente de produção. Também seria fácil para mim 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 eu não estou ciente atualmente.)

    
por arex1337 25.05.2012 / 03:40

3 respostas

15

A resposta curta é "Gerenciamento de implantação do sistema operacional", "Gerenciamento da configuração" e "Pacote de software". A resposta longa segue.

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

Um sistema ou um ambiente será composto por:

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

Envolvendo estes, serão processos como:

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

E você gostaria de combiná-los para ajudá-lo a alcançar metas não funcionais, como:

  • Repetibilidade
  • Manutenção
  • Mensurabilidade
  • Desempenho
  • Rastreabilidade
  • Testabilidade
  • Alternância

Este é um rápido despejo cerebral. Tenho certeza que mais poderia ser adicionado a todas as listas.

Sua pergunta toca em vários desses sem usar as palavras específicas. Por exemplo, você deseja poder implantar com facilidade e reverter, ou seja, deseja manter a capacidade de manutenção. você quer fazê-lo em um ambiente de teste e testá-lo até que ele passe, ou seja, capacidade de repetição, testabilidade e mensurabilidade; Você está pensando em colocar imagens de vm no controle de versão, porque você gostaria de repetibilidade do sistema operacional e implementações de configuração.

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

  • Kickstarts (baseado em RedHat), Preseed (baseado em Debian), WDS (MS Windows) para implantar ambientes conhecidos de SO
  • Spacewalk / Satellite (baseado em RedHat), Políticas de Grupo (MS Windows) para configuração e gerenciamento de pacotes
  • Sistemas de empacotamento YUM e APT para gerar, implantar, atualizar e remover pacotes (conjuntos de binários, dados e configurações que compõem um software)
  • Nagios, OpenNMS e SCOM para monitorar
  • 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 construções
  • Selênio e robô para testes
  • Bugzilla, Request Tracker e Jira para gravação, comunicação e rastreamento

Mais uma vez, esta não é uma lista abrangente, mas algo que mantenho na mente para me orientar e espero que também o ajude.

    
por 25.05.2012 / 04:20
15

Disclaimer: Eu sou um dos desenvolvedores do Puppet.

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

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

Ferramentas como Chef , Marionete , Sal e CFEngine são ferramentas populares para lidar com isso 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 na 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 o pessoal de Operações, ele também tende nessa direção.

    
por 25.05.2012 / 03:43
1

Em um mundo Windows, esses problemas relacionados ao gerenciamento do ciclo de vida do aplicativo estão sendo tratados com o System Center 2012.

No System Center Virtual Machine Manager (SCVMM), os serviços são definidos usando 'Service Templates' (por exemplo, um serviço de três camadas clássico) e os ambientes de execução são definidos como 'Clouds' (por exemplo, desenvolvimento, preparação, produção). Os modelos de serviço podem ser versionados e implementados (de maneira automatizada) em diferentes nuvens. Nos bastidores, o SCVMM trabalha para provisionar, implantar e configurar o hardware virtualizado (VMs, etc.) e o software (sistema operacional, 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.

    
por 26.05.2012 / 01:04