Closed raniejade closed 7 years ago
Sure, Here goes:
I am primarily a server side dev at ThoughtWorks and deal with a lot for DevOps tools almost everyday and specially a CI server. Some of the pain points I see in systems like Jenkins and GoCD are:
Hence bob is what I was thinking. This is VERY new project and haven't really thought it through. Here are the features what I think it should have:
And this is a project born out my frustration and is VERY new. 😄 Any and every help, suggestion is most welcome!
And probably the most important question, why Kotlin:
Wow, thanks for a very detailed explanation. If I understand correctly, plugins will interface against the API? So it doesn't really need to be deployed with the CI server. Essentially plugins are high level abstractions built on top of the core abstractions (tasks, stages, pipelines etc...).
Yes, exactly. In any language and more importantly running on their own processes.
That's cool. When you say running on their own processes those processes are still managed by the CI right?
Both yes and no. Things like fetching resources and feeding it to bob might be managed by bob, but something like deployment plugin which pushes artifacts to S3 for example may run on its own and interact with bob at need. The intention is that plugins can be in different machines altogether and have bob as a synchronization point of sorts.
Also I am envisioning scenarios where there can be multiple CI servers and can distribute and synchronize the work between them. I mean why should the server be this huge monolithic thing and have lots of agents. Have a set of Bobs and they can be a nice build cluster. Hence I'm making bob small and self contained in a single fat JAR.
I'm a bit confused, say I have this deployment process for a website.
How would the interaction w/ bob look like?
Wait, can I build my own CI on top of bob?
Yes. This is more like a CI platform or SDK if you will.
Say you have hosted your source in Github.
from_github:
url: <some url>
on_success: "build_it"
pipelines: [ name: "build_it" stages: [ "compile", "test", ... ] name: "deploy" ]
stage: name: "compile" jobs: [ "minify", "webpack", ... ]
job: name: "minify" tasks: [ "gulp..." artifacts: [ "./build/site_min.zip" ]
deploy_to_s3: creds: api_key: "something" artifacts: [ from: pipeline: "build_it" artifact: "..." ]
and so on. All the top level tags are plugins or some core components
Warning: this is off the top of my head. Nothing is decided yet :)
The intention is that plugins can be in different machines altogether and have bob as a synchronization point of sorts.
I was confused on this part. So plugins can have its own process?
Yes, that's one of the primary intentions. To be language agnostic and not suffer from the issues the plugin may have. Another example would be the UI plugin. That would be its own server talking to bob on its API and displaying the UI to its clients.
So basically build your own CI setup with whatever plugins and tools using (the mostly unopinionated)bob at core to synchronize it all.
It's very interesting, will closely watch this repo :+1: .
Awesome @raniejade Any ideas, contributions and code reviews are most welcome 😄
This has piqued my curiosity, can you share some more details? :)