Often enough I have to explain my way of going about setting up a CI/CD pipeline with multiple deployment platforms. Since I am a bit tired of yapping the same every single time, I've decided to write it up and share with the world this way, and send people to read it instead ;). I will explain it on \"live-example\" of how the Rome got built, basing that current methodology exists only of readme.md and wishes of good luck (as it usually is ;)).\n\n

It always starts with an app, whatever it may be and reading the readmes available while Vagrant and VirtualBox is installing and updating. Following that is the first hurdle to go over - convert all the instruction/scripts into Ansible playbook(s), and only stopping when doing a clear vagrant up or vagrant reload we will have a fully working environment. As our Vagrant environment is now functional, it's time to break it! This is the moment to look for how things can be done better (too rigid/too lose versioning? Sloppy environment setup?) and replace them with the right way to do stuff, one that won't bite us in the backside. This is the point, and the best opportunity, to upcycle the existing way of doing dev environment to produce a proper, production-grade product. \n\n

I should probably digress here for a moment and explain why. I firmly believe that the way you deploy production is the same way you should deploy develop, shy of few debugging-friendly setting. This way you avoid the discrepancy between how production work vs how development works, which almost always causes major pains in the back of the neck, and with use of proper tools should mean no more work for the developers. That's why we start with Vagrant as developer boxes should be as easy as vagrant up, but the meat of our product lies in Ansible which will do meat of the work and can be applied to almost anything: AWS, bare metal, docker, LXC, in open net, behind vpn - you name it.\n\n

We must also give proper consideration to monitoring and logging hoovering at this point. My generic answer here is to grab Elasticsearch, Kibana, and Logstash. While for different use cases there may be better solutions, this one is well battle-tested, performs reasonably and is very easy to scale both vertically (within some limits) and horizontally. Logstash rules are easy to write and are well supported in maintenance through Ansible, which as I've mentioned earlier, are at the very core of things, and creating triggers/reports and alerts based on Elastic and Kibana is generally a breeze, including some quite complex aggregations.\n\n

If we are happy with the state of the Ansible it's time to move on and put all those roles and playbooks to work. Namely, we need something to manage our CI/CD pipelines. For me, the choice is obvious: TeamCity. It's modern, robust and unlike most of the light-weight alternatives, it's transparent. What I mean by that is that it doesn't tell you how to do things, doesn't limit your ways to deploy, or test, or package for that matter. Instead, it provides a developer-friendly and rich playground for your pipelines. You can do most the same with Jenkins, but it has a quite dated look and feel to it, while also missing some key functionality that must be brought in via plugins (like quality REST API which comes built-in with TeamCity). It also comes with all the common-handy plugins like Slack or Apache Maven integration.\n\n

The exact flow between CI and CD varies too greatly from one application to another to describe, so I will outline a few rules that guide me in it:\n1. Make build steps as small as possible. This way when something breaks, we know exactly where, without needing to dig and root around.\n2. All security credentials besides development environment must be sources from individual Vault instances. Keys to those containers should exist only on the CI/CD box and accessible by a few people (the less the better). This is pretty self-explanatory, as anything besides dev may contain sensitive data and, at times, be public-facing. Because of that appropriate security must be present. TeamCity shines in this department with excellent secrets-management.\n3. Every part of the build chain shall consume and produce artifacts. If it creates nothing, it likely shouldn't be its own build. This way if any issue shows up with any environment or version, all developer has to do it is grab appropriate artifacts to reproduce the issue locally.\n4. Deployment builds should be directly tied to specific Git branches/tags. This enables much easier tracking of what caused an issue, including automated identifying and tagging the author (nothing like automated regression testing!).\n\n

Speaking of deployments, I generally try to keep it simple but also with a close eye on the wallet. Because of that, I am more than happy with AWS or another cloud provider, but also constantly peeking at the loads and do we get the value of what we are paying for. Often enough the pattern of use is not constantly erratic, but rather has a firm baseline which could be migrated away from the cloud and into bare metal boxes. That is another part where this approach strongly triumphs over the common Docker and CircleCI setup, where you are very much tied in to use cloud providers and getting out is expensive. Here to embrace bare-metal hosting all you need is a help of some container-based self-hosting software, my personal preference is with Proxmox and LXC. Following that all you must write are ansible scripts to manage hardware of Proxmox, similar way as you do for Amazon EC2 (ansible supports both greatly) and you are good to go. One does not exclude another, quite the opposite, as they can live in great synergy and cut your costs dramatically (the heavier your base load, the bigger the savings) while providing production-grade resiliency.","viewCount":9959472,"upvotesCount":23,"services":[{"type":"id","generated":false,"id":"Tool:101231773744147511","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773746758442","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773700412232","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773774313645","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774140043342","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774125690843","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773997873230","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773703650742","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773705712932","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773830185558","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774655920535","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773858546548","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773669807419","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773501041914","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775247666243","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773405612798","typename":"Tool"}],"topics":[],"__typename":"StackDecision"},"$StackDecision:101212201442710058.link":{"url":"http://puciek.me/2018/12/how-to-design-ci-cd-pipelines-or-rather-how-i-do-it","title":"How to design CI/CD pipelines, or rather how I do it. | Tymoteusz Paul - X20X Development","__typename":"Link"},"Tool:101231773744147511":{"id":"101231773744147511","name":"Vagrant","slug":"vagrant","title":"A tool for building and distributing development environments","verified":true,"imageUrl":"https://img.stackshare.io/service/768/150px-Vagrant.png","canonicalUrl":"/vagrant","path":"/vagrant","votes":1499,"fans":10087,"stacks":11474,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231773746758442":{"id":"101231773746758442","name":"VirtualBox","slug":"virtualbox","title":"Run nearly any operating system on a single machine and to freely switch between OS instances running simultaneously","verified":false,"imageUrl":"https://img.stackshare.io/service/774/vbox_94px.png","canonicalUrl":"/virtualbox","path":"/virtualbox","votes":1127,"fans":30539,"stacks":30783,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231773700412232":{"id":"101231773700412232","name":"Ansible","slug":"ansible","title":"Radically simple configuration-management, application deployment, task-execution, and multi-node orchestration engine","verified":true,"imageUrl":"https://img.stackshare.io/service/663/ElOjna20.png","canonicalUrl":"/ansible","path":"/ansible","votes":1323,"fans":18730,"stacks":19066,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231773774313645":{"id":"101231773774313645","name":"Elasticsearch","slug":"elasticsearch","title":"Open Source, Distributed, RESTful Search Engine","verified":true,"imageUrl":"https://img.stackshare.io/service/841/Image_2019-05-20_at_4.58.04_PM.png","canonicalUrl":"/elasticsearch","path":"/elasticsearch","votes":1648,"fans":32692,"stacks":34531,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231774140043342":{"id":"101231774140043342","name":"Kibana","slug":"kibana","title":"Visualize your Elasticsearch data and navigate the Elastic Stack","verified":true,"imageUrl":"https://img.stackshare.io/service/1722/Image_2019-05-20_at_4.53.31_PM.png","canonicalUrl":"/kibana","path":"/kibana","votes":262,"fans":19982,"stacks":20432,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231774125690843":{"id":"101231774125690843","name":"Logstash","slug":"logstash","title":"Collect, Parse, & Enrich Data","verified":true,"imageUrl":"https://img.stackshare.io/service/1683/preview.png","canonicalUrl":"/logstash","path":"/logstash","votes":103,"fans":11008,"stacks":11380,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231773997873230":{"id":"101231773997873230","name":"TeamCity","slug":"teamcity","title":"TeamCity is an ultimate Continuous Integration tool for professionals","verified":true,"imageUrl":"https://img.stackshare.io/service/1357/317jQkeS.png","canonicalUrl":"/teamcity","path":"/teamcity","votes":316,"fans":1360,"stacks":1104,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231773705712932":{"id":"101231773705712932","name":"Slack","slug":"slack","title":"Bring all your communication together in one place","verified":false,"imageUrl":"https://img.stackshare.io/service/675/RNiSRYOF_400x400.jpg","canonicalUrl":"/slack","path":"/slack","votes":6023,"fans":113694,"stacks":119615,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231773830185558":{"id":"101231773830185558","name":"Apache Maven","slug":"maven","title":"Apache build manager for Java projects. ","verified":false,"imageUrl":"https://img.stackshare.io/package_manager/977/default_9833f2ef0bbc2a946b4cc5e9307264033361076b.png","canonicalUrl":"/maven","path":"/maven","votes":414,"fans":2537,"stacks":2844,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231774655920535":{"id":"101231774655920535","name":"Vault","slug":"vault","title":"Secure, store, and tightly control access to tokens, passwords, certificates, API keys, and other secrets in modern computing","verified":true,"imageUrl":"https://img.stackshare.io/service/2905/vault.png","canonicalUrl":"/vault","path":"/vault","votes":71,"fans":1057,"stacks":795,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231773858546548":{"id":"101231773858546548","name":"Git","slug":"git","title":"Fast, scalable, distributed revision control system","verified":false,"imageUrl":"https://img.stackshare.io/service/1046/git.png","canonicalUrl":"/git","path":"/git","votes":6590,"fans":205203,"stacks":297616,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231773669807419":{"id":"101231773669807419","name":"Docker","slug":"docker","title":"Enterprise Container Platform for High-Velocity Innovation.","verified":true,"imageUrl":"https://img.stackshare.io/service/586/n4u37v9t_400x400.png","canonicalUrl":"/docker","path":"/docker","votes":3857,"fans":161006,"stacks":174573,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231775247666243":{"id":"101231775247666243","name":"LXC","slug":"lxc","title":"Linux containers","verified":false,"imageUrl":"https://img.stackshare.io/service/3884/linux-containers.png","canonicalUrl":"/lxc","path":"/lxc","votes":19,"fans":255,"stacks":118,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231773405612798":{"id":"101231773405612798","name":"Amazon EC2","slug":"amazon-ec2","title":"Scalable, pay-as-you-go compute capacity in the cloud","verified":false,"imageUrl":"https://img.stackshare.io/service/18/amazon-ec2.png","canonicalUrl":"/amazon-ec2","path":"/amazon-ec2","votes":2548,"fans":43281,"stacks":48269,"following":false,"followContext":null,"__typename":"Tool"},"$Tool:101231773703650742.stackDecisionsWithAlternatives({\"first\":2}).edges.0":{"node":{"type":"id","generated":false,"id":"StackDecision:101212201442710058","typename":"StackDecision"},"__typename":"StackDecisionEdge"},"User:101231989467340423":{"id":"101231989467340423","username":"tschellenbach","title":"CEO","companyName":"Stream","imageUrl":"https://img.stackshare.io/user/729/default_26174a8ea66120fe225f469f847f337b01e82e1f.png","thumbUrl":"https://img.stackshare.io/user/729/thumb_26174a8ea66120fe225f469f847f337b01e82e1f.png","displayName":"Thierry Schellenbach","__typename":"User"},"StackDecision:101031322395260474":{"user":{"type":"id","generated":false,"id":"User:101231989467340423","typename":"User"},"company":{"type":"id","generated":true,"id":"$StackDecision:101031322395260474.company","typename":"Company"},"link":{"type":"id","generated":true,"id":"$StackDecision:101031322395260474.link","typename":"Link"},"publicId":"101031322395260474","publishedAt":"2018-09-13T08:17:13Z","id":"101031322395260474","htmlContent":"

Releasing new versions of our services is done by Travis CI. Travis first runs our test suite. Once it passes, it publishes a new release binary to GitHub.\n\n

Common tasks such as installing dependencies for the Go project, or building a binary are automated using plain old Makefiles. (We know, crazy old school, right?) Our binaries are compressed using UPX.\n\n

Travis has come a long way over the past years. I used to prefer Jenkins in some cases since it was easier to debug broken builds. With the addition of the aptly named “debug build” button, Travis is now the clear winner. It’s easy to use and free for open source, with no need to maintain anything.\n\n

#ContinuousIntegration #CodeCollaborationVersionControl","viewCount":998341,"upvotesCount":23,"services":[{"type":"id","generated":false,"id":"Tool:101231773842107538","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773636491087","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773410696721","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773703650742","typename":"Tool"}],"topics":[{"type":"id","generated":false,"id":"Topic:101231988723036469","typename":"Topic"},{"type":"id","generated":false,"id":"Topic:101231988700396002","typename":"Topic"}],"__typename":"StackDecision"},"$StackDecision:101031322395260474.company":{"imageUrl":"https://img.stackshare.io/company/2139/default_5d6bc688e64213dc42bb467533c97fc793ccc5ca.jpg","thumbUrl":"https://img.stackshare.io/company/2139/thumb_5d6bc688e64213dc42bb467533c97fc793ccc5ca.jpg","name":"Stream","path":"/companies/stream","features":[],"__typename":"Company"},"$StackDecision:101031322395260474.link":{"url":"https://stackshare.io/stream/stream-and-go-news-feeds-for-over-300-million-end-users","title":"Stream & Go: News Feeds for Over 300 Million End Users - Stream Tech Stack | StackShare","__typename":"Link"},"Tool:101231773842107538":{"id":"101231773842107538","name":"Golang","slug":"golang","title":"An open source programming language that makes it easy to build simple, reliable, and efficient software","verified":true,"imageUrl":"https://img.stackshare.io/service/1005/O6AczwfV_400x400.png","canonicalUrl":"/golang","path":"/golang","votes":3299,"fans":17042,"stacks":22472,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231773636491087":{"id":"101231773636491087","name":"Travis CI","slug":"travis-ci","title":"A hosted continuous integration service for open source and private projects","verified":true,"imageUrl":"https://img.stackshare.io/service/460/Lu6cGu0z_400x400.png","canonicalUrl":"/travis-ci","path":"/travis-ci","votes":1749,"fans":9394,"stacks":26385,"following":false,"followContext":null,"__typename":"Tool","followingTool":false,"followersCount":6671,"githubForksCount":null,"thumbRetinaUrl":"https://img.stackshare.io/service/460/thumb_retina_Lu6cGu0z_400x400.png","description":"Free for open source projects, our CI environment provides multiple runtimes (e.g. Node.js or PHP versions), data stores and so on. Because of this, hosting your project on travis-ci.com means you can effortlessly test your library or applications against multiple runtimes and data stores without even having all of them installed locally.","contactEnabled":false,"contactButtonText":"Integrate with Lighstep","contactButtonSponsorId":null,"contactFlow":{"type":"json","json":{"links":[{"url":"https://www.airapp.lightstep.com/signup?utm_source=stackshare&utm_medium=display&utm_campaign=air_acq_prospects_stackshare&utm_term=CTA_placement","type":"website"}],"steps":["direct_link"]}},"pros":{"type":"id","generated":true,"id":"$Tool:101231773636491087.pros","typename":"ReasonConnection"},"cons":{"type":"id","generated":true,"id":"$Tool:101231773636491087.cons","typename":"ReasonConnection"},"stackDecisionsWithAlternatives({\"first\":2})":{"type":"id","generated":true,"id":"$Tool:101231773636491087.stackDecisionsWithAlternatives({\"first\":2})","typename":"StackDecisionConnection"}},"Tool:101231773410696721":{"id":"101231773410696721","name":"GitHub","slug":"github","title":"Powerful collaboration, review, and code management for open source and private development projects","verified":true,"imageUrl":"https://img.stackshare.io/service/27/default_869c34d29acc794d60ecdd5d2b5bfc042a80a4ec.jpg","canonicalUrl":"/github","path":"/github","votes":10341,"fans":283815,"stacks":286091,"following":false,"followContext":null,"__typename":"Tool"},"Topic:101231988723036469":{"name":"ContinuousIntegration","id":"101231988723036469","__typename":"Topic"},"Topic:101231988700396002":{"name":"CodeCollaborationVersionControl","id":"101231988700396002","__typename":"Topic"},"$Tool:101231773703650742.stackDecisionsWithAlternatives({\"first\":2}).edges.1":{"node":{"type":"id","generated":false,"id":"StackDecision:101031322395260474","typename":"StackDecision"},"__typename":"StackDecisionEdge"},"$Tool:101231773703650742.stackDecisionsWithAlternatives({\"first\":2})":{"edges":[{"type":"id","generated":true,"id":"$Tool:101231773703650742.stackDecisionsWithAlternatives({\"first\":2}).edges.0","typename":"StackDecisionEdge"},{"type":"id","generated":true,"id":"$Tool:101231773703650742.stackDecisionsWithAlternatives({\"first\":2}).edges.1","typename":"StackDecisionEdge"}],"__typename":"StackDecisionConnection"},"$Tool:101231773501041914.alternativeTools({\"first\":8}).edges.0":{"node":{"type":"id","generated":false,"id":"Tool:101231773703650742","typename":"Tool"},"__typename":"ToolEdge"},"Reason:101978468033963435":{"id":"101978468033963435","upvoted":false,"upvotesCount":506,"text":"Github integration","__typename":"Reason"},"$Tool:101231773636491087.pros.edges.0":{"node":{"type":"id","generated":false,"id":"Reason:101978468033963435","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468038545472":{"id":"101978468038545472","upvoted":false,"upvotesCount":388,"text":"Free for open source","__typename":"Reason"},"$Tool:101231773636491087.pros.edges.1":{"node":{"type":"id","generated":false,"id":"Reason:101978468038545472","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468101838974":{"id":"101978468101838974","upvoted":false,"upvotesCount":271,"text":"Easy to get started","__typename":"Reason"},"$Tool:101231773636491087.pros.edges.2":{"node":{"type":"id","generated":false,"id":"Reason:101978468101838974","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468056618867":{"id":"101978468056618867","upvoted":false,"upvotesCount":191,"text":"Nice interface","__typename":"Reason"},"$Tool:101231773636491087.pros.edges.3":{"node":{"type":"id","generated":false,"id":"Reason:101978468056618867","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468543064416":{"id":"101978468543064416","upvoted":false,"upvotesCount":162,"text":"Automatic deployment","__typename":"Reason"},"$Tool:101231773636491087.pros.edges.4":{"node":{"type":"id","generated":false,"id":"Reason:101978468543064416","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468091996736":{"id":"101978468091996736","upvoted":false,"upvotesCount":72,"text":"Tutorials for each programming language","__typename":"Reason"},"$Tool:101231773636491087.pros.edges.5":{"node":{"type":"id","generated":false,"id":"Reason:101978468091996736","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468056521341":{"id":"101978468056521341","upvoted":false,"upvotesCount":40,"text":"Friendly folks","__typename":"Reason"},"$Tool:101231773636491087.pros.edges.6":{"node":{"type":"id","generated":false,"id":"Reason:101978468056521341","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468098469631":{"id":"101978468098469631","upvoted":false,"upvotesCount":29,"text":"Support for multiple ruby versions","__typename":"Reason"},"$Tool:101231773636491087.pros.edges.7":{"node":{"type":"id","generated":false,"id":"Reason:101978468098469631","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468127620572":{"id":"101978468127620572","upvoted":false,"upvotesCount":28,"text":"Osx support","__typename":"Reason"},"$Tool:101231773636491087.pros.edges.8":{"node":{"type":"id","generated":false,"id":"Reason:101978468127620572","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468757063317":{"id":"101978468757063317","upvoted":false,"upvotesCount":24,"text":"Easy handling of secret keys","__typename":"Reason"},"$Tool:101231773636491087.pros.edges.9":{"node":{"type":"id","generated":false,"id":"Reason:101978468757063317","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469042243118":{"id":"101978469042243118","upvoted":false,"upvotesCount":6,"text":"Fast builds","__typename":"Reason"},"$Tool:101231773636491087.pros.edges.10":{"node":{"type":"id","generated":false,"id":"Reason:101978469042243118","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468941867095":{"id":"101978468941867095","upvoted":false,"upvotesCount":4,"text":"Support for students","__typename":"Reason"},"$Tool:101231773636491087.pros.edges.11":{"node":{"type":"id","generated":false,"id":"Reason:101978468941867095","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469138555376":{"id":"101978469138555376","upvoted":false,"upvotesCount":3,"text":"The best tool for Open Source CI","__typename":"Reason"},"$Tool:101231773636491087.pros.edges.12":{"node":{"type":"id","generated":false,"id":"Reason:101978469138555376","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469260993910":{"id":"101978469260993910","upvoted":false,"upvotesCount":3,"text":"Hosted","__typename":"Reason"},"$Tool:101231773636491087.pros.edges.13":{"node":{"type":"id","generated":false,"id":"Reason:101978469260993910","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469445858396":{"id":"101978469445858396","upvoted":false,"upvotesCount":3,"text":"Build Matrices","__typename":"Reason"},"$Tool:101231773636491087.pros.edges.14":{"node":{"type":"id","generated":false,"id":"Reason:101978469445858396","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469834449257":{"id":"101978469834449257","upvoted":false,"upvotesCount":2,"text":"Github Pull Request build","__typename":"Reason"},"$Tool:101231773636491087.pros.edges.15":{"node":{"type":"id","generated":false,"id":"Reason:101978469834449257","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469305264815":{"id":"101978469305264815","upvoted":false,"upvotesCount":2,"text":"Straightforward Github/Coveralls integration","__typename":"Reason"},"$Tool:101231773636491087.pros.edges.16":{"node":{"type":"id","generated":false,"id":"Reason:101978469305264815","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469901941464":{"id":"101978469901941464","upvoted":false,"upvotesCount":2,"text":"Easy of Usage","__typename":"Reason"},"$Tool:101231773636491087.pros.edges.17":{"node":{"type":"id","generated":false,"id":"Reason:101978469901941464","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468919407470":{"id":"101978468919407470","upvoted":false,"upvotesCount":2,"text":"Integrates with everything","__typename":"Reason"},"$Tool:101231773636491087.pros.edges.18":{"node":{"type":"id","generated":false,"id":"Reason:101978468919407470","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469404033597":{"id":"101978469404033597","upvoted":false,"upvotesCount":1,"text":"Caching resolved artifacts","__typename":"Reason"},"$Tool:101231773636491087.pros.edges.19":{"node":{"type":"id","generated":false,"id":"Reason:101978469404033597","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978470159141224":{"id":"101978470159141224","upvoted":false,"upvotesCount":1,"text":"Docker support","__typename":"Reason"},"$Tool:101231773636491087.pros.edges.20":{"node":{"type":"id","generated":false,"id":"Reason:101978470159141224","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469546542795":{"id":"101978469546542795","upvoted":false,"upvotesCount":1,"text":"Great Documentation","__typename":"Reason"},"$Tool:101231773636491087.pros.edges.21":{"node":{"type":"id","generated":false,"id":"Reason:101978469546542795","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469584869453":{"id":"101978469584869453","upvoted":false,"upvotesCount":1,"text":"Build matrix","__typename":"Reason"},"$Tool:101231773636491087.pros.edges.22":{"node":{"type":"id","generated":false,"id":"Reason:101978469584869453","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469752427431":{"id":"101978469752427431","upvoted":false,"upvotesCount":1,"text":"No-brainer for CI","__typename":"Reason"},"$Tool:101231773636491087.pros.edges.23":{"node":{"type":"id","generated":false,"id":"Reason:101978469752427431","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469859579652":{"id":"101978469859579652","upvoted":false,"upvotesCount":1,"text":"Debug build workflow","__typename":"Reason"},"$Tool:101231773636491087.pros.edges.24":{"node":{"type":"id","generated":false,"id":"Reason:101978469859579652","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468872278675":{"id":"101978468872278675","upvoted":false,"upvotesCount":1,"text":"Ubuntu trusty is not supported","__typename":"Reason"},"$Tool:101231773636491087.pros.edges.25":{"node":{"type":"id","generated":false,"id":"Reason:101978468872278675","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469583976205":{"id":"101978469583976205","upvoted":false,"upvotesCount":1,"text":"Free for students","__typename":"Reason"},"$Tool:101231773636491087.pros.edges.26":{"node":{"type":"id","generated":false,"id":"Reason:101978469583976205","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469447813502":{"id":"101978469447813502","upvoted":false,"upvotesCount":1,"text":"Configuration saved with project repository","__typename":"Reason"},"$Tool:101231773636491087.pros.edges.27":{"node":{"type":"id","generated":false,"id":"Reason:101978469447813502","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469929478967":{"id":"101978469929478967","upvoted":false,"upvotesCount":1,"text":"Multi-threaded run","__typename":"Reason"},"$Tool:101231773636491087.pros.edges.28":{"node":{"type":"id","generated":false,"id":"Reason:101978469929478967","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469340216362":{"id":"101978469340216362","upvoted":false,"upvotesCount":1,"text":"Hipchat Integration","__typename":"Reason"},"$Tool:101231773636491087.pros.edges.29":{"node":{"type":"id","generated":false,"id":"Reason:101978469340216362","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469426125449":{"id":"101978469426125449","upvoted":false,"upvotesCount":0,"text":"Perfect","__typename":"Reason"},"$Tool:101231773636491087.pros.edges.30":{"node":{"type":"id","generated":false,"id":"Reason:101978469426125449","typename":"Reason"},"__typename":"ReasonEdge"},"$Tool:101231773636491087.pros":{"edges":[{"type":"id","generated":true,"id":"$Tool:101231773636491087.pros.edges.0","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.pros.edges.1","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.pros.edges.2","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.pros.edges.3","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.pros.edges.4","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.pros.edges.5","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.pros.edges.6","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.pros.edges.7","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.pros.edges.8","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.pros.edges.9","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.pros.edges.10","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.pros.edges.11","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.pros.edges.12","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.pros.edges.13","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.pros.edges.14","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.pros.edges.15","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.pros.edges.16","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.pros.edges.17","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.pros.edges.18","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.pros.edges.19","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.pros.edges.20","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.pros.edges.21","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.pros.edges.22","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.pros.edges.23","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.pros.edges.24","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.pros.edges.25","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.pros.edges.26","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.pros.edges.27","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.pros.edges.28","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.pros.edges.29","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.pros.edges.30","typename":"ReasonEdge"}],"__typename":"ReasonConnection"},"Reason:101978469834565475":{"id":"101978469834565475","upvoted":false,"upvotesCount":8,"text":"Can't be hosted insternally","__typename":"Reason"},"$Tool:101231773636491087.cons.edges.0":{"node":{"type":"id","generated":false,"id":"Reason:101978469834565475","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978470258451949":{"id":"101978470258451949","upvoted":false,"upvotesCount":3,"text":"Feature lacking","__typename":"Reason"},"$Tool:101231773636491087.cons.edges.1":{"node":{"type":"id","generated":false,"id":"Reason:101978470258451949","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978470245738788":{"id":"101978470245738788","upvoted":false,"upvotesCount":3,"text":"Unstable","__typename":"Reason"},"$Tool:101231773636491087.cons.edges.2":{"node":{"type":"id","generated":false,"id":"Reason:101978470245738788","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978470256606536":{"id":"101978470256606536","upvoted":false,"upvotesCount":2,"text":"Incomplete documentation for all platforms","__typename":"Reason"},"$Tool:101231773636491087.cons.edges.3":{"node":{"type":"id","generated":false,"id":"Reason:101978470256606536","typename":"Reason"},"__typename":"ReasonEdge"},"$Tool:101231773636491087.cons":{"edges":[{"type":"id","generated":true,"id":"$Tool:101231773636491087.cons.edges.0","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.cons.edges.1","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.cons.edges.2","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.cons.edges.3","typename":"ReasonEdge"}],"__typename":"ReasonConnection"},"$Tool:101231773636491087.stackDecisionsWithAlternatives({\"first\":2}).edges.0":{"node":{"type":"id","generated":false,"id":"StackDecision:101031322395260474","typename":"StackDecision"},"__typename":"StackDecisionEdge"},"User:101232084434873139":{"id":"101232084434873139","username":"praveenm","title":"Engineering Manager","companyName":"Taylor and Francis","imageUrl":"https://img.stackshare.io/user/184805/default_8f070c83259657b92042275d398fe014873e73aa.jpeg","thumbUrl":"https://img.stackshare.io/user/184805/thumb_8f070c83259657b92042275d398fe014873e73aa.jpeg","displayName":"Praveen Mooli","__typename":"User"},"StackDecision:102523983538702954":{"user":{"type":"id","generated":false,"id":"User:101232084434873139","typename":"User"},"company":null,"link":null,"publicId":"102523983538702954","publishedAt":"2019-07-29T09:17:15Z","id":"102523983538702954","htmlContent":"

We are in the process of building a modern content platform to deliver our content through various channels. We decided to go with Microservices architecture as we wanted scale. Microservice architecture style is an approach to developing an application as a suite of small independently deployable services built around specific business capabilities. You can gain modularity, extensive parallelism and cost-effective scaling by deploying services across many distributed servers. Microservices modularity facilitates independent updates/deployments, and helps to avoid single point of failure, which can help prevent large-scale outages.\nWe also decided to use Event Driven Architecture pattern which is a popular distributed asynchronous architecture pattern used to produce highly scalable applications. The event-driven architecture is made up of highly decoupled, single-purpose event processing components that asynchronously receive and process events.\n\n

To build our #Backend capabilities we decided to use the following:\n1. #Microservices - Java with Spring Boot , Node.js with ExpressJS and Python with Flask \n2. #Eventsourcingframework - Amazon Kinesis , Amazon Kinesis Firehose , Amazon SNS , Amazon SQS, AWS Lambda \n3. #Data - Amazon RDS , Amazon DynamoDB , Amazon S3 , MongoDB Atlas \n\n

To build #Webapps we decided to use Angular 2 with RxJS \n\n

#Devops - GitHub , Travis CI , Terraform , Docker , Serverless ","viewCount":4014867,"upvotesCount":19,"services":[{"type":"id","generated":false,"id":"Tool:101231773840406851","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231776297440807","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773838011785","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774666323920","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773845103618","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773920953695","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773837179153","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773632626053","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775186090046","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773618592622","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773618167288","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774215979427","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775174055327","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774170220209","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773410696721","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773636491087","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773970332063","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773669807419","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775927452566","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773523090140","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773615579247","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773409399220","typename":"Tool"}],"topics":[{"type":"id","generated":false,"id":"Topic:101231988901054690","typename":"Topic"},{"type":"id","generated":false,"id":"Topic:101231988911787479","typename":"Topic"},{"type":"id","generated":false,"id":"Topic:101348076767785781","typename":"Topic"},{"type":"id","generated":false,"id":"Topic:101348393685875978","typename":"Topic"},{"type":"id","generated":false,"id":"Topic:101231988857851707","typename":"Topic"},{"type":"id","generated":false,"id":"Topic:101910501640308173","typename":"Topic"}],"__typename":"StackDecision"},"Tool:101231773840406851":{"id":"101231773840406851","name":"Flask","slug":"flask","title":"A microframework for Python based on Werkzeug, Jinja 2 and good intentions","verified":false,"imageUrl":"https://img.stackshare.io/service/1001/default_6d109315b60108628b7cd3e159b84645c31ef0e2.png","canonicalUrl":"/flask","path":"/flask","votes":66,"fans":19626,"stacks":19022,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231776297440807":{"id":"101231776297440807","name":"MongoDB Atlas","slug":"mongodb-atlas","title":"Deploy and scale a MongoDB cluster in the cloud with just a few clicks","verified":true,"imageUrl":"https://img.stackshare.io/service/5739/atlas-360x360.png","canonicalUrl":"/mongodb-atlas","path":"/mongodb-atlas","votes":34,"fans":1151,"stacks":843,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231773838011785":{"id":"101231773838011785","name":"Java","slug":"java","title":"A concurrent, class-based, object-oriented, language specifically designed to have as few implementation dependencies as possible","verified":false,"imageUrl":"https://img.stackshare.io/service/995/K85ZWV2F.png","canonicalUrl":"/java","path":"/java","votes":3710,"fans":118548,"stacks":135284,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231774666323920":{"id":"101231774666323920","name":"Spring Boot","slug":"spring-boot","title":"Create Spring-powered, production-grade applications and services with absolute minimum fuss","verified":false,"imageUrl":"https://img.stackshare.io/service/2927/nPzvMuo2_400x400.png","canonicalUrl":"/spring-boot","path":"/spring-boot","votes":1012,"fans":27713,"stacks":26004,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231773845103618":{"id":"101231773845103618","name":"Node.js","slug":"nodejs","title":"A platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications","verified":false,"imageUrl":"https://img.stackshare.io/service/1011/n1JRsFeB_400x400.png","canonicalUrl":"/nodejs","path":"/nodejs","votes":8539,"fans":182982,"stacks":188756,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231773920953695":{"id":"101231773920953695","name":"ExpressJS","slug":"expressjs","title":"Sinatra inspired web development framework for node.js -- insanely fast, flexible, and simple","verified":false,"imageUrl":"https://img.stackshare.io/service/1163/hashtag.png","canonicalUrl":"/expressjs","path":"/expressjs","votes":1617,"fans":29002,"stacks":32045,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231773837179153":{"id":"101231773837179153","name":"Python","slug":"python","title":"A clear and powerful object-oriented programming language, comparable to Perl, Ruby, Scheme, or Java.","verified":false,"imageUrl":"https://img.stackshare.io/service/993/pUBY5pVj.png","canonicalUrl":"/python","path":"/python","votes":6892,"fans":226855,"stacks":245024,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231773632626053":{"id":"101231773632626053","name":"Amazon Kinesis","slug":"amazon-kinesis","title":"Store and process terabytes of data each hour from hundreds of thousands of sources","verified":false,"imageUrl":"https://img.stackshare.io/service/433/default_6bea44ee4da746fbb7c9070a7ffac9b764d1ed79.png","canonicalUrl":"/amazon-kinesis","path":"/amazon-kinesis","votes":9,"fans":758,"stacks":724,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231775186090046":{"id":"101231775186090046","name":"Amazon Kinesis Firehose","slug":"amazon-kinesis-firehose","title":"Simple and Scalable Data Ingestion","verified":false,"imageUrl":"https://img.stackshare.io/service/3770/amazon-kinesis.png","canonicalUrl":"/amazon-kinesis-firehose","path":"/amazon-kinesis-firehose","votes":0,"fans":238,"stacks":234,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231773618592622":{"id":"101231773618592622","name":"Amazon SNS","slug":"amazon-sns","title":"Fully managed push messaging service","verified":false,"imageUrl":"https://img.stackshare.io/service/396/amazon-sns.png","canonicalUrl":"/amazon-sns","path":"/amazon-sns","votes":18,"fans":1566,"stacks":1387,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231773618167288":{"id":"101231773618167288","name":"Amazon SQS","slug":"amazon-sqs","title":"Fully managed message queuing service","verified":false,"imageUrl":"https://img.stackshare.io/service/395/amazon-sqs.png","canonicalUrl":"/amazon-sqs","path":"/amazon-sqs","votes":171,"fans":2513,"stacks":2238,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231774215979427":{"id":"101231774215979427","name":"AWS Lambda","slug":"aws-lambda","title":"Automatically run code in response to modifications to objects in Amazon S3 buckets, messages in Kinesis streams, or updates in DynamoDB","verified":false,"imageUrl":"https://img.stackshare.io/service/1909/aws-lambda.png","canonicalUrl":"/aws-lambda","path":"/aws-lambda","votes":432,"fans":22862,"stacks":24031,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231775174055327":{"id":"101231775174055327","name":"Angular","slug":"angular","title":"A platform for building mobile and desktop web applications","verified":false,"imageUrl":"https://img.stackshare.io/service/3745/cb8U-gL6_400x400.jpg","canonicalUrl":"/angular","path":"/angular","votes":499,"fans":5365,"stacks":1840,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231774170220209":{"id":"101231774170220209","name":"RxJS","slug":"rxjs","title":"The Reactive Extensions for JavaScript","verified":false,"imageUrl":"https://img.stackshare.io/service/1796/984368.png","canonicalUrl":"/rxjs","path":"/rxjs","votes":21,"fans":1163,"stacks":2127,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231773970332063":{"id":"101231773970332063","name":"Terraform","slug":"terraform","title":"Describe your complete infrastructure as code and build resources across providers","verified":true,"imageUrl":"https://img.stackshare.io/service/1276/default_2316907c4199f912e2ed79cbdb99025c9e5e2665.png","canonicalUrl":"/terraform","path":"/terraform","votes":344,"fans":17542,"stacks":18411,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231775927452566":{"id":"101231775927452566","name":"Serverless","slug":"serverless","title":"The most widely-adopted toolkit for building serverless applications","verified":false,"imageUrl":"https://img.stackshare.io/service/5095/serverless-logo.png","canonicalUrl":"/serverless","path":"/serverless","votes":26,"fans":1540,"stacks":1335,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231773523090140":{"id":"101231773523090140","name":"Amazon RDS","slug":"amazon-rds","title":"Set up, operate, and scale a relational database in the cloud.","verified":false,"imageUrl":"https://img.stackshare.io/service/232/amazon-rds.png","canonicalUrl":"/amazon-rds","path":"/amazon-rds","votes":761,"fans":13719,"stacks":15850,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231773615579247":{"id":"101231773615579247","name":"Amazon DynamoDB","slug":"amazon-dynamodb","title":"Fully managed NoSQL database service","verified":false,"imageUrl":"https://img.stackshare.io/service/389/amazon-dynamodb.png","canonicalUrl":"/amazon-dynamodb","path":"/amazon-dynamodb","votes":195,"fans":4020,"stacks":3709,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231773409399220":{"id":"101231773409399220","name":"Amazon S3","slug":"amazon-s3","title":"Store and retrieve any amount of data, at any time, from anywhere on the web","verified":false,"imageUrl":"https://img.stackshare.io/service/25/amazon-s3.png","canonicalUrl":"/amazon-s3","path":"/amazon-s3","votes":2041,"fans":47934,"stacks":53256,"following":false,"followContext":null,"__typename":"Tool"},"Topic:101231988901054690":{"name":"Backend","id":"101231988901054690","__typename":"Topic"},"Topic:101231988911787479":{"name":"Microservices","id":"101231988911787479","__typename":"Topic"},"Topic:101348076767785781":{"name":"Eventsourcingframework","id":"101348076767785781","__typename":"Topic"},"Topic:101348393685875978":{"name":"Webapps","id":"101348393685875978","__typename":"Topic"},"Topic:101231988857851707":{"name":"Devops","id":"101231988857851707","__typename":"Topic"},"Topic:101910501640308173":{"name":"Data","id":"101910501640308173","__typename":"Topic"},"$Tool:101231773636491087.stackDecisionsWithAlternatives({\"first\":2}).edges.1":{"node":{"type":"id","generated":false,"id":"StackDecision:102523983538702954","typename":"StackDecision"},"__typename":"StackDecisionEdge"},"$Tool:101231773636491087.stackDecisionsWithAlternatives({\"first\":2})":{"edges":[{"type":"id","generated":true,"id":"$Tool:101231773636491087.stackDecisionsWithAlternatives({\"first\":2}).edges.0","typename":"StackDecisionEdge"},{"type":"id","generated":true,"id":"$Tool:101231773636491087.stackDecisionsWithAlternatives({\"first\":2}).edges.1","typename":"StackDecisionEdge"}],"__typename":"StackDecisionConnection"},"$Tool:101231773501041914.alternativeTools({\"first\":8}).edges.1":{"node":{"type":"id","generated":false,"id":"Tool:101231773636491087","typename":"Tool"},"__typename":"ToolEdge"},"Tool:101231773519387701":{"id":"101231773519387701","path":"/codeship","slug":"codeship","title":"A Continuous Integration Platform in the cloud","votes":1451,"followingTool":false,"followersCount":729,"stacks":1061,"githubForksCount":null,"imageUrl":"https://img.stackshare.io/service/224/avatar_codeship_colour.png","thumbRetinaUrl":"https://img.stackshare.io/service/224/thumb_retina_avatar_codeship_colour.png","name":"Codeship","description":"Codeship runs your automated tests and configured deployment when you push to your repository. It takes care of managing and scaling the infrastructure so that you are able to test and release more frequently and get faster feedback for building the product your users need.","contactEnabled":false,"contactButtonText":null,"contactButtonSponsorId":null,"contactFlow":{"type":"json","json":{"links":[{"url":"","type":"website"}],"steps":["direct_link"]}},"pros":{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros","typename":"ReasonConnection"},"cons":{"type":"id","generated":true,"id":"$Tool:101231773519387701.cons","typename":"ReasonConnection"},"verified":true,"canonicalUrl":"/codeship","fans":1088,"following":false,"followContext":null,"__typename":"Tool","stackDecisionsWithAlternatives({\"first\":2})":{"type":"id","generated":true,"id":"$Tool:101231773519387701.stackDecisionsWithAlternatives({\"first\":2})","typename":"StackDecisionConnection"}},"Reason:101978468064283154":{"id":"101978468064283154","upvoted":false,"upvotesCount":215,"text":"Simple deployments","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.0":{"node":{"type":"id","generated":false,"id":"Reason:101978468064283154","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468102018134":{"id":"101978468102018134","upvoted":false,"upvotesCount":179,"text":"Easy setup","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.1":{"node":{"type":"id","generated":false,"id":"Reason:101978468102018134","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468094022321":{"id":"101978468094022321","upvoted":false,"upvotesCount":159,"text":"Github integration","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.2":{"node":{"type":"id","generated":false,"id":"Reason:101978468094022321","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468275621789":{"id":"101978468275621789","upvoted":false,"upvotesCount":147,"text":"Continuous deployment","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.3":{"node":{"type":"id","generated":false,"id":"Reason:101978468275621789","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468139459499":{"id":"101978468139459499","upvoted":false,"upvotesCount":110,"text":"Bitbucket integration","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.4":{"node":{"type":"id","generated":false,"id":"Reason:101978468139459499","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468094372601":{"id":"101978468094372601","upvoted":false,"upvotesCount":97,"text":"Easy ui","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.5":{"node":{"type":"id","generated":false,"id":"Reason:101978468094372601","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468208901612":{"id":"101978468208901612","upvoted":false,"upvotesCount":84,"text":"Slack integration","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.6":{"node":{"type":"id","generated":false,"id":"Reason:101978468208901612","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468271693690":{"id":"101978468271693690","upvoted":false,"upvotesCount":66,"text":"Fast builds","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.7":{"node":{"type":"id","generated":false,"id":"Reason:101978468271693690","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468271414916":{"id":"101978468271414916","upvoted":false,"upvotesCount":61,"text":"Great ui","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.8":{"node":{"type":"id","generated":false,"id":"Reason:101978468271414916","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468185651506":{"id":"101978468185651506","upvoted":false,"upvotesCount":61,"text":"Great customer support","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.9":{"node":{"type":"id","generated":false,"id":"Reason:101978468185651506","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468423508315":{"id":"101978468423508315","upvoted":false,"upvotesCount":28,"text":"SSH debug access","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.10":{"node":{"type":"id","generated":false,"id":"Reason:101978468423508315","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468543488750":{"id":"101978468543488750","upvoted":false,"upvotesCount":27,"text":"Free plan for 5 private repositories","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.11":{"node":{"type":"id","generated":false,"id":"Reason:101978468543488750","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468270499053":{"id":"101978468270499053","upvoted":false,"upvotesCount":27,"text":"Easy to get started","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.12":{"node":{"type":"id","generated":false,"id":"Reason:101978468270499053","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468271845655":{"id":"101978468271845655","upvoted":false,"upvotesCount":23,"text":"Competitively priced","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.13":{"node":{"type":"id","generated":false,"id":"Reason:101978468271845655","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468423635408":{"id":"101978468423635408","upvoted":false,"upvotesCount":20,"text":"Notifications","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.14":{"node":{"type":"id","generated":false,"id":"Reason:101978468423635408","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468094141018":{"id":"101978468094141018","upvoted":false,"upvotesCount":20,"text":"Hipchat, Campfire integrations","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.15":{"node":{"type":"id","generated":false,"id":"Reason:101978468094141018","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468275182716":{"id":"101978468275182716","upvoted":false,"upvotesCount":16,"text":"Awesome UI","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.16":{"node":{"type":"id","generated":false,"id":"Reason:101978468275182716","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468271572959":{"id":"101978468271572959","upvoted":false,"upvotesCount":15,"text":"Fast","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.17":{"node":{"type":"id","generated":false,"id":"Reason:101978468271572959","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468271055790":{"id":"101978468271055790","upvoted":false,"upvotesCount":14,"text":"Great documentation ","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.18":{"node":{"type":"id","generated":false,"id":"Reason:101978468271055790","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468546780055":{"id":"101978468546780055","upvoted":false,"upvotesCount":13,"text":"Great experience","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.19":{"node":{"type":"id","generated":false,"id":"Reason:101978468546780055","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468541723108":{"id":"101978468541723108","upvoted":false,"upvotesCount":12,"text":"Free for open source","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.20":{"node":{"type":"id","generated":false,"id":"Reason:101978468541723108","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468271247157":{"id":"101978468271247157","upvoted":false,"upvotesCount":10,"text":"Great Tutorials","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.21":{"node":{"type":"id","generated":false,"id":"Reason:101978468271247157","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469467334397":{"id":"101978469467334397","upvoted":false,"upvotesCount":4,"text":"GitLab integration","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.22":{"node":{"type":"id","generated":false,"id":"Reason:101978469467334397","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469297921351":{"id":"101978469297921351","upvoted":false,"upvotesCount":4,"text":"Free","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.23":{"node":{"type":"id","generated":false,"id":"Reason:101978469297921351","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468853253228":{"id":"101978468853253228","upvoted":false,"upvotesCount":4,"text":"Easy to use, above all and its free for basic use","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.24":{"node":{"type":"id","generated":false,"id":"Reason:101978468853253228","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468775794027":{"id":"101978468775794027","upvoted":false,"upvotesCount":3,"text":"Easy for CI first timers","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.25":{"node":{"type":"id","generated":false,"id":"Reason:101978468775794027","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468954826613":{"id":"101978468954826613","upvoted":false,"upvotesCount":3,"text":"BitBucket Support","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.26":{"node":{"type":"id","generated":false,"id":"Reason:101978468954826613","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468779421145":{"id":"101978468779421145","upvoted":false,"upvotesCount":3,"text":"Very easy to get started","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.27":{"node":{"type":"id","generated":false,"id":"Reason:101978468779421145","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469315080070":{"id":"101978469315080070","upvoted":false,"upvotesCount":3,"text":"Build private Github repos on the free plan","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.28":{"node":{"type":"id","generated":false,"id":"Reason:101978469315080070","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468774604385":{"id":"101978468774604385","upvoted":false,"upvotesCount":3,"text":"Awesome","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.29":{"node":{"type":"id","generated":false,"id":"Reason:101978468774604385","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468776040296":{"id":"101978468776040296","upvoted":false,"upvotesCount":2,"text":"Super easy setup, works great with py.test/tox","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.30":{"node":{"type":"id","generated":false,"id":"Reason:101978468776040296","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468769130075":{"id":"101978468769130075","upvoted":false,"upvotesCount":2,"text":"Openshift integration","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.31":{"node":{"type":"id","generated":false,"id":"Reason:101978468769130075","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468936224662":{"id":"101978468936224662","upvoted":false,"upvotesCount":2,"text":"Great support, even on free tier","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.32":{"node":{"type":"id","generated":false,"id":"Reason:101978468936224662","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468936693874":{"id":"101978468936693874","upvoted":false,"upvotesCount":2,"text":"AppEngine integration","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.33":{"node":{"type":"id","generated":false,"id":"Reason:101978468936693874","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469165094349":{"id":"101978469165094349","upvoted":false,"upvotesCount":2,"text":"Easy debugging with ssh","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.34":{"node":{"type":"id","generated":false,"id":"Reason:101978469165094349","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468782369638":{"id":"101978468782369638","upvoted":false,"upvotesCount":2,"text":"Integrates with other free software","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.35":{"node":{"type":"id","generated":false,"id":"Reason:101978468782369638","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468772930859":{"id":"101978468772930859","upvoted":false,"upvotesCount":2,"text":"Superfast team work integration","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.36":{"node":{"type":"id","generated":false,"id":"Reason:101978468772930859","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468774408137":{"id":"101978468774408137","upvoted":false,"upvotesCount":2,"text":"Grepping Codeship = 1 day. Grepping Bamboo = 1 month","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.37":{"node":{"type":"id","generated":false,"id":"Reason:101978468774408137","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468774870562":{"id":"101978468774870562","upvoted":false,"upvotesCount":2,"text":"Easy to set up, very nice GitHub integration","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.38":{"node":{"type":"id","generated":false,"id":"Reason:101978468774870562","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978468775161957":{"id":"101978468775161957","upvoted":false,"upvotesCount":2,"text":"Up and running in few minutes, and above all UI","__typename":"Reason"},"$Tool:101231773519387701.pros.edges.39":{"node":{"type":"id","generated":false,"id":"Reason:101978468775161957","typename":"Reason"},"__typename":"ReasonEdge"},"$Tool:101231773519387701.pros":{"edges":[{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.0","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.1","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.2","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.3","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.4","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.5","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.6","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.7","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.8","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.9","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.10","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.11","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.12","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.13","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.14","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.15","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.16","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.17","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.18","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.19","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.20","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.21","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.22","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.23","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.24","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.25","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.26","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.27","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.28","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.29","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.30","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.31","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.32","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.33","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.34","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.35","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.36","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.37","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.38","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.pros.edges.39","typename":"ReasonEdge"}],"__typename":"ReasonConnection"},"Reason:101978469544066197":{"id":"101978469544066197","upvoted":false,"upvotesCount":3,"text":"Ui could use some polishing","__typename":"Reason"},"$Tool:101231773519387701.cons.edges.0":{"node":{"type":"id","generated":false,"id":"Reason:101978469544066197","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978470200598842":{"id":"101978470200598842","upvoted":false,"upvotesCount":0,"text":"Antiquated ui","__typename":"Reason"},"$Tool:101231773519387701.cons.edges.1":{"node":{"type":"id","generated":false,"id":"Reason:101978470200598842","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978470200729204":{"id":"101978470200729204","upvoted":false,"upvotesCount":0,"text":"Difficult to answer build questions","__typename":"Reason"},"$Tool:101231773519387701.cons.edges.2":{"node":{"type":"id","generated":false,"id":"Reason:101978470200729204","typename":"Reason"},"__typename":"ReasonEdge"},"$Tool:101231773519387701.cons":{"edges":[{"type":"id","generated":true,"id":"$Tool:101231773519387701.cons.edges.0","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.cons.edges.1","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231773519387701.cons.edges.2","typename":"ReasonEdge"}],"__typename":"ReasonConnection"},"User:101475970752360663":{"id":"101475970752360663","username":"pdg_sebastian","title":"Solution Architect","companyName":"Porsche Digital GmbH","imageUrl":"https://img.stackshare.io/user/280677/default_d1b544d9536cda06ff7338330463acbcaf21d5f1.png","thumbUrl":"https://img.stackshare.io/user/280677/thumb_d1b544d9536cda06ff7338330463acbcaf21d5f1.png","displayName":"Sebastian Dellwig","__typename":"User"},"StackDecision:101849477914721723":{"user":{"type":"id","generated":false,"id":"User:101475970752360663","typename":"User"},"company":null,"link":null,"publicId":"101849477914721723","publishedAt":"2019-04-01T06:21:38Z","id":"101849477914721723","htmlContent":"

