UNDER MY UMBRELLA

SPEAKER

DELIVERY

DEFINITION

DESTINATION

REQUIREMENTS

Knowledge base

Definition of Done

Definition of Ready

Requirements management

Requirements stakeholders

Requirements review by QA

ONBOARDING

Gui guide

Mentoring

Handbook

Coaching

Pair programming

Start kit

CODE QUALITY

Style guide

Check tools

Code standards

Test automation

Builders

Technical debt

CODE REVIEW

Peer-to-peer code review

Tools

Reviewers strategy

Check list

Code analysis

Pre-merged review

RELEASE STRATEGY

Frequency

Test strategy

Speed

Recovery strategy

Environments

Change management

CONTINUOUS INTEGRATION

Process

Frequency

Server

Speed

Artifacts

Analysis

CONTINUOUS DEPLOYMENT

Single click

Frequency

Tools

Rollback

Speed

Automated

CONFIGURATION

Environment requirements

Build configuration

Deployment guide

Automated provision

Automated deployment

Automated environment

ARCHITECTURE

Logging

Support interface

Analytics

KPI monitoring

Architecture documentation

Architecture model

TESTING

Unit testing

End-to-end testing

Integration testing

Load testing

Security testing

Mutation testing

SERVICES

GERRIT

CRUCIBLE

GITHUB

TEAM CITY

BAMBOO

MOBFARM

SITEPERF

AWS

SUPPORT

EXCEL

PIPELINE

CONFIGURATION

stages:
  - build
  - test
  - sonar
  - plan
  - deploy
  - integration-test
  - e2e-test
  - load-test
  - destroy

variables:
  TERRAFORMER_VERSION:  v0.10.7_cd
  DOCKER_PULL_HOST:     tmhub.io
  NODE_IMAGE:           node:6.10.3
  NODE_SONARQUBE_IMAGE: tmhub.io/project-name/node-sonarqube:latest    
  TERRAFORMER_IMAGE:    $DOCKER_PULL_HOST/customer/terraformer:${TERRAFORMER_VERSION}
  MAVEN_IMAGE:          $DOCKER_PULL_HOST/maven/maven:3.3.9-jdk1.8.0_121
  TERRAFORM_FOLDER:     terraform

.template: &nonprod_gitlab_runner
  tags:
    - tm-nonprod terraformer

.template: &prod_gitlab_runner
  tags:
    - tm-prod terraformer

.template: &sonar_gitlab_runner
  tags:
    - tm-prod cicd build

.template: &only_develop
  only:
    - develop@sponsorship/repository

.template: &only_master
  only:
    - master@sponsorship/repository

.template: &except_master_and_develop
  except:
    - master
    - develop

.template: &except_master
  except:
    - master

.template: &dev_env
  <<: *nonprod_gitlab_runner
  variables:
    account_tag: tm-nonprod
    environment_tag: dev1

.template: &qa_env
  <<: *nonprod_gitlab_runner
  variables:
    account_tag: tm-nonprod
    environment_tag: qa1

.template: &preprod_env
  <<: *prod_gitlab_runner
  variables:
    account_tag: tm-prod
    environment_tag: preprod1

.template: &plan_job
  image: $TERRAFORMER_IMAGE
  stage: plan
  script:
    - cd $TERRAFORM_FOLDER
    - terraformer $account_tag/$environment_tag plan

.template: &deploy_job
  image: $TERRAFORMER_IMAGE
  stage: deploy
  script:
    - cd $TERRAFORM_FOLDER
    - terraformer $account_tag/$environment_tag apply

.template: &destroy_job
  image: $TERRAFORMER_IMAGE
  stage: destroy
  script:
    - cd $TERRAFORM_FOLDER
    - terraformer $account_tag/$environment_tag destroy -force
  <<: *except_master
  when: manual

.template: &integration_test_job
  image: $NODE_IMAGE
  stage: integration-test
  script:
    - yarn
    - yarn run integration-test

