560 karma · joined August 6, 2014
I work for GitLab (Disaster Recovery / Geographical Replication / Performance, etc)
This has been my experience with rbenv, asdf and all other solutions that relies on shims.
Depending on what you are trying to do (for example running short lived CLI), you will incur into a slightly performance cost because of the bash/zsh/fish shell you need to spawn before running your code. In ruby's case rbenv/asdf adds around 20-50ms (could be more etc depending on your shell and your shells initialization code etc).
People got swatted for less.
If you have access to a repository you can customize the script to do whatever you want, but there will always be a trace tracking it back to you.
There is a discussion about ultimate security (access only when asked) Vs the convenience of self-service.
You can still avoid that by having people use a fork model, or triggering CD from an external project with tight access.
Putting a burocratic process between ICs will only limit their throughput as in Jenkins paradigm.
The better advice is don't hire people you can't trust
It may be possible to use artificial techniques to grow it elsewhere, but I'm assuming it's not economically viable or you get a product with worst quality in the end
The current state is, you either use something that looks like Windows 95 in all platforms, or web app.
What the web made possible is to anyone to create a decent custom UI with little effort. I still remember how messed up was to create a custom component for Java Swing, which I believe is still one of the easiest to do. How would you do that for QT? GTK? WxWidgets? etc
3D printing yourself and using a cheapo CNC can also do the trick... I wonder how hard it is to programmatically generate the STL yourself.
https://docs.gitlab.com/ee/user/project/import/gitlab_com.ht...
hosting CI yourself is equally simple. The worker can be installed with few commands, and with a few extra you can configure autoscalling:
you already can do a lot by writing a bunch of scripts that will be executed on a CI, and just fiddle with differences in like metadata/artifact/how you declare your containers.
and while you are there, you can generate the code CI definitions for more than one CI provider (think of it like "multi-cloud" but for CI approach.