We are using GitLab CI and were very happy with it. The integration of all tools like CI/CD, tickets, etc makes it very easy to stay on top of things. But be aware, Gitlab currently does not have iOS build support. So if you want to exchange that for CircleCI / Codeship to have to invest some effort. We are using a managed Mac OS device and installed the Gitlab runner there, to have iOS builds. ","viewCount":198935,"upvotesCount":6,"services":[{"type":"id","generated":false,"id":"Tool:101231776189486570","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773501041914","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773519387701","typename":"Tool"}],"topics":[],"__typename":"StackDecision"},"Tool:101231776189486570":{"id":"101231776189486570","name":"GitLab CI","slug":"gitlab-ci","title":"GitLab integrated CI to test, build and deploy your code","verified":true,"imageUrl":"https://img.stackshare.io/service/5545/9pAwHBR0.jpg","canonicalUrl":"/gitlab-ci","path":"/gitlab-ci","votes":75,"fans":2279,"stacks":2299,"following":false,"followContext":null,"__typename":"Tool"},"$Tool:101231773519387701.stackDecisionsWithAlternatives({\"first\":2}).edges.0":{"node":{"type":"id","generated":false,"id":"StackDecision:101849477914721723","typename":"StackDecision"},"__typename":"StackDecisionEdge"},"$Tool:101231773519387701.stackDecisionsWithAlternatives({\"first\":2})":{"edges":[{"type":"id","generated":true,"id":"$Tool:101231773519387701.stackDecisionsWithAlternatives({\"first\":2}).edges.0","typename":"StackDecisionEdge"}],"__typename":"StackDecisionConnection"},"$Tool:101231773501041914.alternativeTools({\"first\":8}).edges.2":{"node":{"type":"id","generated":false,"id":"Tool:101231773519387701","typename":"Tool"},"__typename":"ToolEdge"},"Tool:101231775485321502":{"id":"101231775485321502","path":"/azure-devops","slug":"azure-devops","title":"Services for teams to share code, track work, and ship software","votes":249,"followingTool":false,"followersCount":2844,"stacks":2719,"githubForksCount":null,"imageUrl":"https://img.stackshare.io/service/4313/XNKktHjN_400x400.png","thumbRetinaUrl":"https://img.stackshare.io/service/4313/thumb_retina_XNKktHjN_400x400.png","name":"Azure DevOps","description":"Azure DevOps provides unlimited private Git hosting, cloud build for continuous integration, agile planning, and release management for continuous delivery to the cloud and on-premises. Includes broad IDE support.","contactEnabled":true,"contactButtonText":"Join the Snowflake Build Summit","contactButtonSponsorId":"110427692320535380","contactFlow":{"type":"json","json":{"links":[{"url":"https://www.snowflake.com/build/?utm_source=stackshare&utm_medium=display&utm_campaign=na-us-en-stackshare&utm_content=-ld-build-stackshare","type":"website"}],"steps":["direct_link"]}},"pros":{"type":"id","generated":true,"id":"$Tool:101231775485321502.pros","typename":"ReasonConnection"},"cons":{"type":"id","generated":true,"id":"$Tool:101231775485321502.cons","typename":"ReasonConnection"},"verified":true,"canonicalUrl":"/azure-devops","fans":3615,"following":false,"followContext":null,"__typename":"Tool","stackDecisionsWithAlternatives({\"first\":2})":{"type":"id","generated":true,"id":"$Tool:101231775485321502.stackDecisionsWithAlternatives({\"first\":2})","typename":"StackDecisionConnection"}},"Reason:101978469612541183":{"id":"101978469612541183","upvoted":false,"upvotesCount":56,"text":"Complete and powerful","__typename":"Reason"},"$Tool:101231775485321502.pros.edges.0":{"node":{"type":"id","generated":false,"id":"Reason:101978469612541183","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469676569824":{"id":"101978469676569824","upvoted":false,"upvotesCount":32,"text":"Huge extension ecosystem","__typename":"Reason"},"$Tool:101231775485321502.pros.edges.1":{"node":{"type":"id","generated":false,"id":"Reason:101978469676569824","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469990530461":{"id":"101978469990530461","upvoted":false,"upvotesCount":27,"text":"Azure integration","__typename":"Reason"},"$Tool:101231775485321502.pros.edges.2":{"node":{"type":"id","generated":false,"id":"Reason:101978469990530461","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469704025469":{"id":"101978469704025469","upvoted":false,"upvotesCount":26,"text":"Flexible and powerful","__typename":"Reason"},"$Tool:101231775485321502.pros.edges.3":{"node":{"type":"id","generated":false,"id":"Reason:101978469704025469","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978470185322452":{"id":"101978470185322452","upvoted":false,"upvotesCount":26,"text":"One Stop Shop For Build server, Project Mgt, CDCI ","__typename":"Reason"},"$Tool:101231775485321502.pros.edges.4":{"node":{"type":"id","generated":false,"id":"Reason:101978470185322452","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469954847648":{"id":"101978469954847648","upvoted":false,"upvotesCount":15,"text":"Everything I need. Simple and intuitive UI","__typename":"Reason"},"$Tool:101231775485321502.pros.edges.5":{"node":{"type":"id","generated":false,"id":"Reason:101978469954847648","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469976369984":{"id":"101978469976369984","upvoted":false,"upvotesCount":13,"text":"Support Open Source","__typename":"Reason"},"$Tool:101231775485321502.pros.edges.6":{"node":{"type":"id","generated":false,"id":"Reason:101978469976369984","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469991331661":{"id":"101978469991331661","upvoted":false,"upvotesCount":8,"text":"Integrations","__typename":"Reason"},"$Tool:101231775485321502.pros.edges.7":{"node":{"type":"id","generated":false,"id":"Reason:101978469991331661","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:102417278791373842":{"id":"102417278791373842","upvoted":false,"upvotesCount":7,"text":"GitHub Integration","__typename":"Reason"},"$Tool:101231775485321502.pros.edges.8":{"node":{"type":"id","generated":false,"id":"Reason:102417278791373842","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:104313520938115890":{"id":"104313520938115890","upvoted":false,"upvotesCount":6,"text":"Cost free for Stakeholders","__typename":"Reason"},"$Tool:101231775485321502.pros.edges.9":{"node":{"type":"id","generated":false,"id":"Reason:104313520938115890","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:104105856787910690":{"id":"104105856787910690","upvoted":false,"upvotesCount":6,"text":"One 4 all","__typename":"Reason"},"$Tool:101231775485321502.pros.edges.10":{"node":{"type":"id","generated":false,"id":"Reason:104105856787910690","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469948153156":{"id":"101978469948153156","upvoted":false,"upvotesCount":6,"text":"Crap","__typename":"Reason"},"$Tool:101231775485321502.pros.edges.11":{"node":{"type":"id","generated":false,"id":"Reason:101978469948153156","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:103773387831026191":{"id":"103773387831026191","upvoted":false,"upvotesCount":6,"text":"Project Mgmt Features","__typename":"Reason"},"$Tool:101231775485321502.pros.edges.12":{"node":{"type":"id","generated":false,"id":"Reason:103773387831026191","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:104313537577922515":{"id":"104313537577922515","upvoted":false,"upvotesCount":5,"text":"Runs in the cloud","__typename":"Reason"},"$Tool:101231775485321502.pros.edges.13":{"node":{"type":"id","generated":false,"id":"Reason:104313537577922515","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:105112695003820229":{"id":"105112695003820229","upvoted":false,"upvotesCount":3,"text":"Agent On-Premise(Linux - Windows)","__typename":"Reason"},"$Tool:101231775485321502.pros.edges.14":{"node":{"type":"id","generated":false,"id":"Reason:105112695003820229","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:103915580825413844":{"id":"103915580825413844","upvoted":false,"upvotesCount":2,"text":"Aws integration","__typename":"Reason"},"$Tool:101231775485321502.pros.edges.15":{"node":{"type":"id","generated":false,"id":"Reason:103915580825413844","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:107896030401469962":{"id":"107896030401469962","upvoted":false,"upvotesCount":2,"text":"Link Test Cases to Stories","__typename":"Reason"},"$Tool:101231775485321502.pros.edges.16":{"node":{"type":"id","generated":false,"id":"Reason:107896030401469962","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:102417277856461619":{"id":"102417277856461619","upvoted":false,"upvotesCount":2,"text":"Jenkins Integration","__typename":"Reason"},"$Tool:101231775485321502.pros.edges.17":{"node":{"type":"id","generated":false,"id":"Reason:102417277856461619","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:105422757756325606":{"id":"105422757756325606","upvoted":false,"upvotesCount":1,"text":"GCP Integration","__typename":"Reason"},"$Tool:101231775485321502.pros.edges.18":{"node":{"type":"id","generated":false,"id":"Reason:105422757756325606","typename":"Reason"},"__typename":"ReasonEdge"},"$Tool:101231775485321502.pros":{"edges":[{"type":"id","generated":true,"id":"$Tool:101231775485321502.pros.edges.0","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775485321502.pros.edges.1","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775485321502.pros.edges.2","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775485321502.pros.edges.3","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775485321502.pros.edges.4","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775485321502.pros.edges.5","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775485321502.pros.edges.6","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775485321502.pros.edges.7","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775485321502.pros.edges.8","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775485321502.pros.edges.9","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775485321502.pros.edges.10","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775485321502.pros.edges.11","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775485321502.pros.edges.12","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775485321502.pros.edges.13","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775485321502.pros.edges.14","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775485321502.pros.edges.15","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775485321502.pros.edges.16","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775485321502.pros.edges.17","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775485321502.pros.edges.18","typename":"ReasonEdge"}],"__typename":"ReasonConnection"},"Reason:102111779650173994":{"id":"102111779650173994","upvoted":false,"upvotesCount":8,"text":"Still dependant on C# for agents","__typename":"Reason"},"$Tool:101231775485321502.cons.edges.0":{"node":{"type":"id","generated":false,"id":"Reason:102111779650173994","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:102111777097797337":{"id":"102111777097797337","upvoted":false,"upvotesCount":5,"text":"Half Baked","__typename":"Reason"},"$Tool:101231775485321502.cons.edges.1":{"node":{"type":"id","generated":false,"id":"Reason:102111777097797337","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:104992327744453943":{"id":"104992327744453943","upvoted":false,"upvotesCount":5,"text":"Many in devops disregard MS altogether","__typename":"Reason"},"$Tool:101231775485321502.cons.edges.2":{"node":{"type":"id","generated":false,"id":"Reason:104992327744453943","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:102111771312633849":{"id":"102111771312633849","upvoted":false,"upvotesCount":4,"text":"Not a requirements management tool","__typename":"Reason"},"$Tool:101231775485321502.cons.edges.3":{"node":{"type":"id","generated":false,"id":"Reason:102111771312633849","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:102111778018846138":{"id":"102111778018846138","upvoted":false,"upvotesCount":4,"text":"Jack of all trades, master of none","__typename":"Reason"},"$Tool:101231775485321502.cons.edges.4":{"node":{"type":"id","generated":false,"id":"Reason:102111778018846138","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:102111775380327430":{"id":"102111775380327430","upvoted":false,"upvotesCount":4,"text":"Capacity across cross functional teams not visibile","__typename":"Reason"},"$Tool:101231775485321502.cons.edges.5":{"node":{"type":"id","generated":false,"id":"Reason:102111775380327430","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:102111780359612069":{"id":"102111780359612069","upvoted":false,"upvotesCount":3,"text":"Poor Jenkins integration","__typename":"Reason"},"$Tool:101231775485321502.cons.edges.6":{"node":{"type":"id","generated":false,"id":"Reason:102111780359612069","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:107896024159189578":{"id":"107896024159189578","upvoted":false,"upvotesCount":2,"text":"Tedious for test plan/case creation","__typename":"Reason"},"$Tool:101231775485321502.cons.edges.7":{"node":{"type":"id","generated":false,"id":"Reason:107896024159189578","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:112849000376700254":{"id":"112849000376700254","upvoted":false,"upvotesCount":1,"text":"Switching accounts is impossible","__typename":"Reason"},"$Tool:101231775485321502.cons.edges.8":{"node":{"type":"id","generated":false,"id":"Reason:112849000376700254","typename":"Reason"},"__typename":"ReasonEdge"},"$Tool:101231775485321502.cons":{"edges":[{"type":"id","generated":true,"id":"$Tool:101231775485321502.cons.edges.0","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775485321502.cons.edges.1","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775485321502.cons.edges.2","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775485321502.cons.edges.3","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775485321502.cons.edges.4","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775485321502.cons.edges.5","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775485321502.cons.edges.6","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775485321502.cons.edges.7","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775485321502.cons.edges.8","typename":"ReasonEdge"}],"__typename":"ReasonConnection"},"User:102133416453263150":{"id":"102133416453263150","username":"Berryworld","title":"Senior Software Architect","companyName":"BerryWorld","imageUrl":"https://img.stackshare.io/user/295951/default_c5b0093e677a1b5cb86d7ec04e2377500c5e30ea.jpeg","thumbUrl":"https://img.stackshare.io/user/295951/thumb_c5b0093e677a1b5cb86d7ec04e2377500c5e30ea.jpeg","displayName":"Farzad Jalali","__typename":"User"},"StackDecision:102133557556206457":{"user":{"type":"id","generated":false,"id":"User:102133416453263150","typename":"User"},"company":null,"link":null,"publicId":"102133557556206457","publishedAt":"2019-05-21T10:26:49Z","id":"102133557556206457","htmlContent":"

Visual Studio Azure DevOps Azure Functions Azure Websites #Azure #AzureKeyVault #AzureAD #AzureApps \n\n

#Azure Cloud\n Since Amazon is potentially our competitor then we need a different cloud vendor, also our programmers are microsoft oriented so the choose were obviously #Azure for us.\n\n

Azure DevOps\nBecause we need to be able to develop a neww pipeline into Azure environment ina few minutes.\n\n

