-
Notifications
You must be signed in to change notification settings - Fork 2.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[PROPOSAL] Drone Custom Stage Definitions #2680
Comments
I like the idea a lot! I suppose there could be some sort of community driven but still official Custom Stage Definitions? Just like there are some more official plugins in drone-plugins? |
We currently define the below interface in Drone for the agent to request builds from the server and report back updates. We would move this interface to
|
I REALLY like this approach. That would make Drone even much more flexible and can grow lots of different stage implementations. |
Very exciting!! 😻 @bradrydzewski if you're ever interested in chatting and/or demoing drone in a Tekton working group we'd love to have you :D |
@bobcatfish thanks, I will definitely reach out once we start working on Tekton support 😄 |
I just signed up for your meetings @bobcatfish. I'll try to join and see what you people are up to, since I've been working on the Kubernetes runtime. See you on Tuesday! |
custom stage definitions are now enabled for |
This proposal is to create a new category of plugin for Drone, which I am tentatively describing as Custom Stage Definitions, which are heavily inspired by custom resource definitions for Kubernetes.
Today a pipeline is a series of steps that execute in Docker containers. These pipelines are classified as Docker pipelines. When the
type
field is empty we assume this is the default pipeline type.The goal is to allow additional types of pipelines with their own custom yaml syntax. For example, we could have a knative plugin that uses knative syntax.
kind: pipeline +type: knative
or a pipeline that runs commands directly on the host machine:
kind: pipeline +type: exec
Each custom stage provider would be responsible for parsing the body of the yaml, interpreting and executing the contents. For example:
Kinds
The
kind
field could be used to create stages that do not qualify as pipelines. For example maybe we want stages to handle approvals:or highly customized deployment strategies:
Design
I will begin moving the agent <> server code to the runner-go library and I will create a starter project for creating custom stage operators. You can think of this as, effectively, creating your own Drone agent.
Drone will ship with the default Docker pipeline runner only. All other runners will be community contributed and managed. I will create a separate organization, called drone-runners, to help organize community development.
Why?
I realized that the core Drone team is too inexperienced with Kubernetes and is stretched too thin to offer the Kubernetes runtime. Instead we can open this up to the community, and hand over control, just like we did with plugins years ago. Plugins quickly became one of the defining and most loved features in Drone. I believe Custom Stage Definition will have a similar impact on the project and community.
I envision the community creating all sorts of interesting runners:
The text was updated successfully, but these errors were encountered: