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. 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.
  2. 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.
  3. Continuous Deployment 4 means that every change goes through the

    pipeline and automatically gets put into production, resulting in many production deployments every day.
  4. 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)
  5. 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"
  6. 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 } }
  7. 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