Azure Kubernetes Service\nWe already in #Azure , also need to use K8s , so let's use AKS as it's a manged Kubernetes in the #Azure ","viewCount":432133,"upvotesCount":8,"services":[{"type":"id","generated":false,"id":"Tool:101231774035145826","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775485321502","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775768748177","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774284953028","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231778000971130","typename":"Tool"}],"topics":[{"type":"id","generated":false,"id":"Topic:101231988912463766","typename":"Topic"},{"type":"id","generated":false,"id":"Topic:101231988886079950","typename":"Topic"},{"type":"id","generated":false,"id":"Topic:101231988885721858","typename":"Topic"},{"type":"id","generated":false,"id":"Topic:102133557472489079","typename":"Topic"}],"__typename":"StackDecision"},"Tool:101231774035145826":{"id":"101231774035145826","name":"Visual Studio","slug":"visual-studio","title":"State-of-the-art tools and services that you can use to create great apps for devices, the cloud, and everything in between.","verified":true,"imageUrl":"https://img.stackshare.io/service/1451/SR2hUhQN.png","canonicalUrl":"/visual-studio","path":"/visual-studio","votes":1087,"fans":44418,"stacks":48231,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231775768748177":{"id":"101231775768748177","name":"Azure Functions","slug":"azure-functions","title":"Listen and react to events across your stack","verified":true,"imageUrl":"https://img.stackshare.io/service/4851/default_1c86e0d45d685cb73aa9a39a658159f6199de49d.png","canonicalUrl":"/azure-functions","path":"/azure-functions","votes":62,"fans":908,"stacks":674,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231774284953028":{"id":"101231774284953028","name":"Azure Websites","slug":"azure-websites","title":"Deploy and scale modern websites and web apps in seconds","verified":false,"imageUrl":"https://img.stackshare.io/service/2100/W9gT7hZo.png","canonicalUrl":"/azure-websites","path":"/azure-websites","votes":23,"fans":473,"stacks":403,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231778000971130":{"id":"101231778000971130","name":"Azure Kubernetes Service","slug":"azure-kubernetes-service","title":"Simplify Kubernetes management, deployment, and operations.","verified":true,"imageUrl":"https://img.stackshare.io/service/9133/Azure-Container-Service_COLOR-300x300.png","canonicalUrl":"/azure-kubernetes-service","path":"/azure-kubernetes-service","votes":0,"fans":477,"stacks":388,"following":false,"followContext":null,"__typename":"Tool"},"Topic:101231988912463766":{"name":"Azure","id":"101231988912463766","__typename":"Topic"},"Topic:101231988886079950":{"name":"AzureKeyVault","id":"101231988886079950","__typename":"Topic"},"Topic:101231988885721858":{"name":"AzureAD","id":"101231988885721858","__typename":"Topic"},"Topic:102133557472489079":{"name":"AzureApps","id":"102133557472489079","__typename":"Topic"},"$Tool:101231775485321502.stackDecisionsWithAlternatives({\"first\":2}).edges.0":{"node":{"type":"id","generated":false,"id":"StackDecision:102133557556206457","typename":"StackDecision"},"__typename":"StackDecisionEdge"},"User:101957692452962253":{"id":"101957692452962253","username":"kant2002","title":"Sr. Software developer","companyName":null,"imageUrl":"https://img.stackshare.io/user/292055/default_146c41d7e5b8c8d2b325c15a40f1c79381d03696.png","thumbUrl":"https://img.stackshare.io/user/292055/thumb_146c41d7e5b8c8d2b325c15a40f1c79381d03696.png","displayName":"Andrey Kurdyumov","__typename":"User"},"StackDecision:101966189650444301":{"user":{"type":"id","generated":false,"id":"User:101957692452962253","typename":"User"},"company":null,"link":null,"publicId":"101966189650444301","publishedAt":"2019-04-21T21:02:59Z","id":"101966189650444301","htmlContent":"

