GitLab Pipelines in Kubernetes

GitLab-pijplijnen uitvoeren in Kubernetes met behulp van een lokale GitLab-instantie c2d-gitlab.

Deze handleiding beschrijft hoe we GitLab CI/CD-pijplijnen kunnen draaien op Kubernetes met behulp van een zelf beheerde / zelf gehoste GitLab CE-installatie. Het verplaatst in feite het voorbeeldproject examples/kubernetes/gitlab-docker-build dat gebruikmaakt van gitlab.com  naar een lokale GitLab CE-instantie die draait op c2d-gitlab.

Overzicht

Vereisten

Maak de reverse en forward proxy c2d-rproxy1.

c2
unset PLAY  # zorg dat alle plays draaien
vagrant up c2d-rproxy1

Voor meer informatie over de verschillende rollen die c2d-rproxy1 vervult in dit project:

Voor de eerste twee vereisten zou het uitvoeren van het commando vagrant up c2d-rproxy1 c2d-gitlab voldoende moeten zijn.

Aangepaste docker-in-docker (dind) afbeeldingen

Het project examples/kubernetes/gitlab-docker-build dat is geïmporteerd in onze lokale GitLab CE-instantie die draait op c2d-ks1 gebruikt aangepaste Docker-afbeeldingen, zie .gitlab-ci.yml. De gerelateerde projecten die deze twee afbeeldingen maken zijn:

De enige aanpassing die in deze projecten is gedaan, is het importeren van de c2d root ca bundle c2.crt  , zie Dockerfile  .

Zonder deze aanpassing zullen Docker-opdrachten mislukken met het bericht:

x509: certificaat ondertekend door onbekende autoriteit

GitLab project importeren

Maak een openbare namespace https://gitlab.c2platform.org/c2platform  en vervolgens Project importerenRepository via URL

EigenschapWaarde
URLhttps://gitlab.com/c2platform/examples/kubernetes/gitlab-docker-build.git 
ZichtbaarheidsniveauOpenbaar

GitLab Runner

Haal registratietoken op

Ga naar https://gitlab.com/c2platform/examples/kubernetes/gitlab-docker-build  en InstellingenCI/CD  en dan Runners en kopieer het registratietoken.

Bewerk values.yml

Plaats het registratietoken in values.yml.

vagrant ssh c2d-ks1
nano /vagrant/doc/howto-kubernetes-gitlab-local/values.yml  # en update registratietoken

Runner installeren

Voer het script gitlab-runner.sh uit

source /vagrant/doc/howto-kubernetes-gitlab-local/gitlab-runner.sh

Verifiëren

Controleer de log van de GitLab Runner pod. Het zou het volgende bericht moeten tonen:

Runner succesvol geregistreerd

Toon mij
vagrant@c2d-ks1:~/scripts/microk8s/gitlab/gitlab-runner$ kubectl logs -f gitlab-runner-c46457f8b-6dr7g
Registratiepoging 1 van 30
Runtime platform                                    arch=amd64 os=linux pid=14 revision=456e3482 version=15.10.0
WAARSCHUWING: Draaien in gebruikersmodus.
WAARSCHUWING: De gebruikersmodus vereist dat u handmatig buildsverwerking start:
WAARSCHUWING: $ gitlab-runner run
WAARSCHUWING: Gebruik sudo voor systeemmodus:
WAARSCHUWING: $ sudo gitlab-runner...

