Browse files

Added copyright line to all files

  • Loading branch information...
suziejprince committed May 31, 2017
1 parent 6892a20 commit 79aefeeb658a7c54381e15a6bd7a128b8007ee91
Showing with 303 additions and 0 deletions.
  1. +3 −0 posts/
  2. +3 −0 posts/
  3. +3 −0 posts/
  4. +3 −0 posts/
  5. +3 −0 posts/
  6. +3 −0 posts/
  7. +3 −0 posts/
  8. +3 −0 posts/
  9. +3 −0 posts/
  10. +3 −0 posts/
  11. +3 −0 posts/
  12. +3 −0 posts/
  13. +3 −0 posts/
  14. +3 −0 posts/
  15. +3 −0 posts/
  16. +3 −0 posts/
  17. +3 −0 posts/
  18. +3 −0 posts/
  19. +3 −0 posts/
  20. +3 −0 posts/
  21. +3 −0 posts/
  22. +3 −0 posts/
  23. +3 −0 posts/
  24. +3 −0 posts/
  25. +3 −0 posts/
  26. +3 −0 posts/
  27. +3 −0 posts/
  28. +3 −0 posts/
  29. +3 −0 posts/
  30. +3 −0 posts/
  31. +3 −0 posts/
  32. +3 −0 posts/
  33. +3 −0 posts/
  34. +3 −0 posts/
  35. +3 −0 posts/
  36. +3 −0 posts/
  37. +3 −0 posts/
  38. +3 −0 posts/
  39. +3 −0 posts/
  40. +3 −0 posts/
  41. +3 −0 posts/
  42. +3 −0 posts/
  43. +3 −0 posts/
  44. +3 −0 posts/
  45. +3 −0 posts/
  46. +3 −0 posts/
  47. +3 −0 posts/
  48. +3 −0 posts/
  49. +3 −0 posts/
  50. +3 −0 posts/
  51. +3 −0 posts/
  52. +3 −0 posts/
  53. +3 −0 posts/
  54. +3 −0 posts/
  55. +3 −0 posts/
  56. +3 −0 posts/
  57. +3 −0 posts/
  58. +3 −0 posts/
  59. +3 −0 posts/2016-03-29-scaling
  60. +3 −0 posts/
  61. +3 −0 posts/
  62. +3 −0 posts/
  63. +3 −0 posts/
  64. +3 −0 posts/
  65. +3 −0 posts/
  66. +3 −0 posts/
  67. +3 −0 posts/
  68. +3 −0 posts/
  69. +3 −0 posts/
  70. +3 −0 posts/
  71. +3 −0 posts/
  72. +3 −0 posts/
  73. +3 −0 posts/
  74. +3 −0 posts/
  75. +3 −0 posts/
  76. +3 −0 posts/
  77. +3 −0 posts/
  78. +3 −0 posts/
  79. +3 −0 posts/
  80. +3 −0 posts/
  81. +3 −0 posts/
  82. +3 −0 posts/
  83. +3 −0 posts/
  84. +3 −0 posts/
  85. +3 −0 posts/
  86. +3 −0 posts/
  87. +3 −0 posts/
  88. +3 −0 posts/
  89. +3 −0 posts/
  90. +3 −0 posts/
  91. +3 −0 posts/
  92. +3 −0 posts/
  93. +3 −0 posts/
  94. +3 −0 posts/
  95. +3 −0 posts/
  96. +3 −0 posts/
  97. +3 −0 posts/
  98. +3 −0 posts/
  99. +3 −0 posts/2016-12-13-top
  100. +3 −0 posts/
  101. +3 −0 posts/