.template: &e2e_test_job
  image: $NODE_IMAGE
  stage: e2e-test
  script:
    - yarn
    - yarn run e2e-test

.template: &load_test_job
  image: $MAVEN_IMAGE
  stage: load-test
  script:
    - bin/load-test

build:
  image: $NODE_IMAGE
  stage: build
  <<: *nonprod_gitlab_runner
  script:
    - bin/build
  artifacts:
    paths:
      - terraform/build

test:
  image: $NODE_IMAGE
  stage: test
  <<: *nonprod_gitlab_runner
  script:
    - yarn
    - yarn run lint
    - yarn run flow:check
    - yarn run unit-test:coverage
    - yarn run flow:coverage
  coverage: /All files[^|]*\|[^|]*\s+([\d\.]+)/
  artifacts:
    paths:
      - coverage

sonar:
  stage: sonar
  image: $NODE_SONARQUBE_IMAGE
  <<: *sonar_gitlab_runner
  script:
    - sonar-scanner

plan dev:
  <<: *plan_job
  <<: *dev_env
  <<: *except_master_and_develop

plan qa:
  <<: *plan_job
  <<: *qa_env
  <<: *except_master_and_develop
  when: manual

plan preprod:
  <<: *plan_job
  <<: *preprod_env
  <<: *except_master_and_develop
  when: manual

deploy dev (manual):
  <<: *deploy_job
  <<: *dev_env
  <<: *except_master_and_develop
  when: manual

deploy dev:
  <<: *deploy_job
  <<: *dev_env
  <<: *only_develop

deploy qa:
  <<: *deploy_job
  <<: *qa_env
  <<: *except_master
  when: manual

deploy preprod (manual):
  <<: *deploy_job
  <<: *preprod_env
  <<: *except_master
  when: manual

deploy preprod:
  <<: *deploy_job
  <<: *preprod_env
  <<: *only_master

integration-test dev (manual):
  <<: *integration_test_job
  <<: *dev_env
  <<: *except_master_and_develop
  when: manual

integration-test dev:
  <<: *integration_test_job
  <<: *dev_env
  <<: *only_develop

integration-test qa:
  <<: *integration_test_job
  <<: *qa_env
  <<: *except_master
  when: manual

integration-test preprod (manual):
  <<: *integration_test_job
  <<: *preprod_env
  <<: *except_master
  when: manual

integration-test preprod:
  <<: *integration_test_job
  <<: *preprod_env
  <<: *only_master

e2e-test dev (manual):
  <<: *e2e_test_job
  <<: *dev_env
  <<: *except_master_and_develop
  when: manual

e2e-test dev:
  <<: *e2e_test_job
  <<: *dev_env
  <<: *only_develop

e2e-test qa:
  <<: *e2e_test_job
  <<: *qa_env
  <<: *except_master
  when: manual

e2e-test preprod (manual):
  <<: *e2e_test_job
  <<: *preprod_env
  <<: *except_master
  when: manual

e2e-test preprod:
  <<: *e2e_test_job
  <<: *preprod_env
  <<: *only_master

load-test dev:
  <<: *load_test_job
  <<: *dev_env
  <<: *except_master_and_develop
  when: manual

load-test qa:
  <<: *load_test_job
  <<: *qa_env
  <<: *except_master
  when: manual

load-test preprod (manual):
  <<: *load_test_job
  <<: *preprod_env
  <<: *except_master
  when: manual

load-test preprod:
  <<: *load_test_job
  <<: *preprod_env
  <<: *only_master

destroy dev:
  <<: *destroy_job
  <<: *dev_env
  <<: *except_master

destroy qa:
  <<: *destroy_job
  <<: *qa_env
  <<: *except_master

destroy preprod:
  <<: *destroy_job
  <<: *preprod_env

PRODUCTION

ACCELERATOR

THIS IS THE BEGINNING

Under My Umbrella

By Roman Stremedlovskyi

Under My Umbrella

Delivering Excellence in EPAM Systems

  • 2,111