lispyclouds / bob

This is what CI/CD should've been.
GNU General Public License v3.0
2 stars 0 forks source link

Details #1

Closed raniejade closed 7 years ago

raniejade commented 7 years ago

Bob is a minimal and modular CI/CD engine running entirely as an API.

This has piqued my curiosity, can you share some more details? :)

lispyclouds commented 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!

lispyclouds commented 7 years ago

And probably the most important question, why Kotlin:

raniejade commented 7 years ago

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...).

lispyclouds commented 7 years ago

Yes, exactly. In any language and more importantly running on their own processes.

raniejade commented 7 years ago

That's cool. When you say running on their own processes those processes are still managed by the CI right?

lispyclouds commented 7 years ago

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.

lispyclouds commented 7 years ago

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.

raniejade commented 7 years ago

I'm a bit confused, say I have this deployment process for a website.

  1. Run the unit tests
  2. Build (if previous step pass)
  3. Run automation tests using artifact from previous step (deploy to staging environment)
  4. Deploy to production (if previous step pass).

How would the interaction w/ bob look like?

raniejade commented 7 years ago

Wait, can I build my own CI on top of bob?

lispyclouds commented 7 years ago

Yes. This is more like a CI platform or SDK if you will.

Say you have hosted your source in Github.

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 :)
raniejade commented 7 years ago

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?

lispyclouds commented 7 years ago

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.

lispyclouds commented 7 years ago

So basically build your own CI setup with whatever plugins and tools using (the mostly unopinionated)bob at core to synchronize it all.

raniejade commented 7 years ago

It's very interesting, will closely watch this repo :+1: .

lispyclouds commented 7 years ago

Awesome @raniejade Any ideas, contributions and code reviews are most welcome 😄