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

CI and CD

CI and CD

Nettecamp 27.8.2016

Avatar for Ladislav Prskavec

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