- załóz darmowe konto na gitlab.com z grupą
ISA_DEVOPS
i projektem (repozytorium)CICD
- utwórz parę kluczy
ssh-keygen -t rsa -f gitlab_isa
i umieść klucz publiczny w ustawieniach profilu (Edit profile -> SSH keys
)- utwórz nowy katalog lokalny i zainicjuj projekt
git init --initial-branch=main git remote add origin git@gitlab.com:isa_devops/cicd.gitdo agenta ssh dodaj klucz prywatny
ssh-add <PRIVATE_KEY>
; jeśli korzystasz z Windows + WSL zainstaluj wcześniej agentapageant
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html włącz funkcję CICD w ustawieniach projektuSettings -> General -> Visibility, project features, permissions -> Repository -> CI/CD
i zapisz
Naszym zadaniem jest zaprojektowanie i implementacja pipeline dla przykładowej aplikacji flask z fazami:
- faza prepare: sprawdza semantykę i weryfikuje projekt
- faza build: buduje obraz dockerowy i umieszcza go w container registry
- faza test: wykonuje testy i tworzy raport narzędziem
pytest
- faza security: skanuje obraz dockerowy pod kątem bezpieczeństwa
- faza deploy: wdraza zbudowany obraz dockerowy na srodowisko lokalne (Kubernetes)
Po wykonaniu zadania mozna podejrzec efekt wdrozonej aplikacji za pomoca komend
kubectl get pods -n dev # zapisujemy nazwe jednego z podow
kubectl port-forward pod/<NAZWA_PODA> 5000:5000 -n dev
Aplikacja powinna byc dostępna pod adresem http://localhost:5000/api/data
- Zarejestruj własny runner w gitlab:
Seetings -> CICD -> Runners -> Projet runners -> New project runner
. Dodaj tag runneradocker-runner
. Pozostałe opcje pozostaw domyslne. KliknijCreate Runner
. W następnym oknie skopiuj authentication token, będzie nam za chwilę potrzebny. Uwaga! Token pojawi się tylko teraz - wychodząc z tej strony nie będziemy mogli go uzyskać inaczej jak przez utworzenie nowego runnera. - Wykonaj lokalnie polecenia:
$ docker run --rm -d --name gitlab-runner --network kind \
-v <TWOJA_SCIEZKA_BEZWZGLEDNA_DO_REPO>/gitlab-local-runner/config.template.toml:/tmp/config.template.toml \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest
# wchodzimy do kontenera i rejestrujemy runner
$ docker exec -it gitlab-runner bash
$ gitlab-runner register \
--template-config /tmp/config.template.toml \
--non-interactive \
--url "https://gitlab.com/" \
--token "<RUNNER_TOKEN>" \
--executor "docker" \
--docker-image gitlab/gitlab-runner:latest \
--description "docker-runner"
- Instalacja
kind
https://kind.sigs.k8s.io/docs/user/quick-start/#installing-from-release-binaries- Instalacja
kubectl
https://kubernetes.io/docs/tasks/tools/#kubectl- Stworzenie klastra
kind create cluster --name isa-cicd --config ./kind-config-multinode-ingress.yaml- Upewnij się, ze workery i controlplane działają
kubectl get nodes- Utwórz namespace dev i prod
kubectl create ns dev && kubectl create ns prod
- Utwórz service account i token dla usera gitlab - zapisz token na później.
Uwaga - token jest wazny przez 60 minut. Po tym czasie trzeba go odnowic.kubectl create serviceaccount gitlab -n dev kubectl create token gitlab -n dev- Skonfiguruj RBAC dla usera
kubectl apply -f k8s/rbac.yaml
- Skonfiguruj dostęp do repozytorium obrazów dockerowych. Utwórz tokeny dostępu w
Settings -> Repository -> Deploy tokens -> Add token
. Nadaj nazwę tokenowi, zaznacz scoperead_registry
, pozostałe pola zostaw domyślne. Zapisz wygenerowany token w postaci loginu i hasła i uzyj w ponizszym poleceniu:kubectl create secret docker-registry registry-credentials --docker-server=https://registry.gitlab.com --docker-username=REGISTRY_USERNAME --docker-password=REGISTRY_PASSWORD -n NAMESPACE kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "registry-credentials"}]}'
Musimy dodać zmienną K8S_TOKEN do zmiennych pipeline, aby job
deploy
mogl uzyskac dostep do srodowiska lokalnego
- W projekcie gitlab w
Settings -> CICD -> Variables -> Add variable
dodaj nowa zmienna- W polu
Key
podajK8S_TOKEN
, a w poleValue
wklej token uzyskany w pkt. 8 przygotowania środowiska lokalnego