Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy [email protected] ||...

49
Travis CI travis-ci.com Anna Nagy [email protected] || @acnagy Continuous Integration & Why You Care

Transcript of Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy [email protected] ||...

Page 1: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

Travis CI travis-ci.com

Anna Nagy [email protected] || @acnagy

Continuous Integration& Why You Care

Page 2: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care
Page 3: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care
Page 4: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

GitHub Education Pack → education.github.com/pack clubs/organizations → email: [email protected]

background info docs:

docs.travis-ci.com/user/for-beginners docs.travis-ci.com/user/getting-started

education.travis-ci.com

Page 5: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

(polyglot summer fellowship for womxn/nb engineers) foundation.travis-ci.org

railsgirlssummerofcode.org

Page 6: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

Some stats…

Page 7: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

1.3M repos

Page 8: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

380M CI jobs

Page 9: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

168 years of CI jobs/month

Page 10: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

About CI…

Page 11: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

What happens when you write a big chunk of code, and try to fit it to a codebase all at once?

… you know how this ends.

Story Time!

Page 12: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

Integration == adding code to a codebase

Continuous Integration

Page 13: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

Integration == adding code to a codebase

Continuous == Doing that thing over and over - maybe, like, without a break in cadence

Continuous Integration

Page 14: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

(1) the engineering process of merging code as it is written (2) the automation system that compiles and tests code

Phrase Overloading

Page 15: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

Testing in Industry…

Page 16: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

Write your tests.

Code is Tested

Page 17: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

Automated vs. Manual

Functional vs. Non-Functional Test

Types of Tests

Page 18: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

A machine follows a script to verify an “assertion” These are part of a codebase, and run in CI

Automated Tests

Page 19: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

…tests a specific functionality (or several) of the system “does this element meet the requirements that it is supposed to meet?”

Unit tests, integration tests, end-to-end tests

Functional Tests

Page 20: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care
Page 21: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

Unit Test Example

Page 22: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

Here’s some code:

markdownImageString(repo, branch) { const url = this.repositoryUrl(repo); const imageUrl = this.imageUrl(repo, branch); return `[![Build Status](${imageUrl})](${url})`; }

Page 23: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

Here’s a unit test:

test('it generates a Markdown image string with a repo and a branch', function (assert) { const service = this.owner.lookup(

'service:status-images'); const markdown = service.markdownImageString( this.repo, branch);

assert.equal(markdown, `[![Build Status](${root}/travis-ci/travis- web.svg?branch=primary)](${secureRoot}/ travis-ci/travis-web)`); });

Page 24: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

we know the method is still doing what it is supposed to be doing!

If this test passes…

Page 25: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

Positives - things work as they should be working Contrapositives - things fail as they should be failing

Goal: maintain logic + integrity of the application

What to test for…

Page 26: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

Software Engineering is done in teams

Page 27: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

Builds & Building…

Page 28: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

compile/convert this source code into something runnable

Verb

Page 29: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

xkcd, 303 - you’ve prob seen this one :)

Page 30: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

the end result of a build process

Noun

Page 31: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care
Page 32: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care
Page 33: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

Why CI Systems?

Page 34: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

“Works on my machine”

Page 35: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

Clean environments, everyone has the same environment

Reproducibility

Page 36: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

Test in an environment that matches your production environment!

… and does not have all your helper scripts and dependencies

Tidy Deploys

Page 37: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

Improved confidence in code + PRs Projects with CI release twice as often, PR acceptance is 1.6 hours sooner

cope.eecs.oregonstate.edu/CISurvey

Faster Development

Page 38: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

Code Coverage, Linting, Language Runtimes Dependency Management , Config Management

Deployment, Container-Building (deployment environments) Documentation Generation, Demo Generation

Automate all the things!

Page 39: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

CD needs CI - “is this code deployable now?”/“deploy all changes to the code?”

… tests are really important to this

CICD

Page 40: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

Some Examples

Page 41: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care
Page 42: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

github.com/cs50/manual50/blob/master/.travis.yml

language: ruby rvm: 2.2 cache: bundler script: bundle exec jekyll build deploy: provider: elasticbeanstalk edge: source: cs50/dpl force_update: true access_key_id: "$AWS_ACCESS_KEY_ID" secret_access_key: "$AWS_SECRET_ACCESS_KEY" region: us-east-1 app: manual50 env: manual50 bucket_name: travis50 on: branch: master slack: secure: $long_token

Page 43: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care
Page 44: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

github.com/travis-ci/travis-build/blob/master/.travis.yml

before_script: - bundle exec rake clean assets:precompile script: - bundle exec rake spec - ./script/validate-bash-syntax after_success: bundle exec codeclimate-test-reporter before_deploy: ruby script/build_s3_index_html.rb

Page 45: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

Demo

Page 46: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

In Review…

Page 47: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

Turn this code into something runnable, then run these tests and see what we get Historical builds become a kind of semi-living audit-log for tests

Code Quality & Reliability

Builds & Testing

Page 48: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

Software Engineering teams use CI systems to build and test code as it is changed

CI also functions as a kind of automation hub - notifications, artifacts uploading, deployment

CD - Continuous Delivery/Deployment: “could this be deployed at any step?” vs. “is this deployed at every step?”

CICD in the Wild

Page 49: Continuous Integration - cdn.cs50.net · Travis CI travis-ci.com Anna Nagy anna@travis-ci.com || @acnagy Continuous Integration & Why You Care

Travis CI travis-ci.com

Anna Nagy [email protected] || @acnagy

Questions?Thank you!

education.travis-ci.com