WAARSCHUWING: Er lijkt een probleem te zijn met uw configuratie
jsonschema: '/runners' valideert niet met https://gitlab.com/gitlab-org/gitlab-runner/common/config#/$ref/properties/runners/type: verwachte array, maar kreeg null
Unieke systeem-ID gerecreëerd                    system_id=r_pjr46VlRtCXO
Samenvoegen van configuratie uit sjabloonbestand "/configmaps/config.template.toml"
WAARSCHUWING: Ondersteuning voor registratietokens en runnerparameters in het 'register'-commando is afgeschaft in GitLab Runner 15.6 en zal worden vervangen door ondersteuning voor authenticatietokens. Voor meer informatie, zie https://gitlab.com/gitlab-org/gitlab/-/issues/380872
Runner registreren... gelukt                     runner=GR1348941TvUfy4ig
Runner is succesvol geregistreerd. Voel je vrij om deze te starten, maar als hij al draait, zou de configuratie automatisch moeten worden herladen!

Configuratie (met het authenticatietoken) is opgeslagen in "/home/gitlab-runner/.gitlab-runner/config.toml"
Runtime platform                                    arch=amd64 os=linux pid=7 revision=456e3482 version=15.10.0
Meervoudige runners starten vanaf /home/gitlab-runner/.gitlab-runner/config.toml...  builds=0
WAARSCHUWING: Draaien in gebruikersmodus.
WAARSCHUWING: Gebruik sudo voor systeemmodus:
WAARSCHUWING: $ sudo gitlab-runner...

WAARSCHUWING: Er lijkt een probleem te zijn met uw configuratie
jsonschema: '/runners/0/kubernetes/node_tolerations' valideert niet met https://gitlab.com/gitlab-org/gitlab-runner/common/config#/$ref/properties/runners/items/$ref/properties/kubernetes/$ref/properties/node_tolerations/type: verwachte object, maar kreeg null
Configuratie geladen                                builds=0
listen_address niet gedefinieerd, metrics & debug endpoints uitgeschakeld  builds=0
[session_server].listen_address niet gedefinieerd, sessie-endpoints uitgeschakeld  builds=0
Initialiseren uitvoerderproviders                     builds=0

Als je de pod binnengaat, let dan op de bestanden /home/gitlab-runner/.gitlab-runner/certs/gitlab.c2platform.org.crt en /home/gitlab-runner/.gitlab-runner/config.toml

Toon mij
vagrant@c2d-ks1:~$ kubectl exec -it gitlab-runner-c46457f8b-6dr7g -- sh
/ $ ls /home/gitlab-runner/.gitlab-runner/certs
gitlab.c2platform.org.crt
/ $ cat /home/gitlab-runner/.gitlab-runner/config.toml
concurrent = 10
check_interval = 30
log_level = "info"
shutdown_timeout = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "gitlab-runner-c46457f8b-6dr7g"
  url = "https://gitlab.c2platform.org/"
  id = 1
  token = "yU1z6fGDjbr2pngVGh3A"
  token_obtained_at = 2023-03-28T05:57:34Z
  token_expires_at = 0001-01-01T00:00:00Z
  executor = "kubernetes"
  [runners.cache]
    MaxUploadedArchiveSize = 0
  [runners.kubernetes]
    host = ""
    bearer_token_overwrite_allowed = false
    image = "ubuntu:20.04"
    namespace = "gitlab-runner"
    namespace_overwrite_allowed = ""
    privileged = true
    node_selector_overwrite_allowed = ""
    pod_labels_overwrite_allowed = ""
    service_account_overwrite_allowed = ""
    pod_annotations_overwrite_allowed = ""
    [runners.kubernetes.pod_security_context]
    [runners.kubernetes.init_permissions_container_security_context]
    [runners.kubernetes.build_container_security_context]
    [runners.kubernetes.helper_container_security_context]
    [runners.kubernetes.service_container_security_context]
    [runners.kubernetes.volumes]

      [[runners.kubernetes.volumes.empty_dir]]
        name = "docker-certs"
        mount_path = "/certs/client"
        medium = "Memory"
    [runners.kubernetes.dns_config]
/ $

Natuurlijk zou je ook de runner onder de Runners sectie moeten zien via CI/CD-instellingen  .

Pipeline draaien

Nu er een projectrunner beschikbaar is, kunnen we de pipeline starten via CI/CDPipelines  .