Gitlab CI

image: docker:stable
variables:
  # When using dind service we need to instruct docker, to talk with the
  # daemon started inside of the service. The daemon is available with
  # a network connection instead of the default /var/run/docker.sock socket.
  #
  # The 'docker' hostname is the alias of the service container as described at
  # https://docs.gitlab.com/ee/ci/docker/using_docker_images.html#accessing-the-services
  #
  # Note that if you're using Kubernetes executor, the variable should be set to
  # tcp://localhost:2375 because of how Kubernetes executor connects services
  # to the job container
  DOCKER_HOST: tcp://docker:2375/
  # When using dind, it's wise to use the overlayfs driver for
  # improved performance.
  DOCKER_DRIVER: overlay2

services:
- docker:dind

stages:
- common
- build
- deploy
- jira

cache:
  key: "$CI_PIPELINE_ID"
  paths:
  # keep env file between stages
  - ./gitlab.env

# Generate semantic version for current build,
common:
  stage: common
  image: sotomski/gitlab-tools
  script:
  - goops pipeline common
  only:
  - merge_requests
  - master
  - tags
  - /^.*-stable$/

lint:
  stage: build
  image: node:10
  script:
  - yarn install
  - node_modules/.bin/ng lint
  only:
  - merge_requests
  - master
  - tags
  - /^.*-stable$/

test:
  stage: build
  image: sotomski/node:10-chrome
  script:
  - yarn install
  - node_modules/.bin/ng test --browsers ChromeHeadlessNoSandbox --source-map=false --watch=false
  only:
  - merge_requests
  - master
  - tags
  - /^.*-stable$/

# build
build-push:
  stage: build
  image: sotomski/gitlab-tools:dind
  script:
  - source gitlab.env
  - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com
  - goops pipeline docker build -t $CI_REGISTRY_IMAGE:$CI_SEMVER .
  - goops pipeline docker push $CI_REGISTRY_IMAGE:$CI_SEMVER
  only:
  - merge_requests
  - master
  - tags
  - /^.*-stable$/

jira-cr:
  stage: jira
  image: sotomski/gitlab-tools
  script:
  - source gitlab.env
  - goops pipeline jira transition "code review"
  only:
  - merge_requests

jira-in-test:
  stage: jira
  image: sotomski/gitlab-tools
  script:
  - source gitlab.env
  - goops pipeline jira transition "in test"
  only:
  - master

# release Jira version
release:
  stage: deploy
  image: sotomski/gitlab-tools
  script:
  - source gitlab.env
  - jira-cli version release $JIRA_PROJECT_KEY $CI_SEMVER_RELEASE
  only:
  - tags

# deploy staging environment
deploy_staging:
  stage: deploy
  image: alpine
  script:
  - source gitlab.env
  - echo deploy version $CI_SEMVER to staging environment
  environment:
    name: staging
    url: $STAGING_URL
  only:
  - master

# deploy pre-prod environment
deploy_pre-prod:
  stage: deploy
  image: alpine
  script:
  - source gitlab.env
  - echo deploy version $CI_SEMVER to pre-prod environment
  environment:
    name: pre-prod
    url: $PRE-PROD_URL
  when: manual
  only:
  - master
  - tags
  - /^.*-stable$/

# deploy prod environment
deploy_prod:
  stage: deploy
  image: alpine
  script:
  - source gitlab.env
  - echo deploy version $CI_SEMVER to prod
  environment:
    name: pre-prod
    url: $PROD_URL
  when: manual
  only:
  - tags

Jenkins

Travis