26
Using GitLab CI

Using GitLab CI

Embed Size (px)

Citation preview

Page 1: Using GitLab CI

Using GitLab CI

Page 2: Using GitLab CI

“ Continuous Integration is a software development practice wheremembers of a team integrate their work frequently, usually each person

integrates at least daily - leading to multiple integrations per day. ”

- Martin Fowler

Page 3: Using GitLab CI

Why GitLab CI?Integration

Fully integrated with GitLabEasy to start

A few lines in yml (YAML) inside of .gitlab-ci.yml and a bit clicksScalable

Concurrent jobs (in parallel), many runners, tagged runnersIsolated test environment

Using Docker containers

Page 4: Using GitLab CI

GitLab CI configurationIs done via .gitlab-ci.yml �le:

Example for NodeJS project:

nodejs_run: stage: test script: - npm install - npm test

Page 5: Using GitLab CI

How GitLab CI differs fromother CI's?

Page 6: Using GitLab CI

RunnersThis is an application that processes builds. It receives commands

from GitLab CI.

It's possible to tag runners so jobs run on runners which can processthem (e.g. di�erent OS)

Page 7: Using GitLab CI

ExecutorsShell

LocalyDocker

Inside of Docker containerDocker-SSH

In Docker container communicating over SSHSSH

On remote server using SSH

Page 8: Using GitLab CI

StagesUsed to group your jobs in stages to create multiple pipelines

Builds of next stage are run after success

Page 9: Using GitLab CI

Repo cleaningBy default, GitLab CI cleans build dir between builds for the sake of

concurrency

But we can preserve builds between builds (Hello, npm andnode_modules !)

Page 10: Using GitLab CI

Job concurrencyJobs of the same stage run in parallel

Page 11: Using GitLab CI

Start using GitLab CI

Page 12: Using GitLab CI

Get runner firstA simple Ubuntu Server VDS can play this role.

Provision it via script:

# Gitlab CI multi runner curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.apt-get install -y gitlab-ci-multi-runner

echo 'run "gitlab-ci-multi-runner register"'

Run gitlab-ci-multi-runner register and answer questions.You can �nd your unique registration token under Settings ---> Runners

section.

Page 13: Using GitLab CI

Add .gitlab-ci.yml to your repoExample for nodejs:

nodejs_run: stage: test script: - npm install - npm test

Page 14: Using GitLab CI

Did you expect anything?This is all!

Page 15: Using GitLab CI

Pro tips for usage

Page 16: Using GitLab CI

Use cache option in your.gitlab-ci.yml to preserve dirs

or filesThis line will cache all git untracked �les and �les in node_modules dir

cache: untracked: true paths: - node_modules/

Page 17: Using GitLab CI

Build skipBuild will be skipped if your commit message contains [ci skip]

Page 18: Using GitLab CI

Validate your .gitlab-ci.ymlUsing lint: gitlab.com/ci/lint

Page 19: Using GitLab CI

Advanced usage for JS projectsaka "extension"

Page 20: Using GitLab CI

How to save build stats for along time?

Bash scripts will save us!

Page 21: Using GitLab CI

Private static web server(e.g. nginx)

Use it to store your coverage, static analysis, test cases info for along time

Page 22: Using GitLab CI

How to get your infoCollect your test coverage with istanbul (GH: )

(or isparta, GH: )gotwarlost/istanbul

douglasduteil/isparta

Get your mocha test stats in HTML with reporter (GH:)

mochawesomeadamgruber/mochawesome

Catch your static analysis with plato (GH: )es-analysis/plato

Page 23: Using GitLab CI

But how to export this info tomy static web server?

Use scriptsomekind bash

Use it like that (line in your .gitlab-ci.yml). npm test should generateistanbul, mocha and plato reports.

my_gitlab_ci_job: script: - npm test ... - /my/path/to/build-export.sh $CI_BUILD_ID $CI_PROJECT_DIR my-project-name

Why not use GitLab CI Web hooks? Because we need access to repository �les

Page 24: Using GitLab CI

What about badges?Use to generate SVG image (via bash script), then ...shields.io

... use bash script to save it into public web space

You can use private nginx server, but exclude is from auth for sure:

location ~* ((badge_maintainability\.svg)|(badge_tests\.svg)|(badge_coverage\.svg))$ { auth_basic off; }

Add badge to your README.md. Example for mochawesome:

[![test status](http://path/to/latest/badge_tests.svg)](http://path/to/latest/mochawesome-reports/mochawesome.html

Page 25: Using GitLab CI

Questions?