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 build ao runner

  • Clique 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 connected para Online

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 URL escolha o grupo que vocé criou

  • Clique 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.br

  • CI_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.