Files
Marco Verleun 7ec71d6feb first commit
2022-12-09 15:19:59 +01:00
..
2022-12-09 15:19:59 +01:00
2022-12-09 15:19:59 +01:00
2022-12-09 15:19:59 +01:00
2022-12-09 15:19:59 +01:00
2022-12-09 15:19:59 +01:00
2022-12-09 15:19:59 +01:00
2022-12-09 15:19:59 +01:00
2022-12-09 15:19:59 +01:00
2022-12-09 15:19:59 +01:00
2022-12-09 15:19:59 +01:00
2022-12-09 15:19:59 +01:00
2022-12-09 15:19:59 +01:00

tekton-pipeline

Dit is een template directory met daarin Tekton Pipeline definities. In essentie is het een helm chart welke Tekton objecten deployed.

Aan de objecten zijn labels toegevoegd met versie nummers zodat beheer eenvoudiger gaat worden. Het maakt het dan mogelijk om op de commandline met filters te werken, e.g.:

oc get --all-namespaces  Eventlistener --selector=pipeline-version=1.0.0

Bovenstaande is uitgewerkt in een script dat in de scripts directory te vinden is. Dit script inventariseert welke versie er gedeployed is in welke namespace. Op deze manier is eenvoudig te achterhalen welke versie er wordt gebruikt en waar.

Wat is nieuw?

Nieuw tov eerdere versies is dat de volgorde van de verschillende stappen nu handmatig wordt vastgelegd. Hierdoor is er meer flexabiliteit in sequentieel en parallel processing van de verschillende stappen in de pipeline.

Ook nieuw is dat er geen gebruik meer wordt gemaakt van zgn ClusterTasks. Hierdoor is er meer flexabiliteit in versie beheer mogelijk omdat de tasks nu onderdeel zijn van de pipeline versies en mee onderhouden worden.

Een laatste wijziging is dat de triggers voor automatische builds zijn verandert. De routes die voorheen werden aangemaakt worden nu niet meer aangemaakt. I.p.v. een route als bestemming voor de Gitlab webhooks wordt nu gebruik gemaakt van de service definitie. Dit is mogelijk omdat Gitlab in hetzelfde cluster draait als Tekton en hiermee is er veel minder exposure van allerlei endpoints.

Deployment

Het hoofdproject voor de Tekton pipelines bevind zich in Gitlab repo templates/tekton-pipelines.

Deze repo bevat een helm chart met daarin voornamelijk objecten die met Tekton te maken hebben. Alle bestanden in deze repo, met uitzondering van values.yaml zijn upgradeable door een nieuwe versie over een oude te kopieren in de -ops repo waarin de diverse pipelines draaien. Doe dit bij voorkeur in een aparte branche in Gitlab zodat je de nieuwe versie kunt uittesten door in ArgoCD te verwijzen naar de nieuwe branch ipv HEAD.

Daarna pas je de file values.yaml aan. Hierin komen de pipeline definities te staan. De inhoud hiervan verschilt van pipeline tot pipeline en parameters die worden gespecificeerd zijn ook verschillend van (Tekton) task tot task.

Daarna synchroniseer je de nieuwe versie binnen Argo CD. Als dit niet lukt dan kan dat verschillende redenen hebben en zul je moeten kijken wat de oorzaak is.

Versie beheer

Iedere nieuwe versie van de pipeline template heeft een bijwerkt versie nummer in Chart.yaml staan. Bij een nieuwe release wordt dit nummer opgehoogd en het matched het versienummer in Gitlab.

Pipelines

Pipelines worden geconfigureerd in values.yaml zoals vermeldt. Deze file wordt gebruikt om templates te voeden in de template/ directory.

Door middel van templates worden Tekton tasks geconfigureerd die samen een pipeline vormen. In de template files worden de Tekton tasks gegroepeerd op functie.

Een eenvoudige pipeline kan er als volgt uitzien:

     Pipeline:
       +-------------------------------------------------------------+
       |                                                             |
       | Collectors:                      Builders:                  |
       |  +--------------------+           +--------------------+    |
       |  |                    |           |                    |    |
       |  |                    |           |                    |    |
     --+->|                    +---------->|                    +----+--->
       |  |                    |           |                    |    |
       |  |                    |           |                    |    |
       |  +--------------------+           +--------------------+    |
       |    name: clone-gitrepo <----+       name: build             |
       |    type: git                |       type: kaniko            |
       |                             +------ runAfter: clone-gitrepo |
       +-------------------------------------------------------------+
          name: example-1
          namespace: test
          autobuild: false

Deze pipeline heeft een (collector) task om een git repo te clonen (type git). Pas als deze stap afgerond is wordt stap 2 uitgevoerd (runAfter). De tweede stap is een builder die kaniko (type kaniko) gebruikt om een image te maken. De pipeline zelf heeft een naam en draait in een namespace.

Dit voorbeeld is uitgewerkt in values.yaml en verbergt de complexiteit van de onderliggende Tekton tasks enigzins.