
Ask HN: It's mid 2017. For a brand new project, how would you set up CI/CD? - hoodoof
CI&#x2F;CD has been around for a while now, and the landscape and tools have shifted over time.<p>If you had a clean slate, how would you go about setting up your CI&#x2F;CD for a brand new web application?  What tools would you choose, what would your process look like?  What pitfalls would you avoid?
======
ajeet_dhaliwal
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](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'.

------
sheraz
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](https://bitbucket.org/product/features/pipelines)

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

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

[4] - [https://jenkins.io](https://jenkins.io)

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

------
indescions_2017
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

[https://aws.amazon.com/blogs/compute/continuous-
deployment-f...](https://aws.amazon.com/blogs/compute/continuous-deployment-
for-serverless-applications/)

------
thiagooffm
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.

------
nolite
GitHub + circleCI + Aws deployment scripts

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

------
sidcool
Go CD on AWS. Docker if required.

