Atividade 08 - Gitlab CI-CD - Gitlab-runner
Crie um grupo no Gitlab chamado curso-kubernetes-<USUARIO>
Clique em +
Clique em New Group
Create group
Insira um nome para o grupo.
Como o nome precisa ser único, uma sugestão é
curso-kubernetes-<USUARIO>
Clique em Create group
Adicione um runner ao grupo criado
Clique em Build -> Runners
Clique em New Group Runner
Adicione a tag
buildao runnerClique em Create Runner
Copie a URL e o Token informados
Criando o gitlab-runner no kubernetes
Para criar o runner vamos utilizar o helm-chart oficial do gitlab-runner
Obtendo o values padrão
helm show values gitlab-runner --repo https://charts.gitlab.io > meu-values.yaml
Altere o meu-values.yaml para que fique como a seguir
gitlabUrl: https://gitlab.unicamp.br/
runnerRegistrationToken: "<TOKEN>"
rbac:
create: true
rules:
- resources: ["events"]
verbs: ["list", "watch"]
- resources: ["namespaces"]
verbs: ["create", "delete"]
- resources: ["pods"]
verbs: ["create","delete","get"]
- apiGroups: [""]
resources: ["pods/attach","pods/exec"]
verbs: ["get","create","patch","delete"]
- apiGroups: [""]
resources: ["pods/log"]
verbs: ["get","list"]
- resources: ["secrets"]
verbs: ["create","delete","get","update"]
- resources: ["serviceaccounts"]
verbs: ["get"]
- resources: ["services"]
verbs: ["create","get"]
serviceAccount:
create: true
runners:
# runner configuration, where the multi line strings is evaluated as
# template so you can specify helm values inside of it.
#
# tpl: https://helm.sh/docs/howto/charts_tips_and_tricks/#using-the-tpl-function
# runner configuration: https://docs.gitlab.com/runner/configuration/advanced-configuration.html
config: |
[[runners]]
[runners.kubernetes]
namespace = "{{.Release.Namespace}}"
image = "ubuntu:24.04"
builds_dir = "/tmp"
environment = ["HOME=/tmp"]
cpu_limit = "2"
cpu_request = "50m"
service_cpu_limit = "2"
service_cpu_request = "50m"
helper_cpu_limit = "500m"
helper_cpu_request = "50m"
poll_interval = 5
poll_timeout = 3600
memory_limit = "2Gi"
service_memory_limit = "2Gi"
helper_memory_limit = "64Mi"
Aplique o helm-chart:
helm install gitlab-runner gitlab-runner \
--repo https://charts.gitlab.io \
--values meu-values.yaml \
--namespace gitlab-runner \
--create-namespace
Verifique no Gitlab se o runner conectou com sucesso
No grupo, vá em Build -> Runners
O status vai mudar de
Never connectedparaOnline
Criando um pipeline no Gitlab
Vamos criar um pipeline fazer a build de um container utilizando Kaniko
Crie um projeto no grupo
Clique em +
Clique em New project/repository
Create blank project
Insira um nome para o projeto
No
Project URLescolha o grupo que vocé criouClique em Create project
Adicione no projeto os arquivos Dockerfile e index.html utilizado nos exemplos anteriores
Habilite o CI/CD
Em Settings -> General, expanda Visibility, project features, permissions e marque a opção CI/CD. Clique em Save changes
Configure o registry
Em Settings -> CI/CD, expanda Variables, adicione as seguintes variáveis:
CI_REGISTRY= registry.<IP_DO_INGRESS>.nuvem.unicamp.brCI_REGISTRY_USER= <seu usuário robo do registry>CI_REGISTRY_PASSWORD= <senha do usuário robo do registry>
Essas variaveis podem ser adicionadas no grupo, assim todos os projetos do grupo terão acesso a essas credenciais do registry
Crie a pipeline
Em Build -> Pipeline Editor clique em Configure pipeline
Altere o arquivo para ficar como a seguir
variables:
GIT_STRATEGY: clone
stages:
- build
build:
stage: build
tags:
- build
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
before_script:
- echo "{\"auths\":{\"${CI_REGISTRY}\":{\"auth\":\"$(printf "%s:%s" "${CI_REGISTRY_USER}" "${CI_REGISTRY_PASSWORD}" | base64 | tr -d '\n')\"}}}" > /kaniko/.docker/config.json
script:
- /kaniko/executor --context "$CI_PROJECT_DIR" --destination "${CI_REGISTRY}/curso/${CI_PROJECT_NAME}:${CI_COMMIT_SHORT_SHA}" --dockerfile "$CI_PROJECT_DIR/Dockerfile"
Clique em Save
Visualize o pipeline
Clique em Build -> Pipelines e clique na pipeline e no job para verificar os logs
Verefique a execução de novos pipelines
Modifique o arquivo index.html e efetue um commit/push no git
Verifique se o pipeline foi executado com sucesso
Projeto
No repositório do projeto, habilite o CI nas configurações do projeto.
Faça o CI para fazer o build automatico do container da aplicação para o registry criado na aula passada.