Skip to content
Snippets Groups Projects

Course 07: Add course notes and demo for CI/CD tools

Open Andreia-Irina OCĂNOAIA (87562) requested to merge andreiaoca/add-course-06-notes into main
8 unresolved threads

Signed-off-by: Andreia Ocanoaia andreia.ocanoaia@gmail.com

Merge request reports

Loading
Loading

Activity

Filter activity
  • Approvals
  • Assignees & reviewers
  • Comments (from bots)
  • Comments (from users)
  • Commits & branches
  • Edits
  • Labels
  • Lock status
  • Mentions
  • Merge request status
  • Tracking
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:
  • 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.)
  • 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
  • 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
  • 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ă.

    • Please register or sign in to reply
  • 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.
    • Comment on lines +238 to +246

      Asta e o secțiune mișto pentru persoanele care au deja treabă cu mediul de DevOps, dar cred că îi năucești destul de tare pe cei care incep de la 0. Nu îmi dau seama ce e de făcut cu ea.

    • Please register or sign in to reply
  • 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 2 commits

    • 385ae03a - [CC] Course 07 - Add technical demo manifests
    • 7f46ddec - [CC] Course 07 - Improvements to course after review

    Compare with previous version

  • added 1 commit

    • 7d0f0d3d - [CC] Course 07 - Improvements to course after review

    Compare with previous version

  • Please register or sign in to reply
    Loading