Gitlab CI/CD

Last modified by Xwiki VePa on 2024/02/07 07:37

Gitlab pipelines

Yliopistolla on sovelluskehittäjiä varten Gitlab versionhallinta-palvelu.

Gitlab CI/CD

Gitlabissa on Github Actions kaltainen toiminto, CI/CD pipelines. Sitä käyttämällä saa jatkuvan integraation, mukaan lukien automaattitestit pyörimään jokaiselle commitile.

Pipelinet koostuvat Jobs:eista ja Stage:ista. Jobit määrittelevät mitä tapahtuu, ja staget milloin tapahtuu. Vaikka kaksi jobia olisivat samalla stagella, voidaan ne silti suorittaa erikseen.

Esimerkki pipeline voi koostua seuraavista osista:

Stage

Jobs

Kuvaus

build

compile

Kääntää ohjelmakoodin

test

linter, test

Tarkistaa että koodin on ulkoasultaan oikea ja ajaa testit

staging

upload_to_staging

Siirtää koodin staging ympäristöön kun kaikki aiemmat osat ovat menneet läpi

Pipeline suoritetaan Gitlab Runnerilla, joka ajetaan joko lokaalisti tai palvelimella. Näiden lisäksi yliopistolla on käytössä shared runnereita. Sen sijaan, että sinun tarvitsi tilata maksullinen palvelin vain tätä varten,

kannattaa käyttää shared runnereita jotka on integroitu suoraan version.helsinki.fi:hin. Saat ne käyttöösi lisäämällä .gitlab-ci.yml tiedostossasi jobiin tagin: Shared-runner. Yliopiston shared-runnerit ovat tälle tarkoitetulla virtuaalipalvelimella ja jos niiden käyttö kasvaa niitä voidaan lisätä jotta runnerien odotusaika lyhenee.

.gitlab-ci.yml

Alla esimerkkinä ote erään Node.js:llä toteutetun projektin Gitlab pipelinesta.

image: node:17.9.0

.client_cache:
  cache:
    key: client
    paths:
      - client/.npm
    policy: pull

stages:
  - setup
  - test

client_setup_job:
  stage: setup
  variables:
    npm_config_cache: '$CI_PROJECT_DIR/client/.npm'
  script:
    - cd client/
    - npm ci
  extends: .client_cache
  cache:
    policy: pull-push
  artifacts:
    expire_in: 1h
    paths:
      - client/node_modules
  tags:
    - Shared-runner

client_test_job:
  stage: test
  needs: ['client_setup_job']
  coverage: /All files[^|]*\|[^|]*\s+([\d\.]+)/
  script:
    - cd client/
    - npm run jest:coverage
  extends: .client_cache
  artifacts:
    expire_in: 1 week
    paths:
      - client/coverage/cobertura-coverage.xml
    reports:
      cobertura: client/coverage/cobertura-coverage.xml
  tags:
    - Shared-runner

client_lint_job:
  stage: test
  needs: ['client_setup_job']
  script:
    - cd client/
    - npm run lint
  extends: .client_cache
  tags:
    - Shared-runner


Nimi

Tehtävä

Job

image: node:17.9.0

Määrittää pipelinessa käytettävän version Node.js:stä

EI

.client_cache:

Määrittää .cache välimuistin jota pystytään käyttämään kun jobiin laitetaan " extends: .client_cache"

Ei

stages:

Määrittelee staget joihin kuuluvia jobeja kutsutaan tässä määritellyssä järjestyksessä

Ei

client_setup_job:

Setup stagen job, joka käynnistää package.json mukaisesti clientin. Huomaa  tags:
- Shared-runner

Kyllä

client_test_job:

Test stagen job, joka ajaa testit ja tekee kattavuusraportin. Huomaa  tags:
- Shared-runner

Kyllä

client_lint_job:

Test stagen job, joka tarkistaa että koodi on tyyliasultaan oikeanlaista. Huomaa  tags:
- Shared-runner

Kyllä

Lisää projektillesi käytettävistä runnereista näet Gitlabissa: Settings → CI/CD → Runnerit

Jos testisi vaativat salaisuuksia tai ympäristömuuttujia jotka haluat suojata,

Voit määritellä ne Gitlabissa: Settings → CI/CD → Variables

Variableista lisää: Gitlab CI variables