Hacker News new | comments | show | ask | jobs | submit login
Ask HN: It's mid 2017. For a brand new project, how would you set up CI/CD?
7 points by hoodoof 159 days ago | hide | past | web | favorite | 7 comments
CI/CD has been around for a while now, and the landscape and tools have shifted over time.

If you had a clean slate, how would you go about setting up your CI/CD for a brand new web application? What tools would you choose, what would your process look like? What pitfalls would you avoid?

If your team size is larger than say 10-15, consider adding dedicated test results reporting at the same time you are setting up CI/CD too. I'm involved with Tesults (https://www.tesults.com) and found most teams make do with the reporting built into the CI system thinking it's good enough but it's not at all if you have a large enough team and have a lot of integration/system level tests that need to provide accessible logging, adequate failure reasons and you need to keep track of who's looking into a test fail and do things like keep a handle on recurring fails. If you're working on an open source project (non commercial) then they are currently looking to launch something new that will be free to use for those teams and are accepting emails at the bottom of the front page to talk to interested teams. Appreciation of automation goes up when you have good reporting set up, along with actions that are taken in reaction to failures. If you're going to the trouble of implementing CI then I expect you have at least some expectation of doing fairly regular check-ins, but if it's just a couple of you then of course you're probably fine relying on the built in reporting.

With respect to CI you're spoiled for choice now compared to just a 4-5 years ago when these cloud providers like CircleCI and travis did not exist. Jenkins is still the most flexible in my opinion but requires you to be a bit more serious in terms of putting on your build engineer 'hat'.

I've married docker from desktop to deployment, so that is the thread here...

If you host privately then bitbucket offers their CI called pipeline. [1]

Gitlab has their own CI. [2]

Then there is always travis-ci. [3]

Jenkins [4] is great, but I thought it was a little much for my pet projects.

In the end I decided to make one of my side projects a mini-CI/CD, appropriately called minici [5]. Since then I have rolled most of the side projects over to this.

All of these play well with docker (to a degree). Mini-ci (my baby) was built with docker in mind.

Things to watch out for: Each of the CI systems have a flavor of runner file or DSL to run in their CI. This is sometime a YAML file or in Jenkins case a groovy script. In my mini-ci project I opted for a standard Makefile with a specific target name to kick things off.

None of them have a steep learning curve, but I find that the complexity creeps in when you want a full SDLC pipeline with multiple stages, reporting, and alerting. Lots of moving parts.

I'm glad that I put time into learning modern CI/CD systems. It has made me more comfortable to put down a side projects for months at a time and only ship tiny changes without worry of remembering how to do deployments or run tests.

[1] - https://bitbucket.org/product/features/pipelines

[2] - https://about.gitlab.com/features/gitlab-ci-cd/

[3] - https://travis-ci.org

[4] - https://jenkins.io

[5] - https://github.com/undernewmanagement/mini-ci

Do give consideration to a Serverless Architecture: AWS CodeBuild and similar PaaS development tools are so vastly simplified it's hard not to imagine imminent widespread adoption.

Continuous Deployment for Serverless Applications


Gitlab. The CI pipeline there they have is perfect and the pricing is better than github.

Then you can just use Docker Swarm/Rancher/etc for deployment.

GitHub + circleCI + Aws deployment scripts

Jenkins + Blue Ocean, Spinnaker, Gitlab all running inside as well as deploying to Kubernetes

Go CD on AWS. Docker if required.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | DMCA | Apply to YC | Contact