Codeship Blog
blog.codeship.com · Company blog · on HN since 2013
Codeship's company blog on continuous integration and delivery, covering Docker, Go, Elixir, Crystal and tech stack decisions.
What HN saysHN commenters call it a consistently published, well-done company tech blog, and point to its Docker for continuous delivery series and AWS account advice.
138HN people shared it
27linked it in comments
242stories submitted
3.1Kstory points
7 years agolast shared
2013people per year2026
Most-shared posts
- 1Growing Your Tech Stack: When to Say No7 people · 20 points · first shared 2015 · 1 comments on HN
- 2Crystal: Fast as C, Slick as Ruby5 people · 552 points · first shared 2016 · 429 comments on HN
- 3Comparing Elixir and Go4 people · 489 points · first shared 2017 · 194 comments on HN
- 4Homepage4 people · first shared 2015
- 5Codeship Acquired by CloudBees3 people · 20 points · first shared 2018 · 3 comments on HN
- 6Distributed Data Analysis with Plain Unix Commands and Docker Swarm3 people · 9 points · first shared 2016 · discussion on HN
- 7Building Minimal Docker Containers for Go Applications3 people · 7 points · first shared 2015 · discussion on HN
- 8Heroku Data Links with Postgres and Redis3 people · 5 points · first shared 2015 · discussion on HN
- 9Unleash the Power of Storing JSON in Postgres3 people · 2 points · first shared 2015 · discussion on HN
- 10Visualizing Garbage Collection in Ruby and Python2 people · 72 points · first shared 2015 · 1 comments on HN
- 11Container OS comparison2 people · 71 points · first shared 2015 · 34 comments on HN
- 12AWS Speed Test: These Are the Fastest EC2 and S3 Regions2 people · 21 points · first shared 2014 · 2 comments on HN
- 13Immutable Infrastructure2 people · 19 points · first shared 2014 · discussion on HN
- 14Docker Machine, Compose and Swarm: How They Work Together2 people · 11 points · first shared 2015 · discussion on HN
- 15Exploring Microservices Architecture on Heroku2 people · 10 points · first shared 2015 · discussion on HN
What HN people wrote when they linked it
jimschley · 2015-12-01
Codeship | Senior Software Engineer | Boston, Vienna AUT, or remote (US/EU)
Codeship is a hosted continuous integration / continuous delivery product. We help software developers write and deploy their code with confidence.
As a developer tools startup we're putting a lot of effort into a great workflow with testing, code reviews and obviously continuous delivery. We've written a lot about that on our blog at http://blog.codeship.com
more about our openings here: https://codeship.com/jobs
atroyn · 2015-06-30
Codeship have a great series on Docker for Continuous delivery on their blog: http://blog.codeship.com/
That said I've paged the founders to this thread, they can make the case much more effectively than I can. (disclosure: I don't work for Codeship).
fmotlik · 2015-05-01
Codeship - Senior Engineer, Full Time, Boston, Vienna or remote in Europe
Codeship is a continuous delivery service. We're running tests and deployments for thousands of teams and are growing quickly. We're currently a team of 18 and have more than doubled over the last 6 months.
As a developer tools startup we're putting a lot of effort into a great workflow with testing, code reviews and obviously continuous delivery. We've written a lot about that on our blog at http://blog.codeship.com
You can read more here: https://codeship.com/jobs
donmcronald · 2019-05-27
AFAIK it's already considered a best practice to set up separate accounts for development and production (https://blog.codeship.com/separate-aws-production-and-development-acco… Having a hard cap on an account dedicated to development would help a lot IMO.
brightball · 2017-04-21
See Codeship's blog for a consistently published tech blog for a product targeted to a tech audience. They do a really good job with it.
https://blog.codeship.com/
Disclosure: I periodically write for Codeship.
pselbert · 2016-12-22
> Redis recently switched from HyperLogLog to the slightly better LogLog-Beta
Interesting, has anything been written about that? I've learned most of what I know about cardinality estimation from Redis and your writing on the matter, so I'd love to see more. It would be great to re-visit an article I wrote about HLL[0] from a new perspective as well.
[0]: https://blog.codeship.com/counting-distinct-values-with-hyperloglog/
matlock · 2014-11-01
Codeship - Boston, MA or Vienna, Austria
At Codeship we build a continuous Deployment service. Our mission is to make software teams more productive by helping them to release early, often and safe. We're building for the builders.
We've been in production release for several years, have thousands of developers using the service and are growing rapidly. We've closed our Series A earlier this year.
We're looking for Rails Developers, SysAdmins/DevOps, designers and frontend developers who love building tools for other developers.
Read more about us on our Jobs Page: https://codeship.io/jobs And how we work in our Blogposts: http://blog.codeship.io/category/the-codeship-workflow
Send me an email to [email protected]. You'll like it here!
clemc · 2013-09-24
Great post! Just discovered another nice piece about CI on their blog > http://blog.codeship.io/2013/09/12/the-codeship-workflow-part-5-contin…
Seems damn legit!
craigkerstiens · 2017-09-26
I don't think the article could have said it much better.
SQL is super powerful and makes much sense in so many ways. Nearly all apps have a relational structure to them and SQL is a reasonable way to interact with them.
Some of my favorite conversations from the Postgres community 5-6 years back were when they were talking about a time when Postgres was being disrupted. The gray bearded DBAs (Hi Berkus and others) were talking about JSON like it's fad and how it's going to come to pass. They were saying so because they'd heard about this disruption before... there was this new thing XML and these document databases were so much more powerful. They waited a few years and added an XML datatype [1]... And then XML databases came and passed.
At first they scoffed a bit on JSON as the new hip thing, but came around a little in Postgres 9.2, and then in 9.4 [2] we all really got what we wanted.
SQL has never been a particularly elegant language, but it's always been a powerful one. The lone knock against has either been usability or scalability [3]. On the usability side that's a bit of a hard one as well it's not super pretty. But once you understand it's foundations around relational algebra or relational calculus you're so far ahead. On the scalability side there are definitely some options such as Citus, but also core Postgres is massively improving here.
[1] https://www.postgresql.org/docs/9.3/static/datatype-xml.html
[2]…
bampolampy · 2015-06-30
(disclosure: I do work for Codeship :P )
There are a lot of really great reasons to use Docker, or any container technology for CI.
First off containers give you a standard interface to a reproducable build. This means you can run something in a container and expect it to behave the same way as something a co-worker runs on their workstation, or something run in the staging or production environments. For CI this is an absolute necessity. Rather than running tests locally, and expecting a CI server closely tracking the production/staging environments to catch issues with different version of the OS or libraries you can expect any build that passes locally to also pass on CI. This cuts down on a lot of potential back and forth. The only shared dependency between CI/local/prod/staging is docker itself.
Another benefit is (almost) complete isolation. This means rather than having different vm images tracking different projects, you can have a single vm image with docker, and have each container running on the vm for any version of any build across your system. From a CI perspective you can abstract most of the complex configuration for your applications into "docker build -t myapp_test ./Dockerfile.test && docker run myapp_test".
Containers use a differential filesystem, so N running containers for an application will take up 1 X the size of the container image + N x the average space of changes made in the running containers on top of that base image. This makes larger…
kick · 2020-02-14
Crystal is really nice! Cloning Ruby syntax but making it prettier is probably one of the smartest language design decisions that have happened in a long time.
It's definitely gotten further on my radar in the past year or so, though I remember reading this a few years ago and finding it pretty cool then, too:
https://blog.codeship.com/an-introduction-to-crystal-fast-as-c-slick-a…
Relevant HN thread: https://news.ycombinator.com/item?id=12223395
Seeing Lilith in (what was, I think) December was what really alerted me to the fact that it had come along so far, I had mostly thought it was dead before.
Lilith: https://github.com/ffwff/lilith
Relevant HN thread on Lilith: https://news.ycombinator.com/item?id=21860713
cpursley · 2019-09-16
It seems like Elixir is a better fit than Go for all of the benefits listed here, especially in the age of distributed systems.
https://blog.codeship.com/comparing-elixir-go/
vinceguidry · 2019-05-29
> arbitrary SQL cannot be combined or reused in a way which leads to compositional queries
You can do this, look into arel. Here's a blog post:
https://blog.codeship.com/creating-advanced-active-record-db-queries-a…
sandGorgon · 2019-02-14
postgres has a jsonb datatype that works pretty much like mongodb.
https://blog.codeship.com/unleash-the-power-of-storing-json-in-postgre…
h1d · 2018-05-15
I think it's time people start using something better than bash/zsh that is decades old, like fish or even come up with a more modern shell.
Even by looking at these examples, you see it has less verbosity like "then" and "do", you can reference arguments as $argv instead of cryptic $@ and exit status code as $status instead of $? which is confusing with $! and the likes.
https://blog.codeship.com/lets-talk-about-shell-scripting/
https://fishshell.com/docs/current/tutorial.html
Shell is such an integral part of admins and programmers workflow yet I find it hard to believe this field has been so slow at improving. Even the fish site jokingly states "Finally, a command
line shell for the 90s" implying the others are even older.
mooreds · 2018-02-06
Here's the announcement from codeship: https://blog.codeship.com/codeship-acquired-by-cloudbees/
dorianm · 2017-02-03
There are other articles for those interested:
- https://blog.codeship.com/rails-migrations-zero-downtime/
- https://blog.engineyard.com/2011/zero-downtime-deploys-with-migrations
In the Ruby on Rails world, it's definitely a thing (made easier with attribute reader / writer, and db/migrations/)
czbond · 2017-01-28
While not addressing the drawbacks per se, I enjoyed reading this in depth comparison between Elixir and Go from an internal language perspective. https://blog.codeship.com/comparing-elixir-go/
manualwise · 2017-01-27
This article has some performance comparisons between Crystal and Elixir in the comments: https://blog.codeship.com/an-introduction-to-crystal-fast-as-c-slick-a…
chrisweekly · 2016-06-15
My colleague Elaine gave this interview on "what it means to be a senior engineer":
https://blog.codeship.com/elaine-uy-tapjoy-interview/
NeutronBoy · 2016-04-22
Most of it is link tracking for newsletter distribution. You can remove it and shorten it to [1] without any impact
[1] https://blog.codeship.com/kubernetes-namespaces-resource-quota-limits-…
_6d9t · 2015-12-24
You can actually take things way further in Go: https://blog.codeship.com/building-minimal-docker-containers-for-go-ap…
ajaynairataws · 2015-06-15
A few options - Codeship (https://blog.codeship.com/integrating-aws-lambda-with-codeship/), popular community extensions such as Kappa (https://github.com/garnaat/kappa) Jenkins plugins (https://wiki.jenkins-ci.org/display/JENKINS/AWS+Lambda+Plugin) and Grunt plugins (https://github.com/Tim-B/grunt-aws-lambda/commits/master/package.json) that you can use as part of your CI/CD pipelines. There was even recent blogpost about using Lambda to deploy Lambda functions :) (https://aws.amazon.com/blogs/compute/new-deployment-options-for-aws-la… Would be great to hear what else you would like to see.
opendais · 2014-06-24
In fairness to Brian, I think you are flipping to the opposite extreme which isn't really valid either.
Especially here:
> Puppet? I am sorry but Puppet, chef and their ilk are horrible, who knows what state any machine is ever in at any point in time. humans will inevitably forget to ensure absent, or make an assumption about state in puppet land.
You setup the new cluster, switch the load balancer, tear down the old cluster.
I suggest you look into blog posts like this [if this is a pain point for you]:
http://blog.codeship.io/2013/09/12/the-codeship-workflow-part-5-contin…
locksley · 2013-02-26
The most useful tip I could give you (if you're building on rails and deploying to heroku) is to use a Unicorn Webserver. It allows your to handle far more concurrent requests.
This article explains it better than I ever will.
http://blog.codeship.io/2012/05/06/Unicorn-on-Heroku.html
I'm running 8 unicorn workers per dyno at the moment and that's still within the 512mb memory limit because I'm not using ActiveRecord.
kawsper · 2013-02-13
It is how Rails server behaves in itself, but that is also how Heroku tells you to do it.
Rails can be served with Unicorn ( http://unicorn.bogomips.org/ ) which is a forking app-server.
I do believe there was a trick a while back where you could get Heroku to run a Unicorn process on a dyno to get more requests out of it. The process is described here: http://blog.codeship.io/2012/05/06/Unicorn-on-Heroku.html
sbuttgereit · 2017-12-18
I don't think so. First, just to make sure there aren't any points of confusion... Erlang/Elixir processes are not OS processes (https://elixir-lang.github.io/getting-started/processes.html). As such, we really can't speak of processes in Erlang/Elixir and other kinds of systems on any sort of equal footing. In Erlang, processes are much lighter weight than OS processes. And you do expect them to go wrong... so Erlang has the idea of "Supervision Tree" where there are Supervisor processes whose job it is to monitor other processes and to manage their failure when it occurs. There can be multiple Supervisors which influence one another, or not, as you design them too (thus the "tree" bit). Naturally you plan for these sorts of failures in designing what is/is not a process, what dependencies there may be, what any Supervisor watches and how the Supervisors relate to one another.
Erlang/Elixir also seems to have one of the strongest availability and concurrency stories out there on its own. Part of this comes from the aforementioned built in assumptions around isolating and managing failed processes, but the other is in terms of the relative ease of starting processes as needed, and accessing the processes of other Erlang VMs (same server or not). It's clear you have to architect and build things correctly to take full advantage of these capabilities, but I think you can get to the place you describe without necessarily taking on a bundle of different applications for…