CI/CD é um termo abrangente que cobre várias fases do DevOps. CI (integração contínua) é a prática de integrar alterações de código em um repositório várias vezes ao dia. CD tem dois significados: a entrega contínua automatiza as integrações de código, enquanto a implementação contínua libera automaticamente as compilações finais para os usuários finais. Os testes frequentes de CI/CD reduzem erros e defeitos de código, tornando-os essenciais para todo fluxo de trabalho de fluxo de trabalho.
- Autores
- Visão Geral
- Pré-requisitos
- Configuração
- Uso
- Licença
Bruno Andrade
Raphael Freixo
Vinícius Peters
A implementação do pipeline CI/CD é necessária para agilizar e padronizar a estrutura do seu ambiente, garantindo a qualidade do código desde o ambiente de desenvolvimento até a sua implementação no ambiente de produção, o que é feito automaticamente após a aprovação dos artefatos. Este documento contém o procedimento para implementar essa estrutura de CI/CD usando o Github Actions e o ambiente Azure.
- Ter um usuário de serviço com permissão de acesso ao Synapse.
- Conta no GitHub com um repositório criado.
- Permissão de LEITOR no grupo de recursos.
- Permissão de CONTRIBUIDOR no Synapse-Production.
- Conceder permissão do Service Principal.
- Ter um ambiente Synapse de Desenvolvimento (DEV) e Produção (PROD).
Em seu repositório Github na aba Code, clique em creating a new file.
No caminho de pastas, crie um arquivo chamado readme.yml na seguinte estrutura ".github/workflows/readme.yml". Após feito isso, clique em Commit Changes...
Abra o Synapse DEV e nos ícones à esquerda selecione Manage e em seguida, clique em Git configuration. Feito isso, no meio da tela, selecione a opção de Configure.
Em Repository Type, selecione o GitHub e em Github repository owner coloque o nome do proprietário da conta.
Em Repository name, selecione o repositório desejado. Para os demais campos, deixe como está e em seguida clique em Apply.
No canto superior esquerdo, clique em New Branch[Alt+N].
Coloque um nome para sua branch e crie baseada na main conforme o exemplo abaixo. Em seguida, clique em Create.
A branch workspace_publish será criada automaticamente após ser feito uma publicação no Synapse DEV. Para isso, vamos fazer uma publicação na mesma branch que você acabou de criar! Abra uma pipeline com uma atividade Set variable e crie uma variável. Após criado, clique em Commit all.
clique em OK.
Feito isso, precisará ser criado um Pull Request. Para isso, clique no nome da sua branch no canto superior esquerdo e procure por Create pull request[Alt+P].
OBS: Nos passos a seguir, só é possível aprovar um pull request caso você seja o aprovador. Caso contrário, faça uma requisição para o aprovador.
Abra seu repositório Github, clique em Create pull request ou Compare & pull request como mostra a imagem abaixo.
Vai abrir uma aba Open a pull request. Clique em Create pull request.
Merge pull request.
Confirm Merge.
Publish.
O conteúdo do arquivo syn-deploy.yml será usado para as atividades abaixo.
Dentro do seu repositório do GitHub, selecione a aba Code e procure o arquivo syn-deploy.yml nas pastas ao lado, copie todo código e cole no arquivo que você acabou de criar seguindo o caminho mostrado na imagem acima.
E no final deve ser colocado o arquivo com os parâmetros de ambiente, no caso o arquivo syn-deploy.yml deve ser posto seguindo o path da imagem mostrada acima.
Dentro do arquivo syn-deploy.yml, você deve adequar as três linhas TemplateFile,ParametersFile e OverrideArmParameters com o nome do seu workspace, como mostra na imagem abaixo destacado em vermelho. Observe que, o arquivo contém linhas que serão valores herdados do Github Secrets(considere os que estão com "${{secrets.____}}). Esses serão os secrets que terão que ser atribuídos no Github.
Esses serão os parâmetros que serão herdados no Github:
- WORKSPACENAME
- RESOURCEGROUP
- CLIENTID
- CLIENTSECRET
- SUBSCRIPTIONID
- TENANTID
Vá em Settings.
Ao lado esquerdo da tela, vá em Secrets and variables e Actions. Na aba Secrets, selecione New repository secret. Nesse repositório que será atribuído o valor das variáveis que serão herdadas no arquivo syn-deploy.yml.
Vale ressaltar que todos esses parâmetros devem ser preenchidos com os dados do ambiente de Produção.
Atribua o nome do secret e o valor. Nesse caso, será atribuído para cada um desses:
- WORKSPACENAME
- RESOURCEGROUP
- CLIENTID
- CLIENTSECRET
- SUBSCRIPTIONID
- TENANTID
Exemplo:
Name = WORKSPACENAME
Secret = nome do seu workspace
Em seguida, clique em Add secret.
Para os parâmetros:
- WORKSPACENAME
- RESOURCEGROUP
- SUBSCRIPTIONID
No portal Azure, procure pelo seu Synapse workspace de produção. Na aba da esquerda ao lado, vá em Overview e encontrará as informações dos três parâmetros listados acima.
Para os parâmetros :
CLIENTID
CLIENTSECRET
TENANTID
Deverá ser criado um Service Principal.Na barra de pesquisa digite App Registrations e selecione.
Feito isso, clique em +New registration.
Após isso, atribua um nome qualquer e clique em Register.
Após criado, você será levado para a página Overview do Service Principal. Aqui, você encontrará o CLIENTID e TENANTID.
Para o CLIENTSECRET, na barra de opções lateral esquerda selecione a opção Certificates & secrets. Após isso, clique em + New client secret.
Em Description coloque uma descrição qualquer ou um nome. Em seguida, clique em Add .
Após criado aparecerá na coluna Value o valor do CLIENTSECRET. Grave esse valor, pois ele só aparecerá uma vez e não será possível ver novamente!
Com todos os parâmetros preenchidos dos passos anteriores, entre no seu workspace do Synapse de Produção e vá nas opções de Access Control(IAM) e clique em Role assignment. Procure mais acima a opção + Add.
Será atribuído a permissão de Reader do Service Principal ao resource group de produção. Para isso, selecione a primeira opção de Reader e em seguida em Next.
Na aba Members, clique na opção + Select members. Utilize a barra de pesquisa ao lado para escolher o usuário e clique em Select.
Feito isso, clique em Review + assign.
Dado a permissão de Reader, repita o passo anterior, mas agora dê a permissão de Contributor ao workspace de produção. Clique novamente em Role Assigment e depois em +Add. Selecione a aba Privileged Admnistrator roles, e clique em Contributor. Em seguida, clique em Next.
Em Members, clique em em +Select members e selecione o usuário para aplicar a permissão de Contributor.
Clique em Review + assign.
Por fim, abra o Synpase Studio do Synapse de Produção.
Vá até a opção Manage na lateral esquerda e Access control. Clique em + Add.
Selecione a função Synapse Artifact Publisher. Na barra de baixo você deve selecionar o usuário Service Principal anteriormente criado e clicar em Apply.
Deverá ser criado um Key vault para os dois ambientes DEV e PROD.
No portal Azure, vá até a barra de pesquisa e digite por Key Vaults.
Clique em +Create.
Após isso, preencha as informações de criação do key vault atribuindo o resource group que foi criado no Synapse de Produção. Em seguida, vá até Review+Create.
No Key Vault de produção, clique na lateral esquerda em Access Control(IAM), clique em +Adde Add role assignment.
Em Role Assignments procure por Key Vault Secrets Officer. Em seguida, clique em Next.
Feito isso, vá em Members e na opção Assign access to selecione Managed identity. Depois de selecionado, clique em +Select Members.
Em Managed Identity selecione Synapse workspace(). Depois disso, selecione seu ambiente Synapse de Produção.
Em seu Workspace de DEV, vá até Manage e Linked services. Clique em + New.
Na barra de pesquisa pesquise por Azure Key Vault e clique em Continue.
Nome: Atribua um nome para o Key Vault.
Assinatura do Azure: Selecione sua assinatura.
Nome do Azure Key Vault: Selecione o Key Vault criado do ambiente de produção.
Para os demais, deixe padrão. Após isso, clique em Commit.
O próximo passo você precisará publicar algo novamente em DEV com o Linked Service devidamente criado( repita o passo do tópico Workspace_publish).
Após isso você deverá entrar em seu arquivo TemplateWorkspace.json e buscar o nome do KV que foi gerado automaticamente como mostra abaixo:
Copie o "LS_KV_DEV_properties_typeProperties_baseUrl" e o defaultValue. Eles serão utilizados no próximo passo para a criação do arquivo ParameterPRD.json.
No seu repositório Github, crie um arquivo chamado ParameterPRD.json dentro da pasta do seu workspace de DEV e cole os parâmetros copiados anteriormente no seguinte formato:
O nome do arquivo ParameterPRD.json, certifique-se de que o seja exatamente igual ao nome que está no arquivo syn-deploy.yml em OverrideArmParameters.
Em sua branch no ambiente de Desenvolvimento caso haja mudanças, o processo para levar para produção irá seguir esses passos:
Realize um commit com suas mudanças. No exemplo abaixo, iremos utilizar a "Pipeline 2" na branch produto:
Crie um Pull request para branch principal. No exemplo é a main branch
Após ter seu Pull request aprovado, a main branch irá possuir todas as suas alterações. Portanto, o responsável pelo Pull Request, deverá clicar em Publish como mostra a imagem abaixo:
Aguarde até que a mensagem de sucesso apareça em sua tela:
Após isso, entre no ambiente de produção/ e você verá suas alterações no ambiente de produção:
Esteira CI/CD finalizada!