Giter VIP home page Giter VIP logo

bob's Introduction

Bob the Builder

CircleCI License: MIT project chat

What CI/CD should've been.

Most CI/CD tools are too opinionated and do too much. Bob follows the UNIX philosophy of doing one thing and doing it well, and the EMacs/LISP like philosophy of small core with external extensibility, and strives for simpler, decomposed and hence more composable and unbundled design. For more information, see Why Bob

Getting Started

To build and run your pipelines, check out the Getting Started guide.

Overview

Bob's API (accessible entirely through HTTP) enables a core set of CI/CD features. The following are the only concepts that Bob is opinionated about:

  • Step: Direct commands (like a shell command, pytest, etc)
  • Pipeline: Ordered series of steps
  • Environment: Key-Value pair associated with either Steps and/or Pipelines
  • Resource: Things (like source code or artifacts) consumed by Pipelines
  • Artifact: Something produced by a Pipeline

The following services form the core cluster:

All of these services live, breathe, and deploy from their own section of this mono-repo. Post-deployment, they are coordinated via a central persistent queue. Read more about Bob's Architecture.

Join the conversation

Please start a discussion on literally any topic and we are happy to help and learn from each other!

For a more Clojure specific discussion there we also have a Clojurians Slack channel.

Happy Building!

License

Bob is Free and Open Source and always will be. Licensed fully under MIT

bob's People

Contributors

aldosolorzano avatar amexboy avatar anupriyajo avatar emgrasmeder avatar jarohen avatar josephkiranbabu avatar josephnuthalapati2244 avatar juhmelo avatar lispyclouds avatar prachisr avatar timokramer avatar yurii-cliqz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bob's Issues

MUCH better site for newcomers.

As a newbie and/or contributor to Bob, the user should be able to understand the rationale behind Bob, successfully navigate the code base and can easily contribute and improve the project.

Checklist:

  • Prepare an architecture diagram
  • Improve README to have more relevant info
  • Prepare a gh-pages branch and have a proper web page
  • Document code further

Bob crash recovery

  • How would bob recover in case of one of the nodes going down during a build?
  • What happens to the dangling build still in running state?
  • If thats to be marked as failed, who should be doing that?
  • More questions?

Externalize Artifacts

Artifacts should be able to specify a relative path in the context of a resource.

Hammock time for OS specific executions

How should builds which depend on specific OS features like MacOS/iOS builds which need OS specific build tools and features be done?
These are platforms which do not support Docker natively yet.

Create the Plugin mechanism

Bob plugin requirements:

  • Should expose a REST API
  • Should have the following paths:
    • GET /bob_request: Params to be encoded as K-V pairs. Returns a
      resource (typically a zip file) with code 200 else 400.
    • GET /ping: Health check endpoint, should return 200 if fully functional.

Bob requirements

  • Should expose a /plugin/register/name endpoint where the plugin
    registers itself with a POST request where name is a
    unique name without spaces and a JSON body having the following:
    {
      "url": "fully-recheable-url-with-protocol"
    }
    Bob should return 200 if successfully registered else 409 in case of conflict.
  • Should expose a /plugin/unregister/name endpoint where the plugin
    registers itself with a POST request where name is a
    unique name without spaces. Bob should return 200 if successfully removed
    and this should be idempotent
  • Should expose a /plugins endpoint answering a GET request which
    lists all registered plugins

How to continuously deploy Bob itself?

Currently Bob executes the build on one of the many nodes in a build cluster. During a deployment this node will be taken down along with its potentially running build(s).

We need to come up with a way to continuously deploy new versions of Bob while not affecting the running builds.

Make REST paths more semantic

Add descriptive paths to make values more readable.
eg for logs:

http://bob:7777/api/pipeline/logs/group/dev/name/test/run/1/offset/0/lines/50

Make it work with JDK 13+

Currently due to the issue docker-java/docker-java#1245 in docker-java which is used by clj-docker-client which is the lib for Bob, its not possible to run Bob on JDK 13.

Release a new clj-docker-client when a fix is available and make Bob great again!

Health check for external systems

  • Add health checks for registered resource providers and artifact stores
  • Maybe do an automatic heartbeat at an interval to all subsystems and log for failure?

timestamp logs?

Hammock for moving to a record per log format, easier to timestamp and stream logs.

Provision for multiple Artifact Stores

Currently Bob only supports a single Artifact Provider for simplicity reasons.

But in the case of federating Bobs, the need to multiple Artifact stores may arise as like in the case of the need to store artifacts in different places/regions/providers.

Implement Internal Resources

Implement Internal Resources as a way to signify the dependency of a pipeline to another.

Maybe implement this as an artifact fetch internally?

Also auto-trigger upstream pipeline(s)?

Improve health checks for Bob

Check all sub systems on GET /api/can-we-build-it

Checks:

  • Docker is reachable and anwsers positively on ping
  • H2 is operational

Implement 'password' authentication for Bob

Implement password-only authentication for Bob. As an execution engine, Bob should not care about user management. But to provide one layer of security Bob may be configured with a list of passwords that can be used to access Bob's apis.

Cleanup after a build

Now that Bob core is stateless, the dangling images and containers can be safely removed to conserve (LOTS OF) space.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.