I know this is a meme, but just in case someone doesn't actually know. CI saves literally thousands upon thousands of dev hours a year, even for small teams.
post
“Leeroy Jenkins” is what my backend guys say right before they huck a major DB upgrade into prod without testing it in staging.
Always Friday at 16:59 right?
Right before a long weekend where Monday is a government holiday.
Also, Leeroy tried to optimize his PTO and hooked a backpacking trip onto the long weekend. He will be out all week and will have no phone reception.
Our old Jenkins box is called Leroy, and my old place it was called Jankins. Thankfully we’ve moved on from that trash.
Real talk- I agree with this meme as truth.
The more and more I use CICD tools, the more I see value in scripting out my deployment with shell scripts and Dockerfiles that can be run anywhere, to include within a CICD tool.
This way, the CICD tool is merely a launch point for the aforementioned deployment scripts, and its only other responsibility is injecting deployment tokens and credentials into the scripts as necessary.
Anyone else in the same boat as me?
I’d be curious to hear about projects where my approach would not work, if anyone is willing to share!
Edit: In no way does my approach to deployment reduce my appreciation for the efforts required to make a CICD pipeline happen. I’m just saying that in my experience, I don’t find most CICD platforms’ features to be necessary.
This is pretty much what we do as well
All the build logic is coded in python scripts, the jenkins file only defines the stage (with branch restrictions) and calls the respective script function.
This means it works on all machines and if we need to move away from jenkins integration with a new ci platform would require minimal effort.
You're not advocating against CI like the meme seems to be, but rather for CI builds to be runnable on human's machines and the results should be same/similar as in when running w/in the CI system. Which is what CI folks want anyway.
What about related tools such as viewing artifacts such as for example total memory usage, and graphing that in the browser.
And sending emails, messages etc in case of a failure or change.
Most of those things mentioned aren’t bona fide needs for me. Once a developer is deploying their project, they’re watching it go through the pipeline so they can quickly respond to issues and validate that everything in production looks good before they switch contexts to something else.
I see what you’re saying though, depending on what exactly is being deployed, the policies of your organization, and maybe expectations that developers are working in another context once they kick off a deployment, it could be necessary to have alerting like that. In that case it may be wise to flex some features of your CICD platform (or build a more robust script for deployment that can handle error alerting, which may or may not be worth it).
Yeah, except for the Docker part
What's wrong with Docker?
TBF, the problem isn't Docker, it's overused containerization
I’ve found Docker helpful when I want to use it to build binaries or use CLI tools that may not be available directly on the CICD platform. Also, Docker makes it easier to run the same code on MacOS that I ended up running on a Linux CICD server.
What would you consider to be overuse of containers?
Counterpoint: watching little green checkmarks appear when my PR passes a pipeline step gives me dopamine
Ah, good 'ol Jenkins. It's on my list of software I never want to use again, twice.
One feature was really sweet though: being able to edit the Jenkinsfile script inline and run it. On the other hand, that encouraged the wild cowboy lands. Contrasted to GitHub Actions, you get to see how many commits it took to get right 🙃
Nobody will see me force push to "bugfix/gitlabCI" the 10th time today...
What's wrong with Jenkins? Works pretty great for automated scripts that need to run on a schedule, but I imagine you and this post specifically mean in reference to CI/CD
I work for a very large company which uses Jenkins for CI/CD and it’s an absolute nightmare. Granted, some of these issues may be related to how my company has it setup. I’m not in DevOps so I wouldn’t know. But these are my complaints:
-
Can have incredibly long queue times in some cases. It takes forever to spin up additional build agents to meet demand. In one case we actually had to abort a deploy because Jenkins wasn’t spinning up more build agents, and our queue times were going to put us outside of our 3 HOUR maintenance window.
-
Non-standard format for pipeline configuration files. It could just be JSON or YAML, but noooo, I have to learn something completely different that won’t transfer to other products.
-
Dated and overly complicated UI with multiple UX issues. I can view the logs in a modal from the build page, but I can’t copy from them? Fuck off Jenkins.
I’m actively pushing my team to transition to GitHub actions, because it’s just better in every single way.
Ah man, yeah I use it for a much more constrained and very narrow use case. We only use GitHub actions for CI/CD, it can be clunky itself in some aspects but otherwise works great.
Allow me to blow your mind: my Jenkins build calls build.sh because I'm not a fuckin idiot
WHAT THE FUCK IS BUILD.SH, ALL MY CODE IS IN MAIN.C JUST COMPILE THE DAMN THING
If you want to take Cargo away from me, you'll have to pry it from my cold, dead claws. 🦀
I don't think cargo is the problem. it's idiomatic and it's like "build.sh"
Cargo fetches dependencies, runs a variety of build tasks, can build a typical Rust project with little or no build scripting, and is configured with a straightforward TOML file. It's not at all like a hand-written shell script. It's also much more pleasant to use than any other build system I've seen, including shell scripts.
Yeah sure. Try building anything more complex than helloworld.c with a build.sh
More complex build systems are just build.sh calling other build.sh in different configurations and using different software. It's build.sh all the way down.
Ha ha. I work on Bazel (a great build tools, https://bazel.build), and I agree 100%.
God I hate bazel/blaze.
Hey buddy can you step over here, there's a very tall cliff I want you to see
If I break our master build in CI, I get multiple emails and people saying "fix this"!!! I wouldn't have to fix it if you stopped letting people commit directly to master and stopped using git rebase! 😁
top 50 comments