using gitlab ci
TRANSCRIPT
“ 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
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 !)
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
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/
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
THE ENDUseful links:
- - - - - My email: - Our organization on GitHub:
Docs for .gitlab-ci.ymlGitLab Runner repository README.mdInstallation on linuxOur custom bash scripts
[email protected]/Lingvokot