An Interest In:
Web News this Week
- April 20, 2024
- April 19, 2024
- April 18, 2024
- April 17, 2024
- April 16, 2024
- April 15, 2024
- April 14, 2024
Spring boot, githubActions e argocd
CI/CD no novidade no mundo do desenvolvimento de software, no entanto a entrega de manifestos kubernetes apartado da aplicao, uma prtica a ser seguida.
Este artigo tem por objetivo demonstrar essa prtica, atravs do action github e o argocd.
Pr-requisito: ter noo sobre docker, kubernetes, java e terraform.
Breve explicao dos recursos utilizados neste exemplo
- Spring boot: framework para aplicaes java, que utiliza padres de projeto para controlar a injeo de dependncia, alem de prover objetos para solucionar diversos problemas. A aplicao executa dentro do seu contexto, alem de possuir um webservice embarcado (modelo imperativo o apache e reativo o netty).
- Terraform: utilizado para criar recursos/infraestrutura na nuvem ou local via cdigo. Nesse artigo criaremos um cluster kubernetes utilizando terraform localmente, em conjunto com kind.
- Argocd: ele inspeciona um repositrio que possui os manifestos kubernetes, e caso ocorra alguma alterao, o mesmo os aplica. Em resumo ele cuida da entrega dos manifestos kubernetes dentro do cluster.
- Githubactions: recurso do github que cuida do CI/CD. No nosso projeto utilizaremos para efetuar o deploy da aplicao, criao da imagem docker e atualizao do repositrio dos manifestos.
- Helm: instalador de pacotes dentro do cluster kubernetes.
- docker: container runtime
- Kubernetes: um orquestrador de containers.
Pr requisitos
- instalar a ultima verso do terraform
- instalar o kind, pois atravs dele criaremos o cluster kubernetes local
- docker instalado
- kubectl (cli kubernetes)
- jdk 17
- helm
- clone dos projetos:
- criao de um token dentro da sua conta github (existe um print dentro do projeto de exemplo ou seguir a orientao do prprio github https://docs.github.com/pt/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token)
Criao do cluster
Nessa etapa criaremos nosso cluster k8s, instalaremos o argocd e por ltimo criaremos a aplicao dentro do argo, onde ele vai monitorar as mudanas no repositrio https://github.com/fabriciolfj/customer-service-k8s.
Com o clone do repositrio customer-service efetuado, acesse o diretrio cluster, nele existe o arquivo main.tf, onde encontra-se o descritivo do que o terraform ir criar. Dentro do main.tf, vamos olhar para o trecho abaixo e entender o que est ocorrendo.
resource "helm_release" "argocd" { name = "argocd" repository = "https://argoproj.github.io/argo-helm" chart = "argo-cd" namespace = "argocd" version = "4.9.7" create_namespace = true values = [ file("argocd/application.yaml") ]}
O trecho acima representa o uso de um mdulo dentro do terraform. Onde ele executar as seguintes etapas:
- instalar o argo dentro do cluster, com base na configurao do arquivo application.yaml
- dentro deste arquivo encontra-se as configuraes adicionais para criar a aplicao dentro do argocd
- quando falamos em criar aplicao dentro do argocd, o repositrio git com os manifestos que sero monitorados.
- qualquer modificao nestes manifestos e submetidos ao repositrio git, estes sero re-aplicados dentro do cluster kubernetes.
Abaixo o contedo do arquivo application.yaml e em seguida o arquivo que cria a app dentro do argocd (esto no repositrio de exemplo salientado acima):
server: additionalApplications: - name: cluster-config namespace: argocd project: default source: repoURL: https://github.com/fabriciolfj/customer-service targetRevision: HEAD path: argocd/manifests/cluster #local onde encontra-se o arquivo para criar a app directory: recurse: true destination: server: https://kubernetes.default.svc syncPolicy: automated: prune: false selfHeal: false
apiVersion: argoproj.io/v1alpha1kind: Applicationmetadata: name: customer namespace: argocdspec: syncPolicy: syncOptions: - CreateNamespace=false automated: selfHeal: true # sincronizar automaticamente com o repositorio prune: true # caso exclua algum arquivo, o argo vai excluir o recurso no kubernetes destination: server: 'https://kubernetes.default.svc' namespace: customer source: path: helm #por traz usaremos o helm para efetuar o deploy, dentro do cluster repoURL: 'https://github.com/fabriciolfj/customer-service-k8s' #repositrio da app, que o argo aplicar no cluster quando houver commits. targetRevision: HEAD helm: valueFiles: - values.yaml project: default
Os demais contedos do arquivo main.tf, tem por objetivo criar o cluster k8s local, utilizando kind. obs: est fora do escopo desse artigo o detalhamento desse contudos.
Certifique-se que o docker esteja rodando na sua mquina e execute o comando abaixo para inicializar o terraform, com as configuraes do projeto, no path aonde encontra-se o arquivo main.tf:
terraform init
Em seguida vamos analisar o que ser criado, atravs do comando:
terraform plan
Teremos o seguinte resultado:
- Plan: 24 to add, 0 to change, 0 to destroy.
Original Link: https://dev.to/fabriciolfj/spring-boot-githubactions-e-argocd-3911
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To