Live data from Hacker News

Modern CI is too complex and misdirected (2021)

gregoryszorc.com

51–60 of 207 posts

Re: Modern CI is too complex and misdirected (2021)

#51

I remember a Rich Hickey talk where he described Datomic, his database. He said "the problem with a database is that it's over there ." By modeling data with immutable "facts" (a la Prolog), much of the database logic can be moved closer to the application. In his case, with Clojure's data structures. Maybe the the problem with CI is that it's over there . As soon as it stops being something that I could set up and r…

It’s why I’ve started making CI simply a script that I can run locally or on GitHub Actions etc.

Then the CI just becomes a bit of yaml that runs my script.

Re: Modern CI is too complex and misdirected (2021)

#52

2025 and Jenkins still the way to go

The fact that maintaining any Jenkins instance makes you want to shoot yourself and yet it's the least worst option is an indictment of the whole CI universe. I have never seen a system with documentation as awful as Jenkins, with plugins as broken as Jenkins, with behaviors as broken as Jenkins. Groovy is a cancer, and the pipelines are half assed, unfinished and incompatible with most things.

"Jenkins is the worst form of CI except for all those other forms that have been tried" - Winston Churchill, probably

Re: Modern CI is too complex and misdirected (2021)

#53

Wait a CI isn't supposed to be a build system that also runs tests?

In my view, the CI system is supposed to run builds and tests in a standardized/reproducible environment (and to store logs/build artifacts).

This is useful because you get a single source of truth for "does that commit break the build" and eliminate implicit dependencies that might make builds work on one machine but not another.

But specifying dependencies between your build targets and/or sourcefiles, is turning that runner into a bad, incomplete reimplementation of make, which is what this post is complaining about AFAICT.

Re: Modern CI is too complex and misdirected (2021)

#54

IMO development is too complex and misdirected in general since we cargo cult FAANG. Need AWS, Azure or GCP deployment? Ever thought about putting it on bare metal yourself? If not, why not? Because it's not best practice? Nonsense. The answer with these things is: it depends, and if your app has not that many users, you can get away with it, especially if it's a B2B or internal app. It's also too US centric. The ide…

Requirements are complex too. Even if you don't need to scale at all, you likely do need zero-downtime deployment, easy rollbacks, server fault tolerance, service isolation... If you put your apps into containers and throw them onto Kubernetes, you get a lot of that "for free" and in a well-known and well-tested way. Hand-rolling even one of those things, let alone all of them together, would take far too much effort…

Holy shit you don't get anything for _free_ as a result of adopting Kubernetes dude. The cost is in fact quite high in many cases - you adopt Kubernetes and all of the associated idiosyncrasies, which can be a lot more than what you left behind.

Re: Modern CI is too complex and misdirected (2021)

#57

Earlier quoted context omitted.

until you have to debug a GH action, especially if it only runs on main or is one of the handful of tasks that are only picked up when committed to main. god help you, and don’t even bother with the local emulators / mocks.

What are the good local emulators for gh actions? The #1 reason we don’t use them is because the development loop is appallingly slow.

none of them are good ime, stopped using actions for the same reason

Re: Modern CI is too complex and misdirected (2021)

#58

I remember a Rich Hickey talk where he described Datomic, his database. He said "the problem with a database is that it's over there ." By modeling data with immutable "facts" (a la Prolog), much of the database logic can be moved closer to the application. In his case, with Clojure's data structures. Maybe the the problem with CI is that it's over there . As soon as it stops being something that I could set up and r…

It’s why I’ve started making CI simply a script that I can run locally or on GitHub Actions etc. Then the CI just becomes a bit of yaml that runs my script.

Are you not worried about parallelisation in your case? Or have you solved that in another way (one big beefy build machine maybe?)

Re: Modern CI is too complex and misdirected (2021)

#59
Drone was absolutely perfect back when it was Free Software. Literally "run these commands in this docker container on these events" and basically nothing more. We ran the last fully open source version much longer than we probably should have.

When they went commercial, GitHub Actions became the obvious choice, but it's just married to so much weirdness and unpredictability.

Whole thing with Drone opened my eyes at least, I'll never sign a CLA again

Re: Modern CI is too complex and misdirected (2021)

#60
You can roll your own barebones DAG engine in any language that has promises/futures and the ability to wait for multiple promises to resolve (like JS's Promise.all()):

    For each task t in topological order: 
      Promise.all(all in-edges to t).then(t)
Want to run tasks on remote machines? Simply waves hands make a task that runs ssh.
Post reply on HN