@@ -13,3 +13,6 @@ You probably woke up this morning with a new idea for a web app. You want to bui
Your team writes tests and run them locally - but you really can't be bothered to set up a CI server. Not even the 10 minutes it takes you to download one. Not the hour or so it will take you to get all the required libraries and dependencies installed. Not the 20 minutes it would take you to set up a build after all this. And you certainly do not want to baby sit the machine, managing upgrades and downtimes. That is the couple of hours a week that you just do not have - or even if you do, you would much rather spend learning a new language or framework - or maybe even get some sleep?!
If your web application development framework follows conventions and if deploying your application to production is a single Git command you run from your terminal, isn't it time your CI tool learnt about those conventions and decided to do the provisioning of the machine, configuring libraries and setting up your CI pipeline- all out of the box without you having to tell it the same things over and over again? Isn't it 2012 already?
Snap CI © 2017, ThoughtWorks
@@ -14,3 +14,6 @@ Last time around, I claimed that taking time to set up infrastructure for builds
At the surface it might look like these two statements are mutually incompatible. However, what if all that it took to get your Rails application on Github, through a build/deploy pipeline, through into an application deployed on Heroku was a couple of clicks? What if someone took the pain of setting up the machines and configuring your CI server away from you? What if, as you added Javascript tests and some Capybara tests, someone automatically detected that you had done that, and set up all that was needed to run those for you?
{% youtube _q4sk4pJKHA 480 320 %}
Snap CI © 2017, ThoughtWorks
@@ -20,3 +20,6 @@ So in addition to having the ability to configure multiple deployments, you woul
When combined these two features form a core part of creating a build pipeline in Snap.
{% youtube XofmSr2WyAo 480 320 %}
Snap CI © 2017, ThoughtWorks
@@ -17,3 +17,6 @@ However, all these changes happen on a new branch. The code changes, along with
To help with this, Snap now has the ability to clone an existing build pipeline, but point it at a different source tree/branch. Within minutes, your new patch can be tested, integrated and pushed out to production.
{% youtube ZmubQW03K1U 480 320 %}
Snap CI © 2017, ThoughtWorks
@@ -22,3 +22,6 @@ The key benefits of automating deployments and having them modelled as stages in
The following image shows the recent deployment history for the Snap [documentation site]( The first stage generates the website using Jekyll and the subsequent stages which deploy to staging and production sync it to an S3 bucket. And yes, this does mean that deployments in Snap are not limited to just Heroku! That's a different blog post for another day, though. :)
<img src="/assets/images/screenshots/deployment-history@2x.png" class="screenshot"/>
Snap CI © 2017, ThoughtWorks
@@ -13,3 +13,6 @@ We're excited to announce that we're adding support for 3 of the most requested
To that end we are making CouchDB, MongoDB and Redis generally available for all builds. You may access these databases over on their default ports. We have disabled authentication, so your builds should be able to connect to them unauthenticated. As part of our "builds should start from a clean slate" philosophy these databases will be cleaned out before every build.
You can read more about this in [our documentation]({{ }}databases/). And as always, [contact us]({{ }}) if there's a feature you'd like to see on Snap.
Snap CI © 2017, ThoughtWorks
@@ -11,3 +11,6 @@ categories: heroku oauth deployments
Snap now uses the new Platform API for Heroku. Specifically, we use [OAuth for Heroku]( for [setting up deployments]({{}}deployments/heroku_deployments). Using Heroku OAuth makes Snap a single point of contact for deploying your code to an existing app on Heroku or even creating a new app for deployments.
Using OAuth means that you no longer need to copy over the API key from Heroku. Authorize Snap on Heroku once and Snap takes care of the rest of the deployments.
Snap CI © 2017, ThoughtWorks
@@ -75,3 +75,6 @@ Your Heroku deployment stage should look something like this
<img src="/assets/images/screenshots/dropwizard/heroku-stage.png" class="screenshot"/>
That's all there is to it. Snap will now monitor your repository and run builds for all commits. Snap has a lot more to offer from CCTray, HipChat and Campfire build notifications to manual gated deployments to production environments. Also, we're just getting warmed up. If there's a feature you'd like to see or if you just want to say hi feel free to [contact us]({{ }}).
Snap CI © 2017, ThoughtWorks
@@ -73,3 +73,6 @@ Enter "Build" in "STAGE NAME" and "./sbt clean test" in "Tasks to be executed".
Click "Create Project"
That’s all there is to it. Snap will now monitor your repository and run builds for all commits. Snap has a lot more to offer from CCTray, HipChat and Campfire build notifications to manual gated deployments to production environments. Also, we’re just getting warmed up. If there’s a feature you’d like to see or if you just want to say hi feel free to [contact us]({{ }}).
Snap CI © 2017, ThoughtWorks
@@ -89,3 +89,6 @@ Now that you have the Deploy stage added to your pipeline, click the Save and Re
![elastic beanstalk dashboard]({% asset_path screenshots/aws-elastic-beanstalk/elastic-beanstalk-dashboard.png %}){: .screenshot}
For more information see [AWS CLI reference](, [Elastic Beanstalk](
Snap CI © 2017, ThoughtWorks
@@ -52,3 +52,6 @@ We hope that you find this useful.
Note: We are aware that the integration pipeline feature does not address two other possible issues. If multiple members each have a feature branch, there may be some interest in nominating multiple integration targets instead of just one.
In addition, there is definitely a case to be made for triggering the integration pipeline not just for feature branch changes - but also any time the integration target changes. We have some ideas around resolving both of these issues, but in the spirit of releasing early and often, we thought we'ed throw this out there first and see what you have to say about it before moving on to solving those problems.
Snap CI © 2017, ThoughtWorks
@@ -117,3 +117,6 @@ test:
"S3": "S3::FakeS3"
"Github": "Github::FakeGithub"
Snap CI © 2017, ThoughtWorks
@@ -33,3 +33,6 @@ We believe we have taken all necessary precautions to get Snap secure for now. I
Stay safe!
Snap CI © 2017, ThoughtWorks
@@ -17,3 +17,6 @@ When setting up a build for your Ruby gem on Snap (we detect the presence of a `
This functionality can be combined with [Automatic Branch Tracking](/blog/2013/11/07/automatic-branch-tracking-and-integration/) to release from a named branch instead too, though in this case, you would need to configure the `Release` stage manually.
Following on the heels of [yesterday's announcement](, since most Ruby gems are Open Source or at least public, you can start using this today for free!
Snap CI © 2017, ThoughtWorks
@@ -111,3 +111,6 @@ This history allow you to check all previous changes that got deployed and which
With these examples I hope I have explained what differentiates Snap from similar offerings. The name and basic features appear less similar as soon as you start to dig deeper and compare other features. The practice of Continuous Integration is a subset of Continuous Delivery. However, a tool for doing CI cannot be trivially extended to support Continuous Delivery - even if it allows you to configure a deployment at the end of your build.
This explicit focus on features that enable Continuous Delivery is the primary difference about Snap.
Snap CI © 2017, ThoughtWorks
@@ -30,3 +30,6 @@ Here's a quick video to demonstrate this feature:
{% youtube 2E4civiDmtc 480 320 %}
Read some of our other posts on [Snap Shell](
Snap CI © 2017, ThoughtWorks
@@ -25,3 +25,6 @@ Lastly, I may not be in a position to merge pull-requests as soon as they come i
To help with this, we not only say _when_ Snap declared the pull-request healthy; we also let you re-run the build when you are ready to merge the pull-request - just to make sure that things are still kosher. Read more about this in [our documentation](
What other collaboration workflows do you have that you think could be made more productive by Snap? Let me know in the comments below!
Snap CI © 2017, ThoughtWorks
@@ -48,3 +48,6 @@ In a minute or two, the build completes and you can see the test results.
Of course, this is just the start. You can use Snap to extend your build in a lot of different directions from here. You can pack and release the jars. If you were building an application, you can configure deployments following the initial stage. See the [What's next section]( of our documentation for details on some of these!
Note: The first build usually runs slightly longer as it needs to download all dependent jars from either maven-central or clojars. These jars are automatically cached and subsequent runs will run much faster!
Snap CI © 2017, ThoughtWorks
@@ -21,3 +21,6 @@ We have no reason to believe that any unauthorized access was made or that any d
We believe we have taken all necessary precautions to get Snap secure for now. If you have any further questions or concerns, please do not hesitate to [get in touch with us]( We would love to help out in any way we can.
Stay safe!
Snap CI © 2017, ThoughtWorks
@@ -55,3 +55,6 @@ You can find the AWS credentials [here](
That's it, it takes 3 simple steps to setup a deployment to your OpsWorks stack from Snap. Isn't it simple? Hope you enjoy deploying from Snap! I would love to hear if you have any comments or tips to make this experience even better. Leave your comments below or [contact us]({{ }}) if you have any questions.
Snap CI © 2017, ThoughtWorks
@@ -54,3 +54,6 @@ Have a look at our [docs](
![AWS console for Application name]({% asset_path screenshots/aws-elastic-beanstalk-revisited/elastic-beanstalk-dashboard-deployed@2x.png %}){: .screenshot .big}
As always, I would love to hear if you have any comments or tips to make this experience even better. Leave your comments below or [contact us]({{ }}) if you have any questions.
Snap CI © 2017, ThoughtWorks
@@ -69,3 +69,6 @@ $ bundle exec rake spec:smokes
These are just a few examples for you to get an idea of the impact the changes may have on your build. You can make these changes right away and your build should continue to work just fine. In case you don't get a chance to update your configuration, we will run a migration that make sure your builds continue to work exactly as they do today. This change will go in effect on Wednesday, Nov 5th, 2014 around evening UTC. If you have any doubts or problems with the changes coming in please feel free to comment below or get in [touch with us]({{ }}).
Snap CI © 2017, ThoughtWorks
@@ -44,3 +44,6 @@ git push ssh://
Re-run the build, check your logs, and it should deploy. Good luck!
Snap CI © 2017, ThoughtWorks
@@ -19,3 +19,6 @@ In order to assist with making your tests go faster, we have provided a [ruby ge
If you are not running a ruby project, don't worry, we provide a quick howto on how you can go about quickly [splitting your test suite]({{ }}speeding-up-builds/test-parallelism/).
As always, we would love to hear if you have any comments or tips to make your builds even better. Leave your comments below or [contact us]({{ }}) if you have any questions.
Snap CI © 2017, ThoughtWorks
@@ -19,3 +19,6 @@ You can read more about this feature in our [documentation]({{ }}
![bigger workers]({% asset_path screenshots/bigger-workers/bigger-worker-configuation.png %}){: .screenshot .big}
As always, we would love to hear if you have any comments or tips to make your builds even better. Leave your comments below or [contact us]({{ }}) if you have any questions.
Snap CI © 2017, ThoughtWorks
@@ -34,3 +34,6 @@ Over the last few weeks, we have spent time consolidating all these mechanisms o
![notification center]({% asset_path screenshots/notifications/notification-center.png %}){: .screenshot .big}
We would love to hear what you think of the new consolidated notification center. Do you see all the channels you expected to see? See anything missing? Let us know in the comments below.
Snap CI © 2017, ThoughtWorks
@@ -35,3 +35,6 @@ I want Snap to be a well-known, reliable service for people who don't have time
#### What's your favorite part of your workday?
I really enjoy getting feedback from clients. It's nice when the client is very happy, and then two weeks later they're buying it. It's very rewarding.
Snap CI © 2017, ThoughtWorks
@@ -29,3 +29,6 @@ Submit your posts here: [­writing­competition](htt
And don't forget to tell us about your posts so we can share them with our audiences too. This is a great opportunity to stretch your skillset AND gain a following while winning cash. Win-win-win.
Never done social authoring before? Got [questions]( AirPair has an [easy how-to]( to help you begin. Looking forward to reading all your awesome contributions!
Snap CI © 2017, ThoughtWorks
@@ -29,3 +29,6 @@ We've removed bower and grunt as part of the node installations since most users
As and when new versions are released and available, they will automatically be available to Snap users. If a binary is not available, then you may get in touch with us, and we'll make it available ASAP.
If you have any comments or tips to help us improve, let us know by dropping a comment below or [contact us]({{ }}) if you have any questions.
Snap CI © 2017, ThoughtWorks
@@ -45,3 +45,6 @@ This particular approach is not recommended for changing public DNS records beca
This approach is a combination of the two techniques we've seen so far.
In this technique, instead of changing public DNS records, we'll change internal (private) DNS records. Since the internal network and the DNS server can be managed and configured to respect TTLs, this approach works a lot better than changing public DNS records.
Snap CI © 2017, ThoughtWorks
@@ -31,3 +31,6 @@ As your confidence in the deployment improves, you can deploy your application t
## Long running migration phase
Because one or more versions of your application may be running in production for some period of time, your application and its components (webservices, microservices, database) needs to be backward-compatible so that it works with at least one or two previous versions of your application. This [Parallel-Change Pattern]( is a simple and effective way to implement backward-incompatible changes between application interfaces.
Snap CI © 2017, ThoughtWorks
@@ -22,3 +22,6 @@ Snap's product owner [Badri Janakiraman]( and develope
* Kick the can down the road.
You can watch the video below and download the slides from the talk [here](
Snap CI © 2017, ThoughtWorks
@@ -68,3 +68,6 @@ This technique can also be used to do some interesting multi-variant testing and
## Next steps
In my next post, I'll get into the implementation techniques of blue/green deployments. A subsequent post will talk about implementing canary releases. Hope you will find this series very useful.
Snap CI © 2017, ThoughtWorks
@@ -94,3 +94,6 @@ The Stage History view can help you determine just that and help you to immediat
![stage history]({% asset_path screenshots/multi-stage-builds/stage_history.png %}){: .screenshot .big}
I hope you now that you've read this you have a better picture of how to leverage stages in your Snap CI pipelines. Feel free to reach out to us in case of questions or feedback.
Snap CI © 2017, ThoughtWorks
@@ -21,3 +21,6 @@ Not anymore.
We are glad to announce that you can now pin such variables just like any command. This has long been requested and we hope that it makes managing build configuration easier for users.
More details can be found on our [docs](
Snap CI © 2017, ThoughtWorks
@@ -80,3 +80,6 @@ If you're interested in using Docker on Snap CI, [you can sign up here](https://
[IBMResearchReport]:$File/rc25482.pdf "Performance comparison of Virtual Machines and Linux Containers"
[UserNamespaces]: "User namespaces in Linux"
Snap CI © 2017, ThoughtWorks
@@ -92,3 +92,6 @@ So in general when you want to package and distribute your application as compon
In the next article, we will look at the security aspects of running containers. Stay tuned!
A version of this article originally appeared on [RisingStack](
Snap CI © 2017, ThoughtWorks
@@ -77,3 +77,6 @@ The team will continue to investigate the upgrade to the newest versions of Ruby
Our experience using Canary Releases proved to be successful and clients can now consider this as an option when they have a risky releases planned.
This post was originally published on [ThoughtWorks Insights]( Continuous Delivery channel.
Snap CI © 2017, ThoughtWorks
@@ -39,3 +39,6 @@ On the other hand, LXC now has [support for user namespaces](https://www.stgrabe
Due to these considerations, we selected [unprivileged LXC containers]( for build machines on top of which users will be able to build and run Docker containers.
*If you’re interested in using Docker on Snap CI, [sign up here](*
Snap CI © 2017, ThoughtWorks
@@ -76,3 +76,6 @@ Once the build completes, GitHub reflects the status of the build on the pull re
I now know that the pull request can be safely merged to the master!
<span style="font-style:italic">This article is Part 1 in a series from our upcoming e-Book "CD with Snap CI"</span>
Snap CI © 2017, ThoughtWorks
@@ -31,3 +31,6 @@ It's a sort of a [Goldberg Machine](
For this script to work you need [fswatch](, [jq]( and [cURL]( Note that I save my API key in my keychain. If you're not using a Mac, you need to figure a way to keep it a secret.
<span style="font-style:italic">This article was originally featured on [Marco Valtas' blog](</span>
Snap CI © 2017, ThoughtWorks
Oops, something went wrong.

0 comments on commit 79aefee

Please sign in to comment.