Course 07: Add course notes and demo for CI/CD tools
Signed-off-by: Andreia Ocanoaia andreia.ocanoaia@gmail.com
Merge request reports
Activity
added 3 commits
-
e48d90c8...bef070a0 - 2 commits from branch
main
- eae35362 - [CC] Course 07 - Add notes on CI/CD course
-
e48d90c8...bef070a0 - 2 commits from branch
There is another resource useful for this course (is also linked in the notes)
The GitHub repository to trigger deployments from:
- course-07.md 0 → 100644
1 # Cursul 06 - CI/CD 2 3 ## Ce este CI/CD? 4 5 CI/CD este un acronim care vine de la Continuous Integration/Continuous Delivery (sau Continuous Deployment). In prmul rand, acesta este un set de practici si instrumente care ajuta echipele de dezvoltare software sa livreze cod intr-un mod stabil. 6 7 Ideea de CI/CD este strans legata de ideea de release, in sensul ca CI/CD-ul este componenta dintr-un proiect care "duce" codul in productie. 8 9 Ca sa avem release-uri fara emotii, trebuie sa avem in vedere urmatoarele aspecte: 10 * Reproductibilitatea - release-urile trebuie sa aiba niste pasi clari de urmat care sa fie reproductibili pentru orice mediu (development, staging, production) si orice versiune a codului. - course-07.md 0 → 100644
8 9 Ca sa avem release-uri fara emotii, trebuie sa avem in vedere urmatoarele aspecte: 10 * Reproductibilitatea - release-urile trebuie sa aiba niste pasi clari de urmat care sa fie reproductibili pentru orice mediu (development, staging, production) si orice versiune a codului. 11 * Downtime cat mai mic, ideal deloc - schimbarile de configuratie sau deploymenturile ar trebui sa nu aiba downtime deloc, aplicatia trebuie sa fie in picioare pe parcursul release-ului. 12 * Automated releases - automatizarea reduce eroare umana, pasii manuali de facut intr-un release (humanly) error-prone. 13 * Support rollbacks - daca sistemul crapa (si va crapa) trebuie sa avem un mecanism cat mai rapid sa-l aducem la starea stabila de dinainte. In productie, in cazul unui outage sau a unui bug, se face revert (rollback) la versiunea anterioara stabila. Debuggingul, reproducerea problemei si fixul se fac in mediul de development si dupa testare se face din nou release la noua versiune fixata. 14 15 Tooluri de CI/CD populare sunt: 16 * GitHub Actions - managed, out-of-the-box service, usor de folosit dintr-un repository de GitHub 17 * Gitlab Action - managed, out-of-the-box service, usor de folosit dintr-un repository de Gitlab 18 * Jenkins - self-hosted, open-source tool, ofera CI/CD pentru orice tip de aplicatie, folosit foarte des in industrie, heavyweight 19 * Argo - self-hosted, usor de integrat in Kubernetes, care ofera CI/CD pentru aplicatii containerizate 20 21 ## CI/CD Pipeline stages 22 23 Typical pipeline stages include: changed this line in version 5 of the diff
- course-07.md 0 → 100644
15 Tooluri de CI/CD populare sunt: 16 * GitHub Actions - managed, out-of-the-box service, usor de folosit dintr-un repository de GitHub 17 * Gitlab Action - managed, out-of-the-box service, usor de folosit dintr-un repository de Gitlab 18 * Jenkins - self-hosted, open-source tool, ofera CI/CD pentru orice tip de aplicatie, folosit foarte des in industrie, heavyweight 19 * Argo - self-hosted, usor de integrat in Kubernetes, care ofera CI/CD pentru aplicatii containerizate 20 21 ## CI/CD Pipeline stages 22 23 Typical pipeline stages include: 24 25 - Source Code Checkout 26 - Build / Compile 27 - Automated Testing (unit, integration, etc.) 28 - Security Scanning 29 - Artifact Packaging & Publishing 30 - Deployment (staging, production, etc.) changed this line in version 5 of the diff
- course-07.md 0 → 100644
24 25 - Source Code Checkout 26 - Build / Compile 27 - Automated Testing (unit, integration, etc.) 28 - Security Scanning 29 - Artifact Packaging & Publishing 30 - Deployment (staging, production, etc.) 31 32 ## Use cases pentru CI/CD 33 34 - Run linters, run checkers 35 - Run setup scripts (run IaC scripts, databases migrations) 36 - Compile the code 37 - Test the code (unit tests, system and integration tests) 38 - Deploy the code - green/blue deployments 39 - Run security scans changed this line in version 5 of the diff
- course-07.md 0 → 100644
62 - name: Set up Go 63 uses: actions/setup-go@v4 64 - name: Install dependencies 65 run: go mod download 66 - name: Run tests 67 run: go test ./... 68 - name: Build 69 run: go build -o myapp 70 ``` 71 72 Am definit un workflow care se va rula la fiecare push pe branch-ul main. 73 74 Repository: [https://github.com/andreia-oca/go-simple-webserver] 75 76 Avantajele folosirii GitHub Actions: 77 - usor de folosit, usor de integrat intr-un repository de GitHub changed this line in version 5 of the diff
- course-07.md 0 → 100644
70 ``` 71 72 Am definit un workflow care se va rula la fiecare push pe branch-ul main. 73 74 Repository: [https://github.com/andreia-oca/go-simple-webserver] 75 76 Avantajele folosirii GitHub Actions: 77 - usor de folosit, usor de integrat intr-un repository de GitHub 78 - managed solution, nu trebuie sa setam noi infrastructura pentru a porni VM-urile pe care se ruleaza pipeline-urile 79 - integrat cu alte tooluri din GitHub (GHCR, GitHub Secrets, etc.) 80 81 Dezavantajele folosirii GitHub Actions: 82 - dificil de facut debugging pe pipeline-uri complexe 83 - nu avem full control asupra mediului (de exemplu, multa vreme nu au avut support pentru ARM runners, deci nu puteam compila nativ aplicatii pentru ARM) 84 85 Totusi, codul nostru nu a ajuns inca in productie, doar am creat un release cu artefactele necesare. In continuare, o sa vorbim despre cum putem sa facem deploymentul aplicatiei noastre in productie. Tot legat de contextul cursului. Spune care-i outputul unui workflow. Nu mi se pare că ai explicat care-i scopul, ce iese dintr-un pipeline. Ce vrei să faci cu el. Asta ar trebui definit la inceputul cursului.
În forma de față cursul e pe principiul: am un tool si îl folosesc să am codul în producție. Finalitatea e că CI/CD se folosește nu numai la web apps, este un tool care îți scanează aplicația și îți face un release pe care după îl deployază.
- course-07.md 0 → 100644
231 ```bash 232 kubectl set image rollout go-simple-webserver webserver=ghcr.io/andreia-oca/go-simple-webserver:v1.0.0 233 argo-rollouts get rollout go-simple-webserver --watch 234 ``` 235 236 ## Best practices for CI/CD 237 238 - Secure secrets management - nu hardcodati credentiale, keys, tokens in cod chiar daca sunt in repository-uri private. Folositi tooluri de secrets management (ex: HashiCorp Vault, AWS Secrets Manager, Azure Key Vault, etc.) sau folositi GitHub Secrets pentru a stoca credentialele in GitHub Actions. 239 240 - Pinning versions for dependencies - nu folosdefaultsiti latest sau cand instalati dependinte/imagini de docker etc. Release-urile trebuie sa fie predictibile si reproductibile, daca latest se muta pentru ca a aparut o noua versiune, puteti sa introduceti bug-uri in productie (been there, done that - bugurile acestea sunt draconice - greu de debuggat si de obicei crapa fie tot buildul, fie tot sistemul) 241 242 - Automate pipelines - automatizati cat mai mult din pipeline-urile de CI/CD ca sa evitati erorile umane. Daca exista pasi manuali sau aspecte la care release manager-ul trebuie sa fie atent - creati alerte, scrieti documentatie. 243 244 - Tests, tests, tests - dati enable automat la teste in pipeline-uri de CI/CD. 245 246 - Use artefacts (docker images, packages etc.) - folositi artefacte pentru a face release-urile rapide. Ideal ar trebui ca fiecare componenta sa se builduiasca doar o data si sa fie refolosita in pipeline-uri. De exemplu, folositi GHCR pentru a stoca imaginile de docker si a le folosi in pipeline-urile de CI/CD. - course-07.md 0 → 100644
109 - Feature flags sunt utile pentru a testa functionalitati noi in productie fara a afecta toti utilizatorii 110 111 ## Demo 02 - Rollouts deployments 112 113 ```yaml 114 spec: 115 replicas: 2 116 strategy: 117 # Canary strategy 118 canary: 119 - setWeight: 25 120 - pause: {duration: 30s} 121 - setWeight: 50 122 - pause: {duration: 30s} 123 - setWeight: 100 124 ``` Cursul e mișto, dar este și lung. Sugerez să îl repeți odată cap-coadă și să vezi cum te încadrezi.
Mi se pare că îi iei foarte tare fără să le arăți ceva high-level de la Argo, să vadă un deployment simplu până îi arunci cu capul înainte în deployments. Poate are sens mai întâi un demo simplu pe tema asta înainte să intri în rollouturi complexe. Cred că demo02 ar trebui să fie asta, dar în notițe treci repede prin el.
added 1 commit
- 7d0f0d3d - [CC] Course 07 - Improvements to course after review