CI/CD alapok

A verziókezelők lehetőséget adnak arra, hogy az egyes műveleteik különféle programok lefutását triggereljék. Ez az alapja az ún CI/CD (Continuous Integration (CI): folyamatos integráció és Continuous Delivery (CD): folyamatos szállítás.) megoldásoknak.

SSH kulcs felvétele a GitHubba

Amennyiben a GitHubba ssh-n szeretnél bejelentkezni, érdemes felvenned az adott projekthez hozzáférést biztosító nyilvános kulcsokat. Ehhez a Profil / Settings / SSH and GPK Keys menüben kell hozzáadnod mindazok kulcsát, akik számára hozzáférést szeretnél biztosítani.

Repository elkészítése

A Kulcsot a Title mezőben érdemes elnevezned, meghatároznod a felhasználási körét és be kell illesztened magát a nyilvános kulcsot. Unixon a kulcsodat a ~/.ssh/id_rsa.pub fájl tartalmazza, az én esetemben ez az alábbi:

koczka@columbo:~$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDMTTLjL9YctmaKeoKRlYEC0H3Q1LyQkrWUPt9FHYxLM1+ZbSpSJwtKqzk4XPiHCzUJ/nch5ilaOFcA0MUkH7kkgonRbyuS2uNSgYGTmwosKZC88TaeF2ICkWwjC5AZUzRJ2JKg4/PPE6Ei15p+dANS55WktEvEpZcaNZLkNZXyUXS35mSDQAuLCgfmFGO+xV2bQyvCJcXL1+tX+kTm2+90KgHb83/AS8px3gqQr+PYI5sdSsvADnApUSgfSHQ4plssS/5Mv5/Z047qQZ1Zt+ltIxY9c5wIHVbU8ThNYvveLI6mOEp6ghqgsKXN9x9QC6C5l9KTkP0Wi1Izu8/FQvWUHR4dwiRQUT7/mes30LR98fgTktYP7zdF5BN119V5rReIiGJiWd3tGGNmCQ08S3w2dh2xh7yRBlU4suMEOxw1f76gEV30Tqoo4skJKf5bodVB48OuAiPrEfXImGX6F7lcm22EDEaQvek29QGZQDC6BsxyV4bCIe0hxznozpcSEp0= koczka@columbo.uni-eszterhazy.hu

Amennyiben nem lenne ilyen fájlod, generálj egy kulcsprát az ssh-keygen paranccsal:

koczka@columbo:~$ ssh-keygen
Repository elkészítése

Példa

Készítsünk egy GitHub repository-t, mely a feltöltött programfájlokat egy linterrel ellenőrzi! A Git-et most parancssorból fogjuk kezelni.

Repó elkészítése

  1. Jelentkezz be a GitHubba a saját felhasználói hozzáféréseddel!

  2. Hozz létre egy új repository-t ci-cd-demo néven! Tültsd ki a leírás és a Licensz mezőket is!

  3. A tesztelést végző action scripteket nem szeretnénk mozgatni, ezért a .github könyvtárat hozzáadjuk a .gitignore fájl tartalmához, majd commitoljuk. (Add file / Create new file / .gitignore)

Repository elkészítése

A következő lépés a munkafolyamat (workflow) beállítása. Egy olyan scriptet készítünk, amely minden feltöltéskor lefut, és végrehajtja az abban foglaltakat. Ehhez a GitHub felületén az Actions menüt kell kiválasztani. Számos előre definiált konfiguráció közül választhatunk, nekünk most egy Simple workflow kell majd.

A Workflow beállítása

Nyomd meg a Create gombot, és elkészítjük a workflow fájlt. A folyamatok fájljai a .github/workflows/ könyvtárba kerülnek. Az új fájl neve legyen linter.yml, a tartalma pedig az alábbi:

name: Linter
on:
  push:
    branches: [ "main" ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3

    - name: Install pyLint
      run: pip install pylint

    - name: Run the linter
      run: python3 linter.py
      continue-on-error: false

Ezzel előkészítettük a Github környezetét, teszteljük egy projekten! Először hozzuk létre a repó munkaterületét a saját gépünkön!

koczka@columbo:~$ git clone git@github.com:koczkaferenc/ci-cd-demo.git
Cloning into 'ci-cd-demo'...
remote: Enumerating objects: 16, done.
remote: Counting objects: 100% (16/16), done.
remote: Compressing objects: 100% (10/10), done.
remote: Total 16 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (16/16), 15.22 KiB | 15.22 MiB/s, done.
cd ci-cd-demo

Hozzuk létre a linter számára nem „barátságos” helloworld.py programot:

def helloworld():
    print('Hello world')

helloworld()

És az előző órán tanult linter.py-t:

import sys
from pylint import lint
THRESHOLD = 8
run = lint.Run(["helloworld.py"], do_exit=False)
score = run.linter.stats.global_note
if score < THRESHOLD:
    print("Linter failed: Score < threshold value")
    sys.exit(1)
sys.exit(0)

Töltsük fel ezeket a repóba, de előtte a webes felületen kattints az Actions menüre!

git add linter.py
git commit -m "Added linter.py"
git push origin main
git add helloworld.py
git commit -m "Added helloworld.py"
git push origin main
A Linter futása

Tegyük Linter-konformmá a helloworld.py fájlt!

""" Hello World program """
def helloworld():
    """ Koszonto fuggvény """
    print('Hello world')

helloworld()

Push-oljuk újra a változásokat, és ellenőrizzük a Linter eredményét!

git add helloworld.py ; git commit -m "WIP" ; git push origin main

Most máér hiba nélkül fut a Linter!

A Linter futása

További részletek a https://docs.github.com/en/actions/using-workflows oldalon érhetők el.