Preskoči na sadržaj

Kontinuirana integracija i kontinuirana isporuka za web aplikacije

doc. dr. sc. Vedran Miletić, vmiletic@inf.uniri.hr, vedran.miletic.net

Fakultet informatike i digitalnih tehnologija Sveučilišta u Rijeci, akademska 2021./2022. godina


Motivacija

Programer ste u timu i popravili ste bug koji vam je bio dodijeljen, odnosno izvršili ste promjene u kodu nakon kojih na vašoj (razvojnoj) verziji aplikacije pokrenutoj lokalno izgleda da sve radi kako treba.

Možete li napraviti iste promjene na (produkcijskoj) verziji aplikacije, odnosno verziji koja je dostupna korisnicima?


Falling is just like flying bg 80% left:60%

Pomiješani osjećaji

Izvor: Mixed Feelings (MonkeyUser, 25th November 2021)


Povezane teme


Beskonačna DevOps petlja

DevOps Infinity Loop

Izvor: Continuous Delivery Best Practices: Extent and Intent


Kontinuirana integracija

Kontinuirana integracija (engl. continuous integration, kraće CI) je prema Wikipediji:

  • praksa spajanja svih radnih kopija programera u zajedničku glavnu razvojnu granu nekoliko puta dnevno
  • američki programer Grady Booch je 1991. godine predložio pojam CI u svojoj knjizi pod naslovom Object Oriented Design with Applications
    • nije zagovarao integraciju nekoliko puta dnevno, već nekoliko puta tjedno ili mjesečno, ovisno o projektu
  • agilna metodologija ekstremno programiranje (engl. extreme programming, kraće XP) pretpostavlja da se zahtjevi korisnika/kupca jako brzo mijenjaju
    • usvojila je koncept CI tako da zagovara integriranje više od jednom dnevno, možda i nekoliko puta na sat

Tijek rada kontinuirane integracije (1/2)

Najjednostavnije je lokalno pokretanje testova:

  • programer pokreće automatizirane jedinične testove u svojoj lokalnoj okolini
    • nakon što je završio s razvojem koda
    • prije spajanja svojih promjena na glavnu granu
  • never break the build: glavna grana uvijek prolazi testove, može se postaviti i pokrenuti

Basic CI workflow

Izvor: How to set up an efficient development workflow with Git and CI/CD


Tijek rada kontinuirane integracije (2/2)

Uz lokalno izvođenje testova, moguće je i korištenje poslužitelja za CI koji:

  • izgrađuje softver: povlači zavisnosti, pretvara izvorni kod u izvršni oblik i pretvara popratni sadržaj u oblik u kojem se može iskoristiti
  • izgrađuje softver i izvodi testove
  • izgrađuje softver, izvodi testove i vrši isporuku, odnosno postavljanje softvera ako su testovi uspješno prošli
    • kontinuirana isporuka i kontinuirano postavljanje
  • primjer: CI/CD Concepts (GitLab)

GitLab workflow example extended

Izvor slike: CI/CD pipelines (GitLab)


Implementacije CI ili CI/CD (1/2)

Platforme u oblaku:


Implementacije CI ili CI/CD (2/2)

Softveri otvorenog koda za samostalno postavljanje i održavanje:


Primjeri korištenja kontinuirane integracije


Dio CI skripte za jednostavan program u Pythonu

image: python:latest

before_script:
  - python -V  # Print out python version for debugging
  - pip install virtualenv
  - virtualenv venv
  - source venv/bin/activate
  - pip install -r requirements.txt

test:
  script:
    - pip install pytest
    - venv/bin/pytest

run:
  script:
    - python program.py

Dio CI skripte za Django

services:
  - mysql:latest
cache:
  paths:
    - ~/.cache/pip/

migrations:
  stage: build
  script:
    - python manage.py makemigrations
    # - python3 manage.py makemigrations myapp
    - python manage.py migrate
    - python manage.py check
django-tests:
  stage: test
  script:
    - echo "GRANT ALL on *.* to user;"| mysql -u root -p pass -h mysql
    - python manage.py test

Dio CI skripte za jednostavan program u Node.js-u

image: node:latest

services:
  - redis:latest
  - postgres:latest

cache:
  paths:
    - node_modules/

test_async:
  script:
    - npm install
    - node ./specs/start.js ./specs/async.spec.js

test_db:
  script:
    - npm install
    - node ./specs/start.js ./specs/db-postgres.spec.js

Won't Work For Us bg 95% left:65%

Nije to za nas

Izvor: Won't Work For Us (Comic Agilé #169)


Kontinuirana isporuka (1/2)

Kontinuirana isporuka (engl. continuous delivery, kraće CD) je prema Wikipediji:

  • pristup programskom inženjerstvu u kojem timovi proizvode softver u kratkim ciklusima, osiguravajući da se softver može pouzdano postaviti
    • u bilo kojem trenutku
    • bez dodatnog ručnog rada kod postavljanja
  • cilj je izgradnja, testiranje i izdavanje softvera velikom brzinom i učestalošću
  • pomaže smanjiti troškove, vrijeme i rizik isporuke promjena dopuštajući dodatna ažuriranja aplikacija u produkciji
  • izravni i ponovljivi postupak postavljanja je preduvjet kontinuirane isporuke

Kontinuirana isporuka (2/2)

Continuous Delivery process diagram

Izvor: Wikimedia Commons File:Continuous Delivery process diagram.svg


Falling is just like flying bg 80% left:60%

Cjevovod postavljanja

Izvor: deployment pipeline {turnoff.us}


Kontinuirano postavljanje

CI/CD flow

Izvor: What is a CI/CD pipeline? (Red Hat Topics, Understanding DevOps)

Kontinuirano postavljanje (engl. continuous deployment, kraće CD) je prema Wikipediji:

  • pristup u programskom inženjerstvu u kojem se programska funkcionalnost isporučuje automatiziranim postavljanjem na redovitoj bazi
  • slijedi nakon s kontinuirane isporuke
    • u fazi kontinuirane isporuke programska se funkcionalnost smatra potencijalno prikladnom za postavljanje, ali se postavljanje ne događa
    • u fazi kontinuirane isporuke očekuje se ručno postavljanje

Primjer primjene CI/CD u praksi

  1. Dva developera rade promjene svaki na svojoj verziji softvera. Jedan od njih zaokruži cjelinu (npr. implementacija nove značajke, popravak buga) i lokalno izvede testove koji uspješno prođu.
  2. Taj developer zatraži od upravitelja projekta da uvrsti njegove promjene u glavnu granu stvaranjem zahtjeva za povlačenjem promjena (engl. pull request).
  3. Upravitelj projekta spaja upravo dobivene promjene s promjenama koje su izveli drugi developeri i povlači ih u probnu granu.
  4. Po dolasku promjena u probnu granu, aktivira se CI/CD sustav koji izvodi instalaciju zavisnosti, pokreće testove, postavlja konfiguraciju i pokreće aplikaciju pa javlja rezultate svih navedenih radnji.
  5. Ako je CI/CD uspješno prošao, promjene se (uz ručno odobrenje ili bez njega) povlače u glavnu granu i od tamo se vrši postavljanje aplikacije.

Zaključak

  • dvanaestofaktorska, odnosno oblaku urođena aplikacija može automatizirati:
    • integraciju
    • isporuku
    • postavljanje
  • velik broj CI/CD alata
    • usluge u oblaku
    • alati otvorenog koda za samostalno postavljanje
  • DevOps CI/CD Explained in 100 Seconds (Fireship)

Author: Vedran Miletić