ci and cd

31
CI and CD Nette Camp 27.8.2016

Upload: ladislav-prskavec

Post on 17-Jan-2017

156 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: CI and CD

CI and CDNette Camp 27.8.2016

Page 2: CI and CD

Key concepts4 Continuous Delivery (CD)

4 Continuous Integration (CI)

4 Continuous Deployment

Page 3: CI and CD

Continuous Integration

Page 4: CI and CD

Continuous Integration (CI)4 is a development practice that requires developers to integrate code into a shared repository several times a day. Each check-in is then verified by an automated build, allowing teams to detect problems early.

Page 5: CI and CD

Continuous Delivery

Page 6: CI and CD

Continuous Delivery4 is a software development discipline where you build

software in such a way that the software can be released to production at any time.

Page 7: CI and CD

Continuous Deployment

Page 8: CI and CD

Continuous Deployment4 means that every change goes through the pipeline and automatically gets put into production, resulting in many production deployments every day.

Page 9: CI and CD

How we do Continuous Delivery in Apiary

Page 10: CI and CD
Page 11: CI and CD
Page 12: CI and CD
Page 13: CI and CD

Continuous Integration Engines

Page 14: CI and CD
Page 15: CI and CD

Key features from CIE4 job definitions in repository

4 autoscaling on traffic with lowest possible price

4 pipelines

4 caching for installations (apt, npm, gem, composer, docker)

4 docker support (registry, caching layers)

4 matrix builds (OSS)

Page 16: CI and CD

Job definitions in repository

Page 17: CI and CD

sudo: "required"dist: "trusty"language: "node_js"node_js: - "0.10" - "0.12" - "4" - "6"env: global: # GH_TOKEN and NPM_TOKEN encrypted by 'travis encrypt' utility - secure: "<<<TOKEN>>>"cache: directories: - "node_modules"before_install: - "npm -g install npm@latest" - "gem install travis" - "curl -Lo travis_after_all.py https://raw.githubusercontent.com/dmakhno/travis_after_all/master/travis_after_all.py"before_script: - "npm run lint"script: - "npm test" - "npm run test:hooks-handlers"after_success: # travis_after_all.py is needed due to travis-ci/travis-ci#1548 & travis-ci/travis-ci#929 - "npm run coveralls" - "python travis_after_all.py" - "export $(cat .to_export_back)" - "npm run semantic-release || true"

Page 18: CI and CD

node('node') { currentBuild.result = "SUCCESS" try { stage 'Checkout' checkout scm stage 'Test' env.NODE_ENV = "test" print "Environment will be : ${env.NODE_ENV}" sh 'node -v' sh 'npm prune' sh 'npm install' sh 'npm test' stage 'Build Docker' sh './dockerBuild.sh' stage 'Deploy' echo 'Push to Repo' sh './dockerPushToRepo.sh' echo 'ssh to web server and tell it to pull new image' sh 'ssh [email protected] running/xxxxxxx/dockerRun.sh' stage 'Cleanup' echo 'prune and cleanup' sh 'npm prune' sh 'rm node_modules -rf' mail body: 'project build successful', from: '[email protected]', replyTo: '[email protected]', subject: 'project build successful', to: '[email protected]' } catch (err) { currentBuild.result = "FAILURE" mail body: "project build error: ${err}" , from: '[email protected]', replyTo: '[email protected]', subject: 'project build failed', to: '[email protected]' throw err }}

Page 19: CI and CD

Autoscaling

Page 20: CI and CD
Page 21: CI and CD

Pipelines

Page 22: CI and CD
Page 23: CI and CD

Caching

Page 24: CI and CD
Page 25: CI and CD

Docker support

Page 26: CI and CD

machine: services: - docker

dependencies: override: - docker info - docker build -t circleci/elasticsearch .

test: override: - docker run -d -p 9200:9200 circleci/elasticsearch; sleep 10 - curl --retry 10 --retry-delay 5 -v http://localhost:9200

deployment: hub: branch: master commands: - docker login -e $DOCKER_EMAIL -u $DOCKER_USER -p $DOCKER_PASS - docker push circleci/elasticsearch

Page 27: CI and CD

Matrix builds

Page 28: CI and CD

matrix: GO_VERSION: - 1.4 - 1.3 REDIS_VERSION: - 2.6 - 2.8 - 3.0

Page 29: CI and CD

Distributed job across multiple nodes

Page 30: CI and CD
Page 31: CI and CD

Q & ALadislav Prskavec

[email protected]@abtris