using gitlab ci

26
Using GitLab CI

Upload: colch

Post on 07-Jan-2017

4.459 views

Category:

Software


0 download

TRANSCRIPT

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

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

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

Example for NodeJS project:

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

How GitLab CI differs fromother CI's?

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)

ExecutorsShell

LocalyDocker

Inside of Docker containerDocker-SSH

In Docker container communicating over SSHSSH

On remote server using SSH

StagesUsed to group your jobs in stages to create multiple pipelines

Builds of next stage are run after success

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 !)

Job concurrencyJobs of the same stage run in parallel

Start 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.

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

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

Did you expect anything?This is all!

Pro tips for usage

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/

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

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

Advanced usage for JS projectsaka "extension"

How to save build stats for along time?

Bash scripts will save us!

Private static web server(e.g. nginx)

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

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

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

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

Questions?