Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CI and CD

CI and CD

Nettecamp 27.8.2016

Ladislav Prskavec

August 27, 2016
Tweet

More Decks by Ladislav Prskavec

Other Decks in Technology

Transcript

  1. CI and CD
    Nette Camp 27.8.2016

    View Slide

  2. Key concepts
    4 Continuous Delivery (CD)
    4 Continuous Integration (CI)
    4 Continuous Deployment

    View Slide

  3. Continuous Integration

    View Slide

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

    View Slide

  5. Continuous Delivery

    View Slide

  6. Continuous Delivery
    4 is a software development discipline where you build
    software in such a way that the software can be
    released to production at any time.

    View Slide

  7. Continuous Deployment

    View Slide

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

    View Slide

  9. How we do Continuous
    Delivery in Apiary

    View Slide

  10. View Slide

  11. View Slide

  12. View Slide

  13. Continuous Integration
    Engines

    View Slide

  14. View Slide

  15. Key features from CIE
    4 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)

    View Slide

  16. Job definitions in
    repository

    View Slide

  17. 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: "<<>>"
    cache:
    directories:
    - "node_modules"
    before_install:
    - "npm -g install [email protected]"
    - "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"

    View Slide

  18. 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
    }
    }

    View Slide

  19. Autoscaling

    View Slide

  20. View Slide

  21. Pipelines

    View Slide

  22. View Slide

  23. Caching

    View Slide

  24. View Slide

  25. Docker support

    View Slide

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

    View Slide

  27. Matrix builds

    View Slide

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

    View Slide

  29. Distributed job across
    multiple nodes

    View Slide

  30. View Slide

  31. Q & A
    Ladislav Prskavec
    [email protected]
    @abtris

    View Slide