Já abordamos anteriormente os artigos: “Habilitando o Continuous Deployment em empresas regidas por SOX” e “Change Management e DevSOXOps com Azure DevOps” para discutir como as empresas regidas por compliance realizam frequentemente deploys de releases em meio ao processo de change management.
Se por um lado o Azure DevOps possui o Pipeline de Build e Release para criar as esteiras de implementação e gerenciar o ciclo de vida da aplicação, o ServiceNow é uma solução completa de IT Service Management, possuindo, entre outros, o Incident Management, Problem Management, Change and Release Management, Request Management, etc.
A Microsoft lançou a integração do Azure DevOps com o ServiceNow, incluindo a extensão do ServiceNow no pipeline de release.
A ideia é reduzir os riscos associados ao processo de gestão da mudança, incorporando os benefícios de práticas DevOps como redução do tempo de deploy, intervenções manuais e etc, com os controles de gestão de serviços.
E assim podemos, por exemplo, criar uma nova requisição ou atualizar o status de uma change, utilizando o recurso de Gates do Azure DevOps.
Vamos começar pelas instalações! Os primeiros passos, são:
1 – Instalação da extensão do ServiceNow no Azure DevOps.
2 – Solicitar uma nova instância no ServiceNow Developers no ServiceNow. Essa instância deve ser non-developer.
3 – Instalação do App Azure Pipelines no ServiceNow. Requer HI credentials (algum administrador da conta no ServiceNow pode conceder essa permissão) ou ser Technology Partner Program.
E atribuir a permissão de x_mioms_azpipeline.pipelinesExecution
ao usuário que será utilizado no Service Connection do Azure DevOps (para criar a conexão com o ServiceNow).
Azure DevOps
Após a instalação do ServiceNow Change Management, crie um novo Service Connection no Azure DevOps (Project Settings > Pipelines > Service connections). Defina as seguintes configurações:
- Connection name: insira o nome desejado para a conexão com o ServiceNow
- ServiceNow Url: é a URL da instância que será utilizada
- Username: usuário criado (ou configurado) com a permissão já definida
- Password: a senha definida na configuração do usuário (no ServiceNow)
Na Release Pipeline, adicione um pre-deployment gate, incluindo a conexão que acabamos de criar. É o campo ServiceNow connection.
A documentação da Microsoft possui uma descrição para o preenchimento de todos os campos.
Essas configurações permitem a abertura de uma mudança no ServiceNow. Entre os principais inputs:
- Category: a categoria da mudança (
Hardware
,Network
,Software
) - Priority: a prioridade da mudança
- Risk: o risco da mudança
- Impact: o impacto da mudança no negócio
- Configuration Item: o item de configuração da mudança
O Gates produz variáveis de output, como por exemplo:
- CHANGE_REQUEST_NUMBER: número da mudança criada no ServiceNow
- CHANGE_SYSTEM_ID: ID da mudança criada no ServiceNow
Essa variável de output pode ser acessada utilizando o prefixo PREDEPLOYGATE. Por exemplo, a variável gate-servicenow
(definida no campo reference name) pode ser utilizada com a sintaxe $(PREDEPLOYGATE.gate-servicenow.CHANGE_REQUEST_NUMBER)
.
Ao executar o deploy da release, uma nova mudança será criada no ServiceNow. Como o Success Criteria (tela anterior) está definido em “Implement”, a mudança será liberada quando for alterada para esse status no ServiceNow.
ServiceNow
Então, por exemplo, quando o gestor da mudança acessar a ferramenta do ServiceNow, haverá uma nova mudança em sua fila. Ao colocar a mudança em “Implement”, a condição pre-deployment configurada no Gates será disparada, liberando a release.
Azure DevOps
Em seguida, adicione um novo Agentless job com a extensão Update ServiceNow Change Request ao final do seu release pipeline. Novamente, utilize a conexão criada anteriormente em ServiceNow connection e o status que deseja colocar a mudança após a implementação da release. No meu exemplo, coloquei o status como “Closed”.
Após a execução , o status do Deployment Gates fica disponível e se bem sucedida, a mudança será fechada automaticamente no ServiceNow.