Sua pergunta não parece ter nenhuma suposição sobre a plataforma / sistema operacional de que trata. É por isso que pode fazer sentido adicionar uma resposta sobre como isso geralmente é feito / resolvido em um ambiente de mainframe, onde os "engenheiros" (como no título da sua pergunta) são na verdade grupos de pessoas onde dezenas (possivelmente centenas) de pessoas são. envolvidos. Minha resposta é baseada no uso do produto SCM em que estou mais familiarizado (não tenho certeza se é necessário divulgar o nome do produto).
1. Arquitetura
Aqui estão os destaques de como eu responderia sua pergunta:
- Todo o código (e artefatos relacionados, como executáveis, etc) é armazenado em arquivos que, juntos, são o que chamamos de estrutura da biblioteca .
- Para cada ambiente em cada sistema de destino (possivelmente remoto), existe um servidor (uma "tarefa iniciada" no mainframe speak), que cuida das atualizações ALL (repeat: ALL) para qualquer coisa na estrutura da biblioteca. Existem algumas exceções (como pessoal de segurança ou equipe de gerenciamento de espaço), mas, além disso, ninguém (repita: ninguém) tem autorização para aplicar atualizações a qualquer arquivo nessa estrutura de biblioteca. Em outras palavras: o servidor obtém autoridade de atualização exclusiva para toda a estrutura da biblioteca . Atenção: as pessoas da OPS vão enlouquecer se você entrar para limitar o acesso delas (a princípio elas vão resistir ...), portanto, verifique se você está coberto pela gerência superior (CxO) para impor essas regras de acesso ...
- As mudanças reais do software podem consistir em um único componente (uma pequena correção de código no meio da noite ...), ou também pode ser centenas ou milhares de fontes, executáveis ou quaisquer outros artefatos (durante um fim de semana de lançamento). Para torná-los gerenciáveis, as coisas que devem ser movidas (mais ou menos) juntas, ao mesmo tempo, são agrupadas no que é chamado de pacote de mudança de software .
Com o exposto acima, qualquer tipo de atualização a ser aplicada pelo servidor à estrutura da biblioteca só será possível através de um fluxo de trabalho bem definido, que chamamos de ciclo de vida de um pacote de mudança de software (SDLC, se você preferir). Para realmente executar as várias etapas desse fluxo de trabalho, é necessário que isso aconteça:
- Somente o servidor executará as etapas necessárias (e pré-configuradas).
- O servidor executará apenas uma etapa específica (= atualizar algo em algum lugar da estrutura da biblioteca), depois que as aprovações necessárias (de seres humanos) forem reunidas para executar essa etapa.
- As aprovações só podem ser concedidas por usuários que possuem uma função que lhes permita (= permissão) emitir tais aprovações.
2. Funções e permissões
O servidor garantirá que o usuário que está tentando fazer algo acontecer (como 'aprovar algo') só poderá fazê-lo, se as permissões do usuário forem apropriadas. Essa parte é fácil. Mas você não deseja usar o sistema SCM para administrar todas essas permissões para todos os usuários envolvidos, é isso que pertence ao seu sistema de segurança (não ao sistema SCM!), Para que você possa adaptar seu fluxo de trabalho (no seu sistema SCM) para verificar essas permissões sempre que apropriado. Os passos abaixo fornecem mais alguns detalhes sobre isso.
Etapa 1: configurar as permissões (no sistema de segurança)
Defina entidades de segurança em seu sistema de segurança, com nomes bem definidos para essas entidades. Algumas amostras (adicione tantas similares para atender às suas próprias necessidades):
PrmUnit
, usado para obter permissão para solicitar um Promover para dizer teste de unidade .
PrmQA
, usado para obter permissão para solicitar um teste para promover o teste de Qa (vamos supor que este seja o nível mais alto de teste).
PrdEnduser
, usado pelos usuários finais envolvidos em algum nível de teste, para indicar que eles estão satisfeitos com os resultados produzidos por algum tipo de teste. E por causa disso, esses usuários finais concordam com a mudança na estrutura da biblioteca.
PrdRelmgnt
, usado pelos gerenciadores de versão para autorizar uma Ativação em produção (= o último / mais alto nível na estrutura da biblioteca).
Defina grupos de usuários no seu sistema de segurança. Algumas amostras (adicione tantas similares para atender às suas próprias necessidades):
GrpDevs
, que (digamos) corresponde aos seus desenvolvedores (provavelmente mais que apenas 1).
GrpEnduser
, que (digamos) corresponde aos seus usuários finais (pelo menos 1, de preferência com mais usuários semelhantes).
GrpRelMgnt
, que (digamos) corresponde aos seus gerenciadores de versão (pelo menos 1, de preferência mais alguns usuários).
Conceda permissões , também usando o seu sistema de segurança, para permitir o acesso a " entidades de segurança " selecionadas para " grupos de usuários " selecionados . Para continuar o exemplo acima, eis o que parece apropriado (adapte-se às suas próprias necessidades):
- O grupo
GrpDevs
obtém acesso à (apenas!) Entidade de segurança PrmUnit
.
- O grupo
GrpEnduser
obtém acesso à (apenas!) Entidade de segurança PrdEnduser
.
- O grupo
GrpRelMgnt
obtém acesso à (ambos!) Entidade de segurança PrmQA
e PrdRelmgnt
.
Etapa 2: configurar o fluxo de trabalho (no sistema SCM)
Depois que as permissões são configuradas no seu sistema de segurança (como na Etapa 1), tudo o que resta a fazer no seu sistema SCM é configurar como as várias etapas no ciclo de vida correspondem às entidades de segurança relacionadas no seu sistema de segurança. Ou seja, apenas os usuários que têm o acesso apropriado à entidade de segurança necessária têm permissão para solicitar ao servidor que execute a etapa correspondente no fluxo de trabalho.
Aqui estão alguns exemplos de como você configuraria seu sistema SCM para fazer alguma mágica acontecer:
- Se um usuário tiver acesso
PrmUnit
, ele poderá solicitar um teste Promover à Unidade . Obviamente, os usuários do grupo GrpDevs
são os usuários autorizados para isso (nota: não, por exemplo, os usuários do grupo GrpRelMgnt
).
- Se um usuário tiver acesso
PrmQA
, ele poderá solicitar um teste de Promoção ao controle de qualidade . Obviamente, os usuários em grupo GrpRelMgnt
são os usuários autorizados para isso (nota: não, por exemplo, os usuários em grupo GrpDevs
ou em grupo GrpEnduser
).
- Se um usuário tiver acesso
PrdEnduser
, esse usuário poderá autorizar a alteração avançando na estrutura da biblioteca (que normalmente é um pré-requisito para que os usuários do grupo GrpRelMgnt
possam revisar uma alteração). Obviamente, os usuários do grupo GrpEnduser
são os (únicos) usuários autorizados para isso.
- Se um usuário tiver acesso
PrdRelmgnt
, ele poderá autorizar uma Ativação em produção (= o último / mais alto nível na estrutura da biblioteca).
3. Espere o inesperado e esteja pronto para ele
O texto acima é apenas um plano, o que, com sorte, ajuda a entender como, no final, é o servidor que cuida da segregação de tarefas ... desde que você tenha o CxO que o cobre para impor algumas regras de acesso que nem todo mundo vai gostar.
Para concluir a imagem, conforme explicado acima, o servidor cria uma trilha de auditoria (log) de qualquer coisa que esteja acontecendo no sistema. Para que, a qualquer momento, sempre seja possível responder perguntas como
O que aconteceu quando e por que e qual usuário autorizado realmente o aprovou ... antecipadamente?
Mas, provavelmente, a parte mais difícil é ter ferramentas de relatório adequadas disponíveis (e saber usá-las). Pelo menos (facilmente) satisfazer solicitações de auditores de TI (suas perguntas podem ser muito desafiadoras). Mas também aponte para registros de log relevantes em seu sistema SCM para responder a todos os tipos de perguntas "O que aconteceu" em situações de crise em que (parte da) produção está inoperante.
PS: Deixo para o julgamento de todos, se minha resposta for sim ou não, compatível com o DevOps.