I use Azure DevOps because for me it gradually walk me from private Git repositories to simplest free option for CI/CD pipelines at the time. I spend 0$ initially to manager CI/CD for my small private projects. No need to go into two different places to setup integration, once I have git repository, I could deploy projects. Right now this is not the case since CI/CD is default for me, so I use it now from memories of old good days. I'm not yet need complexity on the projects, so I don't even consider other options with \"more choices\". I carefully limit my set of options during development, that's why Azure DevOps (VSTS)","viewCount":205116,"upvotesCount":8,"services":[{"type":"id","generated":false,"id":"Tool:101231775485321502","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773858546548","typename":"Tool"}],"topics":[],"__typename":"StackDecision"},"$Tool:101231775485321502.stackDecisionsWithAlternatives({\"first\":2}).edges.1":{"node":{"type":"id","generated":false,"id":"StackDecision:101966189650444301","typename":"StackDecision"},"__typename":"StackDecisionEdge"},"$Tool:101231775485321502.stackDecisionsWithAlternatives({\"first\":2})":{"edges":[{"type":"id","generated":true,"id":"$Tool:101231775485321502.stackDecisionsWithAlternatives({\"first\":2}).edges.0","typename":"StackDecisionEdge"},{"type":"id","generated":true,"id":"$Tool:101231775485321502.stackDecisionsWithAlternatives({\"first\":2}).edges.1","typename":"StackDecisionEdge"}],"__typename":"StackDecisionConnection"},"$Tool:101231773501041914.alternativeTools({\"first\":8}).edges.3":{"node":{"type":"id","generated":false,"id":"Tool:101231775485321502","typename":"Tool"},"__typename":"ToolEdge"},"Tool:101231775827426513":{"id":"101231775827426513","path":"/concourse","slug":"concourse","title":"Pipeline-based CI system written in Go","votes":54,"followingTool":false,"followersCount":393,"stacks":262,"githubForksCount":848,"imageUrl":"https://img.stackshare.io/service/4949/jnsjSQcw_400x400.jpg","thumbRetinaUrl":"https://img.stackshare.io/service/4949/thumb_retina_jnsjSQcw_400x400.jpg","name":"Concourse","description":"Concourse's principles reduce the risk of switching to and from Concourse, by encouraging practices that decouple your project from your CI's little details, and keeping all configuration in declarative files that can be checked into version control. ","contactEnabled":false,"contactButtonText":"Integrate with Lighstep","contactButtonSponsorId":null,"contactFlow":{"type":"json","json":{"links":[{"url":"https://www.airapp.lightstep.com/signup?utm_source=stackshare&utm_medium=display&utm_campaign=air_acq_prospects_stackshare&utm_term=CTA_placement","type":"website"}],"steps":["direct_link"]}},"pros":{"type":"id","generated":true,"id":"$Tool:101231775827426513.pros","typename":"ReasonConnection"},"cons":{"type":"id","generated":true,"id":"$Tool:101231775827426513.cons","typename":"ReasonConnection"},"verified":false,"canonicalUrl":"/concourse","fans":464,"following":false,"followContext":null,"__typename":"Tool","stackDecisionsWithAlternatives({\"first\":2})":{"type":"id","generated":true,"id":"$Tool:101231775827426513.stackDecisionsWithAlternatives({\"first\":2})","typename":"StackDecisionConnection"}},"Reason:101978469483414915":{"id":"101978469483414915","upvoted":false,"upvotesCount":16,"text":"Real pipelines","__typename":"Reason"},"$Tool:101231775827426513.pros.edges.0":{"node":{"type":"id","generated":false,"id":"Reason:101978469483414915","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469588182826":{"id":"101978469588182826","upvoted":false,"upvotesCount":10,"text":"Containerised builds","__typename":"Reason"},"$Tool:101231775827426513.pros.edges.1":{"node":{"type":"id","generated":false,"id":"Reason:101978469588182826","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469329597166":{"id":"101978469329597166","upvoted":false,"upvotesCount":9,"text":"Flexible engine","__typename":"Reason"},"$Tool:101231775827426513.pros.edges.2":{"node":{"type":"id","generated":false,"id":"Reason:101978469329597166","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469587993665":{"id":"101978469587993665","upvoted":false,"upvotesCount":6,"text":"Fast","__typename":"Reason"},"$Tool:101231775827426513.pros.edges.3":{"node":{"type":"id","generated":false,"id":"Reason:101978469587993665","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469969149137":{"id":"101978469969149137","upvoted":false,"upvotesCount":4,"text":"Open source","__typename":"Reason"},"$Tool:101231775827426513.pros.edges.4":{"node":{"type":"id","generated":false,"id":"Reason:101978469969149137","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469711391780":{"id":"101978469711391780","upvoted":false,"upvotesCount":3,"text":"No Snowflakes","__typename":"Reason"},"$Tool:101231775827426513.pros.edges.5":{"node":{"type":"id","generated":false,"id":"Reason:101978469711391780","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469587807829":{"id":"101978469587807829","upvoted":false,"upvotesCount":3,"text":"Simple configuration management","__typename":"Reason"},"$Tool:101231775827426513.pros.edges.6":{"node":{"type":"id","generated":false,"id":"Reason:101978469587807829","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469861915206":{"id":"101978469861915206","upvoted":false,"upvotesCount":2,"text":"You have to do everything","__typename":"Reason"},"$Tool:101231775827426513.pros.edges.7":{"node":{"type":"id","generated":false,"id":"Reason:101978469861915206","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978470030977204":{"id":"101978470030977204","upvoted":false,"upvotesCount":1,"text":"Fancy Visualization","__typename":"Reason"},"$Tool:101231775827426513.pros.edges.8":{"node":{"type":"id","generated":false,"id":"Reason:101978470030977204","typename":"Reason"},"__typename":"ReasonEdge"},"$Tool:101231775827426513.pros":{"edges":[{"type":"id","generated":true,"id":"$Tool:101231775827426513.pros.edges.0","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775827426513.pros.edges.1","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775827426513.pros.edges.2","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775827426513.pros.edges.3","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775827426513.pros.edges.4","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775827426513.pros.edges.5","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775827426513.pros.edges.6","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775827426513.pros.edges.7","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231775827426513.pros.edges.8","typename":"ReasonEdge"}],"__typename":"ReasonConnection"},"Reason:101978470024810426":{"id":"101978470024810426","upvoted":false,"upvotesCount":2,"text":"Fail forward instead of rollback pattern","__typename":"Reason"},"$Tool:101231775827426513.cons.edges.0":{"node":{"type":"id","generated":false,"id":"Reason:101978470024810426","typename":"Reason"},"__typename":"ReasonEdge"},"$Tool:101231775827426513.cons":{"edges":[{"type":"id","generated":true,"id":"$Tool:101231775827426513.cons.edges.0","typename":"ReasonEdge"}],"__typename":"ReasonConnection"},"User:101232017882725317":{"id":"101232017882725317","username":"davojan","title":null,"companyName":null,"imageUrl":"https://img.stackshare.io/user/57330/default_091c8dc6dcc40a69c218cbd95c2c5e2f2a4ff583.jpeg","thumbUrl":"https://img.stackshare.io/user/57330/thumb_091c8dc6dcc40a69c218cbd95c2c5e2f2a4ff583.jpeg","displayName":"David Galoyan","__typename":"User"},"StackDecision:101345638832633197":{"user":{"type":"id","generated":false,"id":"User:101232017882725317","typename":"User"},"company":{"type":"id","generated":true,"id":"$StackDecision:101345638832633197.company","typename":"Company"},"link":null,"publicId":"101345638832633197","publishedAt":"2019-01-02T06:48:44Z","id":"101345638832633197","htmlContent":"

We use Docker for our #DeploymentWorkflow along with Concourse for build pipelines and Ansible for deployment together with Vault to manage secrets.","viewCount":95593,"upvotesCount":4,"services":[{"type":"id","generated":false,"id":"Tool:101231773669807419","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231775827426513","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773700412232","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774655920535","typename":"Tool"}],"topics":[{"type":"id","generated":false,"id":"Topic:101270286199724100","typename":"Topic"}],"__typename":"StackDecision"},"$StackDecision:101345638832633197.company":{"imageUrl":"https://img.stackshare.io/company/24148/default_b720f2b71a9f8cb167ba148dd7cfeb30427e6e11.png","thumbUrl":"https://img.stackshare.io/company/24148/thumb_b720f2b71a9f8cb167ba148dd7cfeb30427e6e11.png","name":"Procraft","path":"/companies/procraft","features":[],"__typename":"Company"},"Topic:101270286199724100":{"name":"DeploymentWorkflow","id":"101270286199724100","__typename":"Topic"},"$Tool:101231775827426513.stackDecisionsWithAlternatives({\"first\":2}).edges.0":{"node":{"type":"id","generated":false,"id":"StackDecision:101345638832633197","typename":"StackDecision"},"__typename":"StackDecisionEdge"},"User:108136436338003397":{"id":"108136436338003397","username":"tamalampudivijayakumar","title":"","companyName":"","imageUrl":"https://img.stackshare.io/user/1198634/default_a0827a72b52148e25e12495b56916c8cdc9369b9.png","thumbUrl":"https://img.stackshare.io/user/1198634/thumb_a0827a72b52148e25e12495b56916c8cdc9369b9.png","displayName":"Vijay Kumar Reddy Tamalampudi","__typename":"User"},"StackDecision:108136481495041408":{"user":{"type":"id","generated":false,"id":"User:108136436338003397","typename":"User"},"company":null,"link":null,"publicId":"108136481495041408","publishedAt":"2022-04-15T14:09:20Z","id":"108136481495041408","htmlContent":"

I wanna develop a video processing pipeline for an open source organization the pipeline consists of fixing video meta-data, transcoding, uploading to CDN, and uploading to YouTube. What do you guys think is a better way to do this, Kubernetes or Concourse? ","viewCount":6742,"upvotesCount":4,"services":[{"type":"id","generated":false,"id":"Tool:101231775827426513","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774206661614","typename":"Tool"}],"topics":[],"__typename":"StackDecision"},"Tool:101231774206661614":{"id":"101231774206661614","name":"Kubernetes","slug":"kubernetes","title":"Manage a cluster of Linux containers as a single system to accelerate Dev and simplify Ops","verified":false,"imageUrl":"https://img.stackshare.io/service/1885/21_d3cvM.png","canonicalUrl":"/kubernetes","path":"/kubernetes","votes":681,"fans":60289,"stacks":59894,"following":false,"followContext":null,"__typename":"Tool"},"$Tool:101231775827426513.stackDecisionsWithAlternatives({\"first\":2}).edges.1":{"node":{"type":"id","generated":false,"id":"StackDecision:108136481495041408","typename":"StackDecision"},"__typename":"StackDecisionEdge"},"$Tool:101231775827426513.stackDecisionsWithAlternatives({\"first\":2})":{"edges":[{"type":"id","generated":true,"id":"$Tool:101231775827426513.stackDecisionsWithAlternatives({\"first\":2}).edges.0","typename":"StackDecisionEdge"},{"type":"id","generated":true,"id":"$Tool:101231775827426513.stackDecisionsWithAlternatives({\"first\":2}).edges.1","typename":"StackDecisionEdge"}],"__typename":"StackDecisionConnection"},"$Tool:101231773501041914.alternativeTools({\"first\":8}).edges.4":{"node":{"type":"id","generated":false,"id":"Tool:101231775827426513","typename":"Tool"},"__typename":"ToolEdge"},"Tool:101231773472115839":{"id":"101231773472115839","path":"/cloudbees","slug":"cloudbees","title":"Enterprise Jenkins and DevOps","votes":6,"followingTool":false,"followersCount":164,"stacks":95,"githubForksCount":null,"imageUrl":"https://img.stackshare.io/service/136/o-p1F0I9_400x400.jpg","thumbRetinaUrl":"https://img.stackshare.io/service/136/thumb_retina_o-p1F0I9_400x400.jpg","name":"CloudBees","description":"Enables organizations to build, test and deploy applications to production, utilizing continuous delivery practices. They are focused solely on Jenkins as a tool for continuous delivery both on-premises and in the cloud. ","contactEnabled":false,"contactButtonText":null,"contactButtonSponsorId":null,"contactFlow":{"type":"json","json":{}},"pros":{"type":"id","generated":true,"id":"$Tool:101231773472115839.pros","typename":"ReasonConnection"},"cons":{"type":"id","generated":true,"id":"$Tool:101231773472115839.cons","typename":"ReasonConnection"},"stackDecisionsWithAlternatives({\"first\":2})":{"type":"id","generated":true,"id":"$Tool:101231773472115839.stackDecisionsWithAlternatives({\"first\":2})","typename":"StackDecisionConnection"},"__typename":"Tool"},"Reason:101978468095086554":{"id":"101978468095086554","upvoted":false,"upvotesCount":6,"text":"Jenkins ","__typename":"Reason"},"$Tool:101231773472115839.pros.edges.0":{"node":{"type":"id","generated":false,"id":"Reason:101978468095086554","typename":"Reason"},"__typename":"ReasonEdge"},"$Tool:101231773472115839.pros":{"edges":[{"type":"id","generated":true,"id":"$Tool:101231773472115839.pros.edges.0","typename":"ReasonEdge"}],"__typename":"ReasonConnection"},"$Tool:101231773472115839.cons":{"edges":[],"__typename":"ReasonConnection"},"$Tool:101231773472115839.stackDecisionsWithAlternatives({\"first\":2})":{"edges":[],"__typename":"StackDecisionConnection"},"$Tool:101231773501041914.alternativeTools({\"first\":8}).edges.5":{"node":{"type":"id","generated":false,"id":"Tool:101231773472115839","typename":"Tool"},"__typename":"ToolEdge"},"Tool:101231774142825916":{"id":"101231774142825916","path":"/bamboo","slug":"bamboo","title":"Tie automated builds, tests, and releases together in a single workflow","votes":17,"followingTool":false,"followersCount":549,"stacks":509,"githubForksCount":null,"imageUrl":"https://img.stackshare.io/service/1729/bamboo.png","thumbRetinaUrl":"https://img.stackshare.io/service/1729/thumb_retina_bamboo.png","name":"Bamboo","description":"Focus on coding and count on Bamboo as your CI and build server! Create multi-stage build plans, set up triggers to start builds upon commits, and assign agents to your critical builds and deployments.","contactEnabled":false,"contactButtonText":"Integrate with Lighstep","contactButtonSponsorId":null,"contactFlow":{"type":"json","json":{"links":[{"url":"https://www.airapp.lightstep.com/signup?utm_source=stackshare&utm_medium=display&utm_campaign=air_acq_prospects_stackshare&utm_term=CTA_placement","type":"website"}],"steps":["direct_link"]}},"pros":{"type":"id","generated":true,"id":"$Tool:101231774142825916.pros","typename":"ReasonConnection"},"cons":{"type":"id","generated":true,"id":"$Tool:101231774142825916.cons","typename":"ReasonConnection"},"verified":true,"canonicalUrl":"/bamboo","fans":701,"following":false,"followContext":null,"__typename":"Tool","stackDecisionsWithAlternatives({\"first\":2})":{"type":"id","generated":true,"id":"$Tool:101231774142825916.stackDecisionsWithAlternatives({\"first\":2})","typename":"StackDecisionConnection"}},"Reason:101978469591983479":{"id":"101978469591983479","upvoted":false,"upvotesCount":10,"text":"Integrates with other Atlassian tools","__typename":"Reason"},"$Tool:101231774142825916.pros.edges.0":{"node":{"type":"id","generated":false,"id":"Reason:101978469591983479","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469592374848":{"id":"101978469592374848","upvoted":false,"upvotesCount":4,"text":"Great notification scheme","__typename":"Reason"},"$Tool:101231774142825916.pros.edges.1":{"node":{"type":"id","generated":false,"id":"Reason:101978469592374848","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978470218183703":{"id":"101978470218183703","upvoted":false,"upvotesCount":2,"text":"Great UI","__typename":"Reason"},"$Tool:101231774142825916.pros.edges.2":{"node":{"type":"id","generated":false,"id":"Reason:101978470218183703","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:105688089883454729":{"id":"105688089883454729","upvoted":false,"upvotesCount":1,"text":"Has Deployment Projects","__typename":"Reason"},"$Tool:101231774142825916.pros.edges.3":{"node":{"type":"id","generated":false,"id":"Reason:105688089883454729","typename":"Reason"},"__typename":"ReasonEdge"},"$Tool:101231774142825916.pros":{"edges":[{"type":"id","generated":true,"id":"$Tool:101231774142825916.pros.edges.0","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231774142825916.pros.edges.1","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231774142825916.pros.edges.2","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231774142825916.pros.edges.3","typename":"ReasonEdge"}],"__typename":"ReasonConnection"},"Reason:102566548812493636":{"id":"102566548812493636","upvoted":false,"upvotesCount":6,"text":"Expensive","__typename":"Reason"},"$Tool:101231774142825916.cons.edges.0":{"node":{"type":"id","generated":false,"id":"Reason:102566548812493636","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:109088683163174728":{"id":"109088683163174728","upvoted":false,"upvotesCount":1,"text":"Low community support","__typename":"Reason"},"$Tool:101231774142825916.cons.edges.1":{"node":{"type":"id","generated":false,"id":"Reason:109088683163174728","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:109088680880857642":{"id":"109088680880857642","upvoted":false,"upvotesCount":1,"text":"Bad UI","__typename":"Reason"},"$Tool:101231774142825916.cons.edges.2":{"node":{"type":"id","generated":false,"id":"Reason:109088680880857642","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:109088678286272403":{"id":"109088678286272403","upvoted":false,"upvotesCount":1,"text":"Bad integration with docker","__typename":"Reason"},"$Tool:101231774142825916.cons.edges.3":{"node":{"type":"id","generated":false,"id":"Reason:109088678286272403","typename":"Reason"},"__typename":"ReasonEdge"},"$Tool:101231774142825916.cons":{"edges":[{"type":"id","generated":true,"id":"$Tool:101231774142825916.cons.edges.0","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231774142825916.cons.edges.1","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231774142825916.cons.edges.2","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231774142825916.cons.edges.3","typename":"ReasonEdge"}],"__typename":"ReasonConnection"},"User:105513026502130228":{"id":"105513026502130228","username":"xiezhifeng","title":"cto","companyName":"csdn","imageUrl":"https://img.stackshare.io/user/841157/default_bda91f710833aefad256e7bfb4d19e7f6414621e.png","thumbUrl":"https://img.stackshare.io/user/841157/thumb_bda91f710833aefad256e7bfb4d19e7f6414621e.png","displayName":"xie zhifeng","__typename":"User"},"StackDecision:106209327616626180":{"user":{"type":"id","generated":false,"id":"User:105513026502130228","typename":"User"},"company":{"type":"id","generated":true,"id":"$StackDecision:106209327616626180.company","typename":"Company"},"link":{"type":"id","generated":true,"id":"$StackDecision:106209327616626180.link","typename":"Link"},"publicId":"106209327616626180","publishedAt":"2021-05-10T05:48:46Z","id":"106209327616626180","htmlContent":"

I am choosing a DevOps toolset for my team. GitLab is open source and quite cloud-native. Jenkins has a very popular environment system but old-style technicals. Bamboo is very nice but integrated only with Atlassian products.","viewCount":62700,"upvotesCount":2,"services":[{"type":"id","generated":false,"id":"Tool:101231774142825916","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773703650742","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773791035497","typename":"Tool"}],"topics":[],"__typename":"StackDecision"},"$StackDecision:106209327616626180.company":{"imageUrl":"https://img.stackshare.io/company/159211/default_be8efcf2d62c3fca1069c918d247458586cf14f3.jpg","thumbUrl":"https://img.stackshare.io/company/159211/thumb_be8efcf2d62c3fca1069c918d247458586cf14f3.jpg","name":"ByteArk","path":"/companies/byteark-cdn","features":[],"__typename":"Company"},"$StackDecision:106209327616626180.link":{"url":"http://blog.csdn.net","title":"CSDN博客 - 专业IT技术发表平台","__typename":"Link"},"Tool:101231773791035497":{"id":"101231773791035497","name":"GitLab","slug":"gitlab","title":"Open source self-hosted Git management software","verified":true,"imageUrl":"https://img.stackshare.io/service/880/lmalkclL.png","canonicalUrl":"/gitlab","path":"/gitlab","votes":2481,"fans":62066,"stacks":61893,"following":false,"followContext":null,"__typename":"Tool"},"$Tool:101231774142825916.stackDecisionsWithAlternatives({\"first\":2}).edges.0":{"node":{"type":"id","generated":false,"id":"StackDecision:106209327616626180","typename":"StackDecision"},"__typename":"StackDecisionEdge"},"User:108752164565554433":{"id":"108752164565554433","username":"liberatingtruthseeker","title":"","companyName":"","imageUrl":"https://img.stackshare.io/user/1319965/default_fabb6cf03b562b520fbdecc8494cd56ec58493cc.png","thumbUrl":"https://img.stackshare.io/user/1319965/thumb_fabb6cf03b562b520fbdecc8494cd56ec58493cc.png","displayName":"liberating truthSeeking","__typename":"User"},"StackDecision:108752176366370240":{"user":{"type":"id","generated":false,"id":"User:108752164565554433","typename":"User"},"company":null,"link":null,"publicId":"108752176366370240","publishedAt":"2022-08-02T07:48:39Z","id":"108752176366370240","htmlContent":"

Need for CI/CD as part of data testing team. \n\n

Please suggest.\n\n

Currently, Bamboo is most commonly used in the company while GitLab is rated highly by the internal team. ","viewCount":7133,"upvotesCount":2,"services":[{"type":"id","generated":false,"id":"Tool:101231773791035497","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774142825916","typename":"Tool"}],"topics":[],"__typename":"StackDecision"},"$Tool:101231774142825916.stackDecisionsWithAlternatives({\"first\":2}).edges.1":{"node":{"type":"id","generated":false,"id":"StackDecision:108752176366370240","typename":"StackDecision"},"__typename":"StackDecisionEdge"},"$Tool:101231774142825916.stackDecisionsWithAlternatives({\"first\":2})":{"edges":[{"type":"id","generated":true,"id":"$Tool:101231774142825916.stackDecisionsWithAlternatives({\"first\":2}).edges.0","typename":"StackDecisionEdge"},{"type":"id","generated":true,"id":"$Tool:101231774142825916.stackDecisionsWithAlternatives({\"first\":2}).edges.1","typename":"StackDecisionEdge"}],"__typename":"StackDecisionConnection"},"$Tool:101231773501041914.alternativeTools({\"first\":8}).edges.6":{"node":{"type":"id","generated":false,"id":"Tool:101231774142825916","typename":"Tool"},"__typename":"ToolEdge"},"Tool:101231776475458733":{"id":"101231776475458733","path":"/aws-codebuild","slug":"aws-codebuild","title":"Build and test code with continuous scaling","votes":43,"followingTool":false,"followersCount":484,"stacks":376,"githubForksCount":null,"imageUrl":"https://img.stackshare.io/service/6086/aws-codebuild.png","thumbRetinaUrl":"https://img.stackshare.io/service/6086/thumb_retina_aws-codebuild.png","name":"AWS CodeBuild","description":"AWS CodeBuild is a fully managed build service that compiles source code, runs tests, and produces software packages that are ready to deploy. With CodeBuild, you don’t need to provision, manage, and scale your own build servers.","contactEnabled":false,"contactButtonText":null,"contactButtonSponsorId":null,"contactFlow":{"type":"json","json":{}},"pros":{"type":"id","generated":true,"id":"$Tool:101231776475458733.pros","typename":"ReasonConnection"},"cons":{"type":"id","generated":true,"id":"$Tool:101231776475458733.cons","typename":"ReasonConnection"},"verified":true,"canonicalUrl":"/aws-codebuild","fans":615,"following":false,"followContext":null,"__typename":"Tool","stackDecisionsWithAlternatives({\"first\":2})":{"type":"id","generated":true,"id":"$Tool:101231776475458733.stackDecisionsWithAlternatives({\"first\":2})","typename":"StackDecisionConnection"}},"Reason:101978469709163448":{"id":"101978469709163448","upvoted":false,"upvotesCount":7,"text":"Pay per minute","__typename":"Reason"},"$Tool:101231776475458733.pros.edges.0":{"node":{"type":"id","generated":false,"id":"Reason:101978469709163448","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469939471995":{"id":"101978469939471995","upvoted":false,"upvotesCount":5,"text":"Parameter Store integration for passing secrets","__typename":"Reason"},"$Tool:101231776475458733.pros.edges.1":{"node":{"type":"id","generated":false,"id":"Reason:101978469939471995","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469736268887":{"id":"101978469736268887","upvoted":false,"upvotesCount":4,"text":"Integrated with AWS","__typename":"Reason"},"$Tool:101231776475458733.pros.edges.2":{"node":{"type":"id","generated":false,"id":"Reason:101978469736268887","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469939560706":{"id":"101978469939560706","upvoted":false,"upvotesCount":3,"text":"Streaming logs to Amazon CloudWatch","__typename":"Reason"},"$Tool:101231776475458733.pros.edges.3":{"node":{"type":"id","generated":false,"id":"Reason:101978469939560706","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469709017338":{"id":"101978469709017338","upvoted":false,"upvotesCount":3,"text":"Bit bucket integration","__typename":"Reason"},"$Tool:101231776475458733.pros.edges.4":{"node":{"type":"id","generated":false,"id":"Reason:101978469709017338","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469798708058":{"id":"101978469798708058","upvoted":false,"upvotesCount":2,"text":"GitHub Webhooks support","__typename":"Reason"},"$Tool:101231776475458733.pros.edges.5":{"node":{"type":"id","generated":false,"id":"Reason:101978469798708058","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469939896456":{"id":"101978469939896456","upvoted":false,"upvotesCount":2,"text":"AWS Config and Config rule integration for compliance","__typename":"Reason"},"$Tool:101231776475458733.pros.edges.6":{"node":{"type":"id","generated":false,"id":"Reason:101978469939896456","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469940158778":{"id":"101978469940158778","upvoted":false,"upvotesCount":2,"text":"VPC PrivateLinks to invoke service without internet","__typename":"Reason"},"$Tool:101231776475458733.pros.edges.7":{"node":{"type":"id","generated":false,"id":"Reason:101978469940158778","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469939111555":{"id":"101978469939111555","upvoted":false,"upvotesCount":1,"text":"Windows/.NET support","__typename":"Reason"},"$Tool:101231776475458733.pros.edges.8":{"node":{"type":"id","generated":false,"id":"Reason:101978469939111555","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469939255773":{"id":"101978469939255773","upvoted":false,"upvotesCount":1,"text":"Jenkins plugin integration","__typename":"Reason"},"$Tool:101231776475458733.pros.edges.9":{"node":{"type":"id","generated":false,"id":"Reason:101978469939255773","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469939404419":{"id":"101978469939404419","upvoted":false,"upvotesCount":1,"text":"Ondemand scaling of build jobs","__typename":"Reason"},"$Tool:101231776475458733.pros.edges.10":{"node":{"type":"id","generated":false,"id":"Reason:101978469939404419","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469939728669":{"id":"101978469939728669","upvoted":false,"upvotesCount":1,"text":"Scheduled builds with CloudWatch Events integration","__typename":"Reason"},"$Tool:101231776475458733.pros.edges.11":{"node":{"type":"id","generated":false,"id":"Reason:101978469939728669","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469939792714":{"id":"101978469939792714","upvoted":false,"upvotesCount":1,"text":"Local build debug support","__typename":"Reason"},"$Tool:101231776475458733.pros.edges.12":{"node":{"type":"id","generated":false,"id":"Reason:101978469939792714","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469940051698":{"id":"101978469940051698","upvoted":false,"upvotesCount":1,"text":"Native support for accessing Amazon VPC resources","__typename":"Reason"},"$Tool:101231776475458733.pros.edges.13":{"node":{"type":"id","generated":false,"id":"Reason:101978469940051698","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469940317539":{"id":"101978469940317539","upvoted":false,"upvotesCount":1,"text":"Docker based build environment","__typename":"Reason"},"$Tool:101231776475458733.pros.edges.14":{"node":{"type":"id","generated":false,"id":"Reason:101978469940317539","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469940407599":{"id":"101978469940407599","upvoted":false,"upvotesCount":1,"text":"Support for bringing custom Docker images","__typename":"Reason"},"$Tool:101231776475458733.pros.edges.15":{"node":{"type":"id","generated":false,"id":"Reason:101978469940407599","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469940768092":{"id":"101978469940768092","upvoted":false,"upvotesCount":1,"text":"Fully managed (no installation/updates, servers to mai","__typename":"Reason"},"$Tool:101231776475458733.pros.edges.16":{"node":{"type":"id","generated":false,"id":"Reason:101978469940768092","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469940838618":{"id":"101978469940838618","upvoted":false,"upvotesCount":1,"text":"PCI, SOC, ISO, HIPAA compliant","__typename":"Reason"},"$Tool:101231776475458733.pros.edges.17":{"node":{"type":"id","generated":false,"id":"Reason:101978469940838618","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469940963201":{"id":"101978469940963201","upvoted":false,"upvotesCount":1,"text":"Full API/SDKs/CLI support","__typename":"Reason"},"$Tool:101231776475458733.pros.edges.18":{"node":{"type":"id","generated":false,"id":"Reason:101978469940963201","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469941107284":{"id":"101978469941107284","upvoted":false,"upvotesCount":1,"text":"YAML based configuration","__typename":"Reason"},"$Tool:101231776475458733.pros.edges.19":{"node":{"type":"id","generated":false,"id":"Reason:101978469941107284","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469941229041":{"id":"101978469941229041","upvoted":false,"upvotesCount":1,"text":"Great support (forums, premium support, SO, GitHub)","__typename":"Reason"},"$Tool:101231776475458733.pros.edges.20":{"node":{"type":"id","generated":false,"id":"Reason:101978469941229041","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469941609335":{"id":"101978469941609335","upvoted":false,"upvotesCount":1,"text":"Perpetual free tier option (100 mins/month)","__typename":"Reason"},"$Tool:101231776475458733.pros.edges.21":{"node":{"type":"id","generated":false,"id":"Reason:101978469941609335","typename":"Reason"},"__typename":"ReasonEdge"},"Reason:101978469938991886":{"id":"101978469938991886","upvoted":false,"upvotesCount":1,"text":"GitHub Enterprise support","__typename":"Reason"},"$Tool:101231776475458733.pros.edges.22":{"node":{"type":"id","generated":false,"id":"Reason:101978469938991886","typename":"Reason"},"__typename":"ReasonEdge"},"$Tool:101231776475458733.pros":{"edges":[{"type":"id","generated":true,"id":"$Tool:101231776475458733.pros.edges.0","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231776475458733.pros.edges.1","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231776475458733.pros.edges.2","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231776475458733.pros.edges.3","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231776475458733.pros.edges.4","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231776475458733.pros.edges.5","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231776475458733.pros.edges.6","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231776475458733.pros.edges.7","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231776475458733.pros.edges.8","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231776475458733.pros.edges.9","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231776475458733.pros.edges.10","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231776475458733.pros.edges.11","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231776475458733.pros.edges.12","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231776475458733.pros.edges.13","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231776475458733.pros.edges.14","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231776475458733.pros.edges.15","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231776475458733.pros.edges.16","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231776475458733.pros.edges.17","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231776475458733.pros.edges.18","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231776475458733.pros.edges.19","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231776475458733.pros.edges.20","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231776475458733.pros.edges.21","typename":"ReasonEdge"},{"type":"id","generated":true,"id":"$Tool:101231776475458733.pros.edges.22","typename":"ReasonEdge"}],"__typename":"ReasonConnection"},"Reason:107337514163271050":{"id":"107337514163271050","upvoted":false,"upvotesCount":2,"text":"Poor branch support","__typename":"Reason"},"$Tool:101231776475458733.cons.edges.0":{"node":{"type":"id","generated":false,"id":"Reason:107337514163271050","typename":"Reason"},"__typename":"ReasonEdge"},"$Tool:101231776475458733.cons":{"edges":[{"type":"id","generated":true,"id":"$Tool:101231776475458733.cons.edges.0","typename":"ReasonEdge"}],"__typename":"ReasonConnection"},"User:101232024744948742":{"id":"101232024744948742","username":"cristoirmac","title":"VP, Engineering","companyName":"SparkPost","imageUrl":"https://img.stackshare.io/user/72092/default_904fd54f20bb73d750591a857f887d2e538d4f34.png","thumbUrl":"https://img.stackshare.io/user/72092/thumb_904fd54f20bb73d750591a857f887d2e538d4f34.png","displayName":"Chris McFadden","__typename":"User"},"StackDecision:101863481152084592":{"user":{"type":"id","generated":false,"id":"User:101232024744948742","typename":"User"},"company":{"type":"id","generated":true,"id":"$StackDecision:101863481152084592.company","typename":"Company"},"link":null,"publicId":"101863481152084592","publishedAt":"2019-04-03T17:42:00Z","id":"101863481152084592","htmlContent":"

The recent move of our CI/CD tooling to AWS CodeBuild / AWS CodeDeploy (with GitHub ) as well as moving to Amazon EC2 Container Service / AWS Lambda for our deployment architecture for most of our services has helped us significantly reduce our deployment times while improving both feature velocity and overall reliability. In one extreme case, we got one service down from 90 minutes to a very reasonable 15 minutes. Container-based build and deployments have made so many things simpler and easier and the integration between the tools has been helpful. There is still some work to do on our service mesh & API proxy approach to further simplify our environment.","viewCount":158667,"upvotesCount":9,"services":[{"type":"id","generated":false,"id":"Tool:101231776475458733","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774208362023","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774215500019","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774215979427","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773410696721","typename":"Tool"}],"topics":[],"__typename":"StackDecision"},"$StackDecision:101863481152084592.company":{"imageUrl":"https://img.stackshare.io/company/15421/default_97f16b7151b42225ad62fd13ceb0778409e25014.png","thumbUrl":"https://img.stackshare.io/company/15421/thumb_97f16b7151b42225ad62fd13ceb0778409e25014.png","name":"SparkPost","path":"/companies/sparkpost","features":[],"__typename":"Company"},"Tool:101231774208362023":{"id":"101231774208362023","name":"AWS CodeDeploy","slug":"aws-codedeploy","title":"Coordinate application deployments to Amazon EC2 instances","verified":false,"imageUrl":"https://img.stackshare.io/service/1888/aws-codedeploy.png","canonicalUrl":"/aws-codedeploy","path":"/aws-codedeploy","votes":38,"fans":753,"stacks":394,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231774215500019":{"id":"101231774215500019","name":"Amazon EC2 Container Service","slug":"amazon-ec2-container-service","title":"Container management service that supports Docker containers","verified":true,"imageUrl":"https://img.stackshare.io/service/1908/amazon-ecs.png","canonicalUrl":"/amazon-ec2-container-service","path":"/amazon-ec2-container-service","votes":325,"fans":12924,"stacks":14165,"following":false,"followContext":null,"__typename":"Tool"},"$Tool:101231776475458733.stackDecisionsWithAlternatives({\"first\":2}).edges.0":{"node":{"type":"id","generated":false,"id":"StackDecision:101863481152084592","typename":"StackDecision"},"__typename":"StackDecisionEdge"},"User:105383069168807331":{"id":"105383069168807331","username":"kavitasingh1205","title":"","companyName":"","imageUrl":"https://img.stackshare.io/user/823087/default_152bce9458774fca7828f051a578683bf38b39ca.jpg","thumbUrl":"https://img.stackshare.io/user/823087/thumb_152bce9458774fca7828f051a578683bf38b39ca.jpg","displayName":"Kavita Singh","__typename":"User"},"StackDecision:105383105073476632":{"user":{"type":"id","generated":false,"id":"User:105383069168807331","typename":"User"},"company":null,"link":null,"publicId":"105383105073476632","publishedAt":"2020-12-15T07:49:31Z","id":"105383105073476632","htmlContent":"

Hi, \nI need advice. In my project, we are using Bitbucket hosted on-prem, Jenkins, and Jira. Also, we have restrictions not to use any plugins for code review, code quality, code security, etc., with bitbucket. Now we want to migrate to AWS CodeCommit, which would mean that we can use, let's say, Amazon CodeGuru for code reviews and move to AWS CodeBuild and AWS CodePipeline for build automation in the future rather than using Jenkins.\n\n

Now I want advice on below.\n\n

    \n
  1. Is it a good idea to migrate from Bitbucket to AWS Codecommit?\n
  2. If we want to integrate Jira with AWS Codecommit, then how can we do this? If a developer makes any changes in Jira, then a build should be triggered automatically in AWS and create a Jira ticket if the build fails. So, how can we achieve this? \n","viewCount":549718,"upvotesCount":3,"services":[{"type":"id","generated":false,"id":"Tool:101231774879071742","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231776475458733","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:103278486243281143","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231774879570326","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773482334926","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773703650742","typename":"Tool"},{"type":"id","generated":false,"id":"Tool:101231773411223883","typename":"Tool"}],"topics":[],"__typename":"StackDecision"},"Tool:101231774879071742":{"id":"101231774879071742","name":"AWS CodePipeline","slug":"aws-codepipeline","title":"Continuous delivery service for fast and reliable application updates","verified":true,"imageUrl":"https://img.stackshare.io/service/3297/aws-codepipeline.png","canonicalUrl":"/aws-codepipeline","path":"/aws-codepipeline","votes":30,"fans":1103,"stacks":542,"following":false,"followContext":null,"__typename":"Tool"},"Tool:103278486243281143":{"id":"103278486243281143","name":"Amazon CodeGuru","slug":"amazon-codeguru","title":"Automate code reviews, Identify your most expensive lines of code","verified":false,"imageUrl":"https://img.stackshare.io/service/11572/default_0d0095c4b3aee4d3a8dc98e2d079c64003bb3940.png","canonicalUrl":"/amazon-codeguru","path":"/amazon-codeguru","votes":24,"fans":185,"stacks":69,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231774879570326":{"id":"101231774879570326","name":"AWS CodeCommit","slug":"aws-codecommit","title":"Fully-managed source control service that makes it easy for companies to host secure and highly scalable private Git repositories","verified":true,"imageUrl":"https://img.stackshare.io/service/3298/aws-codecommit.png","canonicalUrl":"/aws-codecommit","path":"/aws-codecommit","votes":193,"fans":1004,"stacks":329,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231773482334926":{"id":"101231773482334926","name":"Jira","slug":"jira","title":"The #1 software development tool used by agile teams to plan, track, and release great software.","verified":true,"imageUrl":"https://img.stackshare.io/service/154/default_53605d3093005bd7853e04a258c0d4746e803e29.jpg","canonicalUrl":"/jira","path":"/jira","votes":1183,"fans":58023,"stacks":61542,"following":false,"followContext":null,"__typename":"Tool"},"Tool:101231773411223883":{"id":"101231773411223883","name":"Bitbucket","slug":"bitbucket","title":"One place to plan projects, collaborate on code, test and deploy, all with free private repositories","verified":true,"imageUrl":"https://img.stackshare.io/service/28/35O2KIRX_400x400.jpg","canonicalUrl":"/bitbucket","path":"/bitbucket","votes":2848,"fans":39763,"stacks":40523,"following":false,"followContext":null,"__typename":"Tool"},"$Tool:101231776475458733.stackDecisionsWithAlternatives({\"first\":2}).edges.1":{"node":{"type":"id","generated":false,"id":"StackDecision:105383105073476632","typename":"StackDecision"},"__typename":"StackDecisionEdge"},"$Tool:101231776475458733.stackDecisionsWithAlternatives({\"first\":2})":{"edges":[{"type":"id","generated":true,"id":"$Tool:101231776475458733.stackDecisionsWithAlternatives({\"first\":2}).edges.0","typename":"StackDecisionEdge"},{"type":"id","generated":true,"id":"$Tool:101231776475458733.stackDecisionsWithAlternatives({\"first\":2}).edges.1","typename":"StackDecisionEdge"}],"__typename":"StackDecisionConnection"},"$Tool:101231773501041914.alternativeTools({\"first\":8}).edges.7":{"node":{"type":"id","generated":false,"id":"Tool:101231776475458733","typename":"Tool"},"__typename":"ToolEdge"}}
    Alternatives to CircleCI logo

    Alternatives to CircleCI

    Jenkins, Travis CI, Codeship, Azure DevOps, and Concourse are the most popular alternatives and competitors to CircleCI.
    12.8K
    7.1K
    + 1
    974

    What is CircleCI and what are its top alternatives?

    Continuous integration and delivery platform helps software teams rapidly release code with confidence by automating the build, test, and deploy process. Offers a modern software development platform that lets teams ramp.
    CircleCI is a tool in the Continuous Integration category of a tech stack.

    Top Alternatives to CircleCI

    • Jenkins
      Jenkins

      In a nutshell Jenkins CI is the leading open-source continuous integration server. Built with Java, it provides over 300 plugins to support building and testing virtually any project. ...

    • Travis CI
      Travis CI

      Free for open source projects, our CI environment provides multiple runtimes (e.g. Node.js or PHP versions), data stores and so on. Because of this, hosting your project on travis-ci.com means you can effortlessly test your library or applications against multiple runtimes and data stores without even having all of them installed locally. ...

    • Codeship
      Codeship

      Codeship runs your automated tests and configured deployment when you push to your repository. It takes care of managing and scaling the infrastructure so that you are able to test and release more frequently and get faster feedback for building the product your users need. ...

    • Azure DevOps
      Azure DevOps

      Azure DevOps provides unlimited private Git hosting, cloud build for continuous integration, agile planning, and release management for continuous delivery to the cloud and on-premises. Includes broad IDE support. ...

    • Concourse
      Concourse

      Concourse's principles reduce the risk of switching to and from Concourse, by encouraging practices that decouple your project from your CI's little details, and keeping all configuration in declarative files that can be checked into version control. ...

    • CloudBees
      CloudBees

      Enables organizations to build, test and deploy applications to production, utilizing continuous delivery practices. They are focused solely on Jenkins as a tool for continuous delivery both on-premises and in the cloud. ...

    • Bamboo
      Bamboo

      Focus on coding and count on Bamboo as your CI and build server! Create multi-stage build plans, set up triggers to start builds upon commits, and assign agents to your critical builds and deployments. ...

    • AWS CodeBuild
      AWS CodeBuild

      AWS CodeBuild is a fully managed build service that compiles source code, runs tests, and produces software packages that are ready to deploy. With CodeBuild, you don’t need to provision, manage, and scale your own build servers. ...

    CircleCI alternatives & related posts

    Jenkins logo

    Jenkins

    58.4K
    2.2K
    An extendable open source continuous integration server
    58.4K
    2.2K
    PROS OF JENKINS
    • 523
      Hosted internally
    • 469
      Free open source
    • 318
      Great to build, deploy or launch anything async
    • 243
      Tons of integrations
    • 211
      Rich set of plugins with good documentation
    • 111
      Has support for build pipelines
    • 68
      Easy setup
    • 66
      It is open-source
    • 53
      Workflow plugin
    • 13
      Configuration as code
    • 12
      Very powerful tool
    • 11
      Many Plugins
    • 10
      Continuous Integration
    • 10
      Great flexibility
    • 9
      Git and Maven integration is better
    • 8
      100% free and open source
    • 7
      Github integration
    • 7
      Slack Integration (plugin)
    • 6
      Easy customisation
    • 6
      Self-hosted GitLab Integration (plugin)
    • 5
      Docker support
    • 5
      Pipeline API
    • 4
      Fast builds
    • 4
      Platform idnependency
    • 4
      Hosted Externally
    • 4
      Excellent docker integration
    • 3
      It`w worked
    • 3
      Customizable
    • 3
      Can be run as a Docker container
    • 3
      It's Everywhere
    • 3
      JOBDSL
    • 3
      AWS Integration
    • 2
      Easily extendable with seamless integration
    • 2
      PHP Support
    • 2
      Build PR Branch Only
    • 2
      NodeJS Support
    • 2
      Ruby/Rails Support
    • 2
      Universal controller
    • 2
      Loose Coupling
    CONS OF JENKINS
    • 13
      Workarounds needed for basic requirements
    • 10
      Groovy with cumbersome syntax
    • 8
      Plugins compatibility issues
    • 7
      Lack of support
    • 7
      Limited abilities with declarative pipelines
    • 5
      No YAML syntax
    • 4
      Too tied to plugins versions

    related Jenkins posts

    Tymoteusz Paul
    Devops guy at X20X Development LTD · | 23 upvotes · 10M views

    Often enough I have to explain my way of going about setting up a CI/CD pipeline with multiple deployment platforms. Since I am a bit tired of yapping the same every single time, I've decided to write it up and share with the world this way, and send people to read it instead ;). I will explain it on "live-example" of how the Rome got built, basing that current methodology exists only of readme.md and wishes of good luck (as it usually is ;)).

    It always starts with an app, whatever it may be and reading the readmes available while Vagrant and VirtualBox is installing and updating. Following that is the first hurdle to go over - convert all the instruction/scripts into Ansible playbook(s), and only stopping when doing a clear vagrant up or vagrant reload we will have a fully working environment. As our Vagrant environment is now functional, it's time to break it! This is the moment to look for how things can be done better (too rigid/too lose versioning? Sloppy environment setup?) and replace them with the right way to do stuff, one that won't bite us in the backside. This is the point, and the best opportunity, to upcycle the existing way of doing dev environment to produce a proper, production-grade product.

    I should probably digress here for a moment and explain why. I firmly believe that the way you deploy production is the same way you should deploy develop, shy of few debugging-friendly setting. This way you avoid the discrepancy between how production work vs how development works, which almost always causes major pains in the back of the neck, and with use of proper tools should mean no more work for the developers. That's why we start with Vagrant as developer boxes should be as easy as vagrant up, but the meat of our product lies in Ansible which will do meat of the work and can be applied to almost anything: AWS, bare metal, docker, LXC, in open net, behind vpn - you name it.

    We must also give proper consideration to monitoring and logging hoovering at this point. My generic answer here is to grab Elasticsearch, Kibana, and Logstash. While for different use cases there may be better solutions, this one is well battle-tested, performs reasonably and is very easy to scale both vertically (within some limits) and horizontally. Logstash rules are easy to write and are well supported in maintenance through Ansible, which as I've mentioned earlier, are at the very core of things, and creating triggers/reports and alerts based on Elastic and Kibana is generally a breeze, including some quite complex aggregations.

    If we are happy with the state of the Ansible it's time to move on and put all those roles and playbooks to work. Namely, we need something to manage our CI/CD pipelines. For me, the choice is obvious: TeamCity. It's modern, robust and unlike most of the light-weight alternatives, it's transparent. What I mean by that is that it doesn't tell you how to do things, doesn't limit your ways to deploy, or test, or package for that matter. Instead, it provides a developer-friendly and rich playground for your pipelines. You can do most the same with Jenkins, but it has a quite dated look and feel to it, while also missing some key functionality that must be brought in via plugins (like quality REST API which comes built-in with TeamCity). It also comes with all the common-handy plugins like Slack or Apache Maven integration.

    The exact flow between CI and CD varies too greatly from one application to another to describe, so I will outline a few rules that guide me in it: 1. Make build steps as small as possible. This way when something breaks, we know exactly where, without needing to dig and root around. 2. All security credentials besides development environment must be sources from individual Vault instances. Keys to those containers should exist only on the CI/CD box and accessible by a few people (the less the better). This is pretty self-explanatory, as anything besides dev may contain sensitive data and, at times, be public-facing. Because of that appropriate security must be present. TeamCity shines in this department with excellent secrets-management. 3. Every part of the build chain shall consume and produce artifacts. If it creates nothing, it likely shouldn't be its own build. This way if any issue shows up with any environment or version, all developer has to do it is grab appropriate artifacts to reproduce the issue locally. 4. Deployment builds should be directly tied to specific Git branches/tags. This enables much easier tracking of what caused an issue, including automated identifying and tagging the author (nothing like automated regression testing!).

    Speaking of deployments, I generally try to keep it simple but also with a close eye on the wallet. Because of that, I am more than happy with AWS or another cloud provider, but also constantly peeking at the loads and do we get the value of what we are paying for. Often enough the pattern of use is not constantly erratic, but rather has a firm baseline which could be migrated away from the cloud and into bare metal boxes. That is another part where this approach strongly triumphs over the common Docker and CircleCI setup, where you are very much tied in to use cloud providers and getting out is expensive. Here to embrace bare-metal hosting all you need is a help of some container-based self-hosting software, my personal preference is with Proxmox and LXC. Following that all you must write are ansible scripts to manage hardware of Proxmox, similar way as you do for Amazon EC2 (ansible supports both greatly) and you are good to go. One does not exclude another, quite the opposite, as they can live in great synergy and cut your costs dramatically (the heavier your base load, the bigger the savings) while providing production-grade resiliency.

    See more
    Thierry Schellenbach

    Releasing new versions of our services is done by Travis CI. Travis first runs our test suite. Once it passes, it publishes a new release binary to GitHub.

    Common tasks such as installing dependencies for the Go project, or building a binary are automated using plain old Makefiles. (We know, crazy old school, right?) Our binaries are compressed using UPX.

    Travis has come a long way over the past years. I used to prefer Jenkins in some cases since it was easier to debug broken builds. With the addition of the aptly named “debug build” button, Travis is now the clear winner. It’s easy to use and free for open source, with no need to maintain anything.

    #ContinuousIntegration #CodeCollaborationVersionControl

    See more
    Travis CI logo

    Travis CI

    26.4K
    1.7K
    A hosted continuous integration service for open source and private projects
    26.4K
    1.7K
    PROS OF TRAVIS CI
    • 506
      Github integration
    • 388
      Free for open source
    • 271
      Easy to get started
    • 191
      Nice interface
    • 162
      Automatic deployment
    • 72
      Tutorials for each programming language
    • 40
      Friendly folks
    • 29
      Support for multiple ruby versions
    • 28
      Osx support
    • 24
      Easy handling of secret keys
    • 6
      Fast builds
    • 4
      Support for students
    • 3
      The best tool for Open Source CI
    • 3
      Hosted
    • 3
      Build Matrices
    • 2
      Github Pull Request build
    • 2
      Straightforward Github/Coveralls integration
    • 2
      Easy of Usage
    • 2
      Integrates with everything
    • 1
      Caching resolved artifacts
    • 1
      Docker support
    • 1
      Great Documentation
    • 1
      Build matrix
    • 1
      No-brainer for CI
    • 1
      Debug build workflow
    • 1
      Ubuntu trusty is not supported
    • 1
      Free for students
    • 1
      Configuration saved with project repository
    • 1
      Multi-threaded run
    • 1
      Hipchat Integration
    • 0
      Perfect
    CONS OF TRAVIS CI
    • 8
      Can't be hosted insternally
    • 3
      Feature lacking
    • 3
      Unstable
    • 2
      Incomplete documentation for all platforms

    related Travis CI posts

    Thierry Schellenbach

    Releasing new versions of our services is done by Travis CI. Travis first runs our test suite. Once it passes, it publishes a new release binary to GitHub.

    Common tasks such as installing dependencies for the Go project, or building a binary are automated using plain old Makefiles. (We know, crazy old school, right?) Our binaries are compressed using UPX.

    Travis has come a long way over the past years. I used to prefer Jenkins in some cases since it was easier to debug broken builds. With the addition of the aptly named “debug build” button, Travis is now the clear winner. It’s easy to use and free for open source, with no need to maintain anything.

    #ContinuousIntegration #CodeCollaborationVersionControl

    See more
    Praveen Mooli
    Engineering Manager at Taylor and Francis · | 19 upvotes · 4M views

    We are in the process of building a modern content platform to deliver our content through various channels. We decided to go with Microservices architecture as we wanted scale. Microservice architecture style is an approach to developing an application as a suite of small independently deployable services built around specific business capabilities. You can gain modularity, extensive parallelism and cost-effective scaling by deploying services across many distributed servers. Microservices modularity facilitates independent updates/deployments, and helps to avoid single point of failure, which can help prevent large-scale outages. We also decided to use Event Driven Architecture pattern which is a popular distributed asynchronous architecture pattern used to produce highly scalable applications. The event-driven architecture is made up of highly decoupled, single-purpose event processing components that asynchronously receive and process events.

    To build our #Backend capabilities we decided to use the following: 1. #Microservices - Java with Spring Boot , Node.js with ExpressJS and Python with Flask 2. #Eventsourcingframework - Amazon Kinesis , Amazon Kinesis Firehose , Amazon SNS , Amazon SQS, AWS Lambda 3. #Data - Amazon RDS , Amazon DynamoDB , Amazon S3 , MongoDB Atlas

    To build #Webapps we decided to use Angular 2 with RxJS

    #Devops - GitHub , Travis CI , Terraform , Docker , Serverless

    See more
    Codeship logo

    Codeship

    1.1K
    1.5K
    A Continuous Integration Platform in the cloud
    1.1K
    1.5K
    PROS OF CODESHIP
    • 215
      Simple deployments
    • 179
      Easy setup
    • 159
      Github integration
    • 147
      Continuous deployment
    • 110
      Bitbucket integration
    • 97
      Easy ui
    • 84
      Slack integration
    • 66
      Fast builds
    • 61
      Great ui
    • 61
      Great customer support
    • 28
      SSH debug access
    • 27
      Free plan for 5 private repositories
    • 27
      Easy to get started
    • 23
      Competitively priced
    • 20
      Notifications
    • 20
      Hipchat, Campfire integrations
    • 16
      Awesome UI
    • 15
      Fast
    • 14
      Great documentation
    • 13
      Great experience
    • 12
      Free for open source
    • 10
      Great Tutorials
    • 4
      GitLab integration
    • 4
      Free
    • 4
      Easy to use, above all and its free for basic use
    • 3
      Easy for CI first timers
    • 3
      BitBucket Support
    • 3
      Very easy to get started
    • 3
      Build private Github repos on the free plan
    • 3
      Awesome
    • 2
      Super easy setup, works great with py.test/tox
    • 2
      Openshift integration
    • 2
      Great support, even on free tier
    • 2
      AppEngine integration
    • 2
      Easy debugging with ssh
    • 2
      Integrates with other free software
    • 2
      Superfast team work integration
    • 2
      Grepping Codeship = 1 day. Grepping Bamboo = 1 month
    • 2
      Easy to set up, very nice GitHub integration
    • 2
      Up and running in few minutes, and above all UI
    CONS OF CODESHIP
    • 3
      Ui could use some polishing
    • 0
      Antiquated ui
    • 0
      Difficult to answer build questions

    related Codeship posts

    Sebastian Dellwig
    Solution Architect at Porsche Digital GmbH · | 6 upvotes · 198.9K views
    Shared insights
    on
    GitLab CIGitLab CICircleCICircleCICodeshipCodeship

    We are using GitLab CI and were very happy with it. The integration of all tools like CI/CD, tickets, etc makes it very easy to stay on top of things. But be aware, Gitlab currently does not have iOS build support. So if you want to exchange that for CircleCI / Codeship to have to invest some effort. We are using a managed Mac OS device and installed the Gitlab runner there, to have iOS builds.

    See more
    Azure DevOps logo

    Azure DevOps

    2.7K
    249
    Services for teams to share code, track work, and ship software
    2.7K
    249
    PROS OF AZURE DEVOPS
    • 56
      Complete and powerful
    • 32
      Huge extension ecosystem
    • 27
      Azure integration
    • 26
      Flexible and powerful
    • 26
      One Stop Shop For Build server, Project Mgt, CDCI
    • 15
      Everything I need. Simple and intuitive UI
    • 13
      Support Open Source
    • 8
      Integrations
    • 7
      GitHub Integration
    • 6
      Cost free for Stakeholders
    • 6
      One 4 all
    • 6
      Crap
    • 6
      Project Mgmt Features
    • 5
      Runs in the cloud
    • 3
      Agent On-Premise(Linux - Windows)
    • 2
      Aws integration
    • 2
      Link Test Cases to Stories
    • 2
      Jenkins Integration
    • 1
      GCP Integration
    CONS OF AZURE DEVOPS
    • 8
      Still dependant on C# for agents
    • 5
      Half Baked
    • 5
      Many in devops disregard MS altogether
    • 4
      Not a requirements management tool
    • 4
      Jack of all trades, master of none
    • 4
      Capacity across cross functional teams not visibile
    • 3
      Poor Jenkins integration
    • 2
      Tedious for test plan/case creation
    • 1
      Switching accounts is impossible

    related Azure DevOps posts

    Farzad Jalali
    Senior Software Architect at BerryWorld · | 8 upvotes · 432.1K views

    Visual Studio Azure DevOps Azure Functions Azure Websites #Azure #AzureKeyVault #AzureAD #AzureApps

    #Azure Cloud Since Amazon is potentially our competitor then we need a different cloud vendor, also our programmers are microsoft oriented so the choose were obviously #Azure for us.

    Azure DevOps Because we need to be able to develop a neww pipeline into Azure environment ina few minutes.

    Azure Kubernetes Service We already in #Azure , also need to use K8s , so let's use AKS as it's a manged Kubernetes in the #Azure

    See more
    Andrey Kurdyumov
    Sr. Software developer · | 8 upvotes · 205.1K views
    Shared insights
    on
    Azure DevOpsAzure DevOpsGitGit

    I use Azure DevOps because for me it gradually walk me from private Git repositories to simplest free option for CI/CD pipelines at the time. I spend 0$ initially to manager CI/CD for my small private projects. No need to go into two different places to setup integration, once I have git repository, I could deploy projects. Right now this is not the case since CI/CD is default for me, so I use it now from memories of old good days. I'm not yet need complexity on the projects, so I don't even consider other options with "more choices". I carefully limit my set of options during development, that's why Azure DevOps (VSTS)

    See more
    Concourse logo

    Concourse

    262
    54
    Pipeline-based CI system written in Go
    262
    54
    PROS OF CONCOURSE
    • 16
      Real pipelines
    • 10
      Containerised builds
    • 9
      Flexible engine
    • 6
      Fast
    • 4
      Open source
    • 3
      No Snowflakes
    • 3
      Simple configuration management
    • 2
      You have to do everything
    • 1
      Fancy Visualization
    CONS OF CONCOURSE
    • 2
      Fail forward instead of rollback pattern

    related Concourse posts

    We use Docker for our #DeploymentWorkflow along with Concourse for build pipelines and Ansible for deployment together with Vault to manage secrets.

    See more
    Vijay Kumar Reddy Tamalampudi
    Shared insights
    on
    ConcourseConcourseKubernetesKubernetes

    I wanna develop a video processing pipeline for an open source organization the pipeline consists of fixing video meta-data, transcoding, uploading to CDN, and uploading to YouTube. What do you guys think is a better way to do this, Kubernetes or Concourse?

    See more
    CloudBees logo

    CloudBees

    95
    6
    Enterprise Jenkins and DevOps
    95
    6
    PROS OF CLOUDBEES
    • 6
      Jenkins
    CONS OF CLOUDBEES
      Be the first to leave a con

      related CloudBees posts

      Bamboo logo

      Bamboo

      509
      17
      Tie automated builds, tests, and releases together in a single workflow
      509
      17
      PROS OF BAMBOO
      • 10
        Integrates with other Atlassian tools
      • 4
        Great notification scheme
      • 2
        Great UI
      • 1
        Has Deployment Projects
      CONS OF BAMBOO
      • 6
        Expensive
      • 1
        Low community support
      • 1
        Bad UI
      • 1
        Bad integration with docker

      related Bamboo posts

      xie zhifeng
      Shared insights
      on
      BambooBambooJenkinsJenkinsGitLabGitLab
      at

      I am choosing a DevOps toolset for my team. GitLab is open source and quite cloud-native. Jenkins has a very popular environment system but old-style technicals. Bamboo is very nice but integrated only with Atlassian products.

      See more
      Shared insights
      on
      GitLabGitLabBambooBamboo

      Need for CI/CD as part of data testing team.

      Please suggest.

      Currently, Bamboo is most commonly used in the company while GitLab is rated highly by the internal team.

      See more
      AWS CodeBuild logo

      AWS CodeBuild

      376
      43
      Build and test code with continuous scaling
      376
      43
      PROS OF AWS CODEBUILD
      • 7
        Pay per minute
      • 5
        Parameter Store integration for passing secrets
      • 4
        Integrated with AWS
      • 3
        Streaming logs to Amazon CloudWatch
      • 3
        Bit bucket integration
      • 2
        GitHub Webhooks support
      • 2
        AWS Config and Config rule integration for compliance
      • 2
        VPC PrivateLinks to invoke service without internet
      • 1
        Windows/.NET support
      • 1
        Jenkins plugin integration
      • 1
        Ondemand scaling of build jobs
      • 1
        Scheduled builds with CloudWatch Events integration
      • 1
        Local build debug support
      • 1
        Native support for accessing Amazon VPC resources
      • 1
        Docker based build environment
      • 1
        Support for bringing custom Docker images
      • 1
        Fully managed (no installation/updates, servers to mai
      • 1
        PCI, SOC, ISO, HIPAA compliant
      • 1
        Full API/SDKs/CLI support
      • 1
        YAML based configuration
      • 1
        Great support (forums, premium support, SO, GitHub)
      • 1
        Perpetual free tier option (100 mins/month)
      • 1
        GitHub Enterprise support
      CONS OF AWS CODEBUILD
      • 2
        Poor branch support

      related AWS CodeBuild posts

      Chris McFadden
      VP, Engineering at SparkPost · | 9 upvotes · 158.7K views

      The recent move of our CI/CD tooling to AWS CodeBuild / AWS CodeDeploy (with GitHub ) as well as moving to Amazon EC2 Container Service / AWS Lambda for our deployment architecture for most of our services has helped us significantly reduce our deployment times while improving both feature velocity and overall reliability. In one extreme case, we got one service down from 90 minutes to a very reasonable 15 minutes. Container-based build and deployments have made so many things simpler and easier and the integration between the tools has been helpful. There is still some work to do on our service mesh & API proxy approach to further simplify our environment.

      See more

      Hi, I need advice. In my project, we are using Bitbucket hosted on-prem, Jenkins, and Jira. Also, we have restrictions not to use any plugins for code review, code quality, code security, etc., with bitbucket. Now we want to migrate to AWS CodeCommit, which would mean that we can use, let's say, Amazon CodeGuru for code reviews and move to AWS CodeBuild and AWS CodePipeline for build automation in the future rather than using Jenkins.

      Now I want advice on below.

      1. Is it a good idea to migrate from Bitbucket to AWS Codecommit?
      2. If we want to integrate Jira with AWS Codecommit, then how can we do this? If a developer makes any changes in Jira, then a build should be triggered automatically in AWS and create a Jira ticket if the build fails. So, how can we achieve this?
      See more