Modern CI is too complex and misdirected
gregoryszorc.com
Modern CI is too complex and misdirected
1–10 of 184 posts
Re: Modern CI is too complex and misdirected
#2All a CI pipeline is is an artifact generator.
All a CD pipeline is is an artifact shuffler that can kick off dependent CI jobs.
The rest is just as the author mentions. Remote Code Execution as a service.
Re: Modern CI is too complex and misdirected
#3https://www.microsoft.com/en-us/research/uploads/prod/2018/0...
To expand, the OP ends with an "ideal world" that sounds to me an awful lot like someone's put the full expressive power of Build Systems à la Carte into a programmable platform, accessible by API.
Re: Modern CI is too complex and misdirected
#4Observation: X is too complex/too time-consuming/too error-prone.
Reaction: Create X' to automate/simplify X.
Later: X' is too complex.
Re: Modern CI is too complex and misdirected
#5I've used Jenkins, Circle CI, GitLab and GitHub Actions and I've always considered them to be a "remote code execution in response to triggers relating to my coding workflow" systems, which I think covers both build and CI.
Re: Modern CI is too complex and misdirected
#6What is the name for this phenomenon: Observation: X is too complex/too time-consuming/too error-prone. Reaction: Create X' to automate/simplify X. Later: X' is too complex.
Re: Modern CI is too complex and misdirected
#7What is the name for this phenomenon: Observation: X is too complex/too time-consuming/too error-prone. Reaction: Create X' to automate/simplify X. Later: X' is too complex.
Re: Modern CI is too complex and misdirected
#8It's not exactly the same as the local build system, because development requirements and constraints are often distinct from staging/prod build requirements, and each CI paltform has subtle differences with regards to caching, Docker registries, etc. But it uses a lot of the same underlying scripts. (In our case, we rely a lot on Makefiles, Docker BuildKit, and custom tar contexts for each image).
Regarding GitHub actions in particular, I've always found it annoyingly complex. I don't like having to develop new mental models around proprietary abstractions to learn how to do something I can do on my own machine with a few lines of bash. I always dread setting up a new GHA workflow because it means I need to go grok that documentation again.
Leaning heavily on GHA / GL CI can be advantageous for a small project that is using standardized, cookie-cutter approaches, e.g. your typical JS project that doesn't do anything weird and just uses basic npm build + test + publish. In that case, using GHA can save you time because there is likely a preconfigured workflow that works exactly for your use case. But as soon as you're doing something slightly different from the standard model, relying on the cookie-cutter workflows becomes inhibitive and you're better off shoving everything into a few scripts. Use the workflows where they integrate tightly with something on the platform (e.g. uploading an artifact to GitHub, or vendor-specific branch caching logic), but otherwise, prefer your own scripts that can run just as well on your laptop as in CI. To be honest, I've even started avoiding the vendor caching logic in favor of using a single layer docker image as an ad-hoc FS cache.
Re: Modern CI is too complex and misdirected
#9Modern CI/CD handles tasks that are not strictly reproducible. The continuous aspect also implies its integrated to source control.
I guess I don't understand the post if its not just semantic word games based on sufficient use of the word sufficient.
Maybe the point is to talk about how great Taskcluster is but the only thing mentioned is security and that is handled with user permissions in Gitlab and I assume Github. Secrets are associated with project and branch permissions, etc. No other advantage is mentioned in detail.
Can someone spell out the point of this article?
Re: Modern CI is too complex and misdirected
#10As a principle, I consider any codebase which can be compromised by corrupting a single person to be inherently vulnerable. Sometimes this is ok, but this is definitely not ok for critical systems. Obviously it is better to have a stronger safety factor and require more groups/individuals to be corrupted, but there are diminishing returns considering it is assumed said individuals are already relatively trustworthy. Additionally, it is really surprising to me how many code platforms make providing even basic guarantees like this one impossible.