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

Your Build is Probably Broken, you just don't k...

Armakuni
October 20, 2016

Your Build is Probably Broken, you just don't know it yet

Modern software development needs a modern CI; the patterns you follow when developing your code should also be reinforced by your CI pipeline. No snowflakes. No unstable results. No unscalable bottlenecks. Everything as code.

We will discuss the patterns that we want a CI solution to follow and why they are important, especially, but not exclusively, in the pursuit of continuous delivery and the adoption of DevOps and PaaS. You should leave feeling optimistic that tomorrow you can use Concourse CI to regain control of your pipeline, dramatically increasing velocity and consistency and, most importantly, reduce the time it takes to deliver value to users and receive feedback.

Delivered at LoPUG: https://www.meetup.com/London-PaaS-User-Group-LOPUG/events/234263654/

Armakuni

October 20, 2016
Tweet

More Decks by Armakuni

Other Decks in Technology

Transcript

  1. Broken? ▪ You don’t have one ▪ Your pipeline is

    unsecure ▪ Your pipeline is slow ▪ Your pipeline is unreliable or unreproducible ▪ Your pipeline is a time sink ▪ Your pipeline is not a core deliverable
  2. Treat CI like code ▪ Development Lifecycle ▪ Fast feedback

    ▪ Zero-downtime ▪ Scalable & Instrumented ▪ Ephemeral ▪ Everything as code
  3. Before ▪ Time consuming pipeline orchestration - Chef ▪ Bring

    your own automation - Jenkins Job Builder ▪ Polluted and inconsistent ▪ Performance & Cost ▪ Environment disparity ▪ Poor usability
  4. Concourse CI What you might miss Plugins Being able to

    configure a gazillion plugins Runtime configuration Change the environment at build time Click-click-clicking Being able to use a GUI to configure build Not knowing BOSH Great tool, getting easier (BBL) with steep learning curve Not knowing Docker Docker is key and you’ll need a workflow to manage images Speed Isolated builds can be slower to initialise e.g. bundle install
  5. Install ▪ Vagrant ▪ Docker Compose ▪ Standalone Binary ▪

    BOSH [with BBL] e.g. bbl up http://concourse.ci/installing.html
  6. Install Vagrant & fly Vagrant 3 minute Configuration 1 second

    View Up to you $ vagrant init concourse/lite $ vagrant up $ fly -t lite login -c http://192.168.100.4:8080 $ fly -t lite set-pipeline -p hello-world -c hello.yml http://192.168.100.4:8080
  7. Configuration Tasks jobs: - name: say-hello-world plan: - get: micro-app

    trigger: true - task: say-hello-world config: inputs: [name: micro-app] platform: linux image_resource: type: docker-image source: {repository: ubuntu} run: dir: micro-app path: ./pass.sh
  8. - name: say-goodbye-world plan: - get: micro-app trigger: true passed:

    [say-hello-world] - task: say-goodbye-world config: inputs: [name: micro-app] platform: linux image_resource: type: docker-image source: {repository: ubuntu} run: dir: micro-app path: ./fail.sh jobs: - name: say-hello-world plan: - get: micro-app trigger: true - task: say-hello-world config: inputs: [name: micro-app] platform: linux image_resource: type: docker-image source: {repository: ubuntu} run: dir: micro-app path: ./pass.sh
  9. - name: say-goodbye-world plan: - get: micro-app trigger: true passed:

    [say-hello-world] - task: say-goodbye-world config: inputs: [name: micro-app] platform: linux image_resource: type: docker-image source: {repository: ubuntu} run: dir: micro-app path: ./fail.sh jobs: - name: say-hello-world plan: - get: micro-app trigger: true - task: say-hello-world config: inputs: [name: micro-app] platform: linux image_resource: type: docker-image source: {repository: ubuntu} run: dir: micro-app path: ./pass.sh
  10. - name: say-goodbye-world plan: - get: micro-app trigger: true passed:

    [say-hello-world] - task: say-goodbye-world config: inputs: [name: micro-app] platform: linux image_resource: type: docker-image source: {repository: ubuntu} run: dir: micro-app path: ./fail.sh jobs: - name: say-hello-world plan: - get: micro-app trigger: true - task: say-hello-world config: inputs: [name: micro-app] platform: linux image_resource: type: docker-image source: {repository: ubuntu} run: dir: micro-app path: ./pass.sh
  11. UI

  12. UI

  13. UI

  14. UI

  15. UI

  16. UI

  17. $ fly set-pipeline Echo Before I was lost! Echo Now

    I’m found! Apply configuration: [yN] :
  18. After ▪ Configurable as code ▪ Unpolluted builds ▪ Scaleable

    ▪ Fast feedback ▪ Learnt in a single-sitting ▪ Platforms & Software