API-first design - Goals: We want to make the Go Server UI interact with the backend through APIs, even more than it does now. The design of APIs would be such that the same could be used by any 3rd party to interact with Go Server. This would basically mean Go Server can run in head less mode allowing developers to write their own UI. The order in which we would like to go about doing this:
API for pipeline creation - CRUD for group, pipeline / template, stage, job, task (along with env. var & parameters) config
API for pipeline dashboard & environment dashboard - show latest pipeline instances, trigger pipeline (along with specific revisions & env. var), pause pipeline
API for search of pipeline based on parameters (checkin - SHA, message, author / pipeline - counter, label)
Better support for Tests - Goals: The biggest time consumer in any CI/CD setup is running tests. It has become fundamental practice to write tests and every new framework supports writing & running tests first. Which means there are more tests to run & make sense of the results. We want to provide features to ease the pain.
Parallelization - out of box support for TLB? custom runner for each type (junit, rspec etc.) which contacts Go server asking for next test to run?
Real time reports (how many ran, how many failed & which ones failed - while the job is running)
Understand and provide pluggability for all kinds of test reports / migrators for other test report formats
Test metrics - make sense of test failures. possibly list flaky tests. Run tests in failed first order etc.
Dashboard Revamp / Rewrite - Goals: People spend most of their time on Go on dashboard page. With the number of pipelines & users increasing, the dashboard page needs to be optimized for performance, while giving as much info as possible in the best possible way for its consumption.
rewrite dashboard to hit API instead of getting the whole markup.
Agent improvement - Goals: Improve Agent Server communication to reduce the problem of too many agents pinging the server at same time during start up & too many requests (1 ping + 1 work request) from agents.
Websocket - move from polling to server push model
Agent Management - Goals: In a CI/CD setup agent management is the hardest part. Remembering what is installed on what agent, knowing when an agent goes down, accessing agent machine to do some changes are a few things that would like to give first class support for.
Notification of status when a new agent is available (pending) or goes missing
Capabilities / Resource (add, edit, remove) - detect software available on agent along with versions & auto update resources of agent
Key management - manage ssh keys
Tasks:
Biggest hurdles will be:
I like this list too. Couple comments:Re: #3 Dasboard Revamp/ RewriteI like Go a lot for its focus on visibility of the pipepline state. However, once you have more than a dozen pipelines it's almost impossible to understand it at a glance from the pipelines page. In my opinion the great strength of Go is the Value Stream Map. So make *this* the primary page. Also, making value stream maps a primitive to work with in general, would be a great improvement. I have a few other feature requests I'd add from that point of view:VSM Feature Requests:1) A VSM Page (tab) in the view. Some of us have more than 1 VSM and being able to see them all at once in some form would be great. I'm not necessarily saying show all the expanded VSMs at once, but maybe a single tile with a progress bar: when you click on the progress bar, it can show the expanded VSM. This would be *awesome* and is my biggest request of Go at the moment.
2) Make the VSM a first class citizen in Go. In other words, I should be able to create a VSM and add custom pipelines or pipeline templates, exactly like I do for a pipeline with Stages, Jobs, and Tasks. It would be super-powerful if I could define my VSM at a VSM level, because then I can very quickly produce a high-level VSM that I can show to business people for approval and then flesh out the details of the pipelines later once I've gotten approval and funding. As it stands right now, the VSM is a great tool to see where you *are* but I want to use it also define where I *want* to be.
Re: #5 Agent ManagementThis is interesting, but not that great of an idea, in my opinion. Agent management is a tricky topic and you'll never make it work right because people will want completely different things. I've written some agent management tools and it just gets hairy really quickly. The notifications are a nice idea, but resource management is a nightmare.In fact, we are building some tools that abstract away a lot of this pain. Specifically, we have built a dynamic agent pool that queries the Go server for the agents' status and scales the pool up and down based on some simple heuristics. So if we have a pipeline that runs and checks our agent states. If we need more machines, it calls into EC2 and makes a new instance, installs the Go agent and a few pre-reqs and adds it to an environment. A subsequent pipeline runs a simple build against that machine to make sure it's working and then adds it to the official environment pool.The resource management is still the tricky part so we handle this by making our resources Docker images. Then we can just call 'docker run <image>' and it will pull the necessary resources and run them from our private (or could be public) Docker registry. This wouldn't work for Windows (I suppose if you had an SA license, you could use App-V to do a similar approach).So my requests for Agent Management to make this easier would be something like:1) Auto-scale triggers: e.g. let the admin define a trigger that sends a signal when it happens. e.g. "If number of idle machines drops below 2, fire AGENT_POOL_LOW signal flare" We can then write a receiver for that signal and, say, create more EC2 or Azure instances or whatever. And we could define another trigger that says, "If number of idle machines goes higher than 5, fire AGENT_POOL_HIGH signal flare". You can imagine these triggers potentially becoming more complicated (e.g. scaling machines with time of day, day of week, incoming requests, number of pipelines in progress, etc.) so that you could set up some really efficient predictors of machine usage. I would just ask that the Go server would run the auto-scale trigger every X minutes where X is configurable and then acts accordingly. This would give us great hooks to then go manage our agents pools easily. Note, I'm not asking Go to create/manage AWS or Azure instances for us. That might be interesting for, but I feel like it's a rabbit hole and VM create calls are all relatively easy. But if you try to solve it generically for everyone it would be too hard to be worth it, plus I would also want to hook it up to my own VM farm or private cloud provider that wouldn't be on the list.
--
You received this message because you are subscribed to the Google Groups "go-cd-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to go-cd-dev+...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Just to weigh in a vote with regards to the roadmap, I think the API is a huge deal. We're making some important decisions on which CD tool we're going to use at my company (SurveyMonkey) by evaluating many tools and my favorite is GoCD by far, and that's what I was planning on advocating for. We have a pretty large code base with many services that we want to deploy using our next CD pipeline tool. But then I wanted to script a few thing as a proof of concept to show off how easy it would be for us to migrate to Go by using its API but I then realized that there were no CRUD APIs, which is going to be a deal breaker for us. :(
I absolutely love GoCD's philosophy on how it wants to be able to run a headless pipeline eventually but we won't be able to use Go because of the lack of CRUD APIs, and switching CD pipelines is not something you do easily so we'll probably never get to use Go even if that feature landed a few months from now (unless you tell me there a branch pending for merge that we can start playing with).
So if I were to prioritize on to getting serious GoCD adopters, I'd make the CRUD APIs a top priority as it's so fundamental IMO.
--
Just to weigh in a vote with regards to the roadmap, I think the API is a huge deal. We're making some important decisions on which CD tool we're going to use at my company (SurveyMonkey) by evaluating many tools and my favorite is GoCD by far, and that's what I was planning on advocating for.
We have a pretty large code base with many services that we want to deploy using our next CD pipeline tool. But then I wanted to script a few thing as a proof of concept to show off how easy it would be for us to migrate to Go by using its API but I then realized that there were no CRUD APIs, which is going to be a deal breaker for us. :(
Just to weigh in a vote with regards to the roadmap, I think the API is a huge deal. We're making some important decisions on which CD tool we're going to use at my company (SurveyMonkey) by evaluating many tools and my favorite is GoCD by far, and that's what I was planning on advocating for. We have a pretty large code base with many services that we want to deploy using our next CD pipeline tool. But then I wanted to script a few thing as a proof of concept to show off how easy it would be for us to migrate to Go by using its API but I then realized that there were no CRUD APIs, which is going to be a deal breaker for us. :(
I absolutely love GoCD's philosophy on how it wants to be able to run a headless pipeline eventually but we won't be able to use Go because of the lack of CRUD APIs, and switching CD pipelines is not something you do easily so we'll probably never get to use Go even if that feature landed a few months from now (unless you tell me there a branch pending for merge that we can start playing with).
So if I were to prioritize on to getting serious GoCD adopters, I'd make the CRUD APIs a top priority as it's so fundamental IMO.
I suggested a dashboard which will show VSMs for pipelines that you care about as carousel. There are a few issues with that like performance etc. Will think more on these lines &
Something like this thread?
Re: #5 Agent Management ...
There is talk about this internally. There should be a thread discussing this sometime soon.
Here’s my late contribution…I’m loving the API first design—this is absolutely the right approach. We would like to see APIs made available for clients to subscribe to events, so that people can develop plugins which integrate more deeply with Go’s inner workings. For example:- Pipelines: build being scheduled, job completion, stage completion, state transitions (failed, passed, building…). These should include relevant information around commit messages, versions, repos, users…
- Agents: agent being used, agent becoming free, agent being added, agent being disabled, aggregated numbers of agents available based on specified resource combinations (to monitor whether more or less agents are required)…
- Monitoring: HTTP response code levels, response times percentiles grouped by code or verb or similar, amount of time jobs have to wait for agents…Going with an event model for things like this could reduce the amount that other systems have to poll API feeds, potentially reducing the workload significantly.Improving the performance around many agents calling back to Go also sounds like a great idea, having seen how many requests of this type come in (although they seem to be very efficiently handled).The dashboard seems like a very difficult feature to complete to everyone’s satisfaction. I think improvements can absolutely be made (particularly with hundreds of pipelines), and hopefully with the API first approach it will be possible to efficiently create your own dashboards without hundreds and hundreds of expensive API calls. I think there are some big wins on usability, such as collapsing search results by pipeline groups so you don’t have to scroll through pages and pages of empty groups would be good, and it would be great to be able to get some feedback on clicks and saves in the admin interface (without having to jump into the developer console ;) ).Agent management and test support seem okay to us at the moment, although it would be good to be able to see more useful information about the state of the agents—the agent version, other disk volume levels etc.I think more and more our teams are going to become interested in testing Git branches, and being able to have one pipeline config automatically testing new branches would be awesome
Notification end-point should be available in next release. It has stage schedule & completion call backs. We will be adding more events in future releases.
I've raised topic connected to #5 and would like to ask if my usecase is part of this solution.
I hope this makes sense, if not let me know I will try to explain more...
--
You received this message because you are subscribed to the Google Groups "go-cd-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to go-cd-dev+...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
I like the idea of elastic agents but it really isn't that hard to implement.
I wrote a relatively simple python script that does so. The trick was querying for idle machines and adding machines when we hit a certain low threshold and deleting when it gets too high. We only have 1 machine type and so we dont have to think about machine resources. We use Docker to deploy most dependencies and to make sure the machines stay clean from testing.
The problem is actually resource management, environment manipulation, and proving newly created machines.
I would advise against building (yet another) auto scaler when so many exist. I think rather than building a cloud provider plugin, you should allow for Orchestration plugins like Mesos, Kubernetes, Puppet, etc. They already solve the machine management problem. Please don't build another.
I love the feature idea; we've built one in house (I can share it of it's of interest to anyone), but I'd rather see the investment in integrating existing tools.
josh
from my mobile
Subject: Re: Feature list / Roadmap for Go
You received this message because you are subscribed to a topic in the Google Groups "go-cd-dev" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/go-cd-dev/EEMh7VLZV7I/unsubscribe.
To unsubscribe from this group and all its topics, send an email to go-cd-dev+...@googlegroups.com.
still reflects the current thinking on this matter, I'd have a couple of suggestions regarding the design, mainly simplifications. I don't know, however, at what stage this is nor whether someone has started implementing anything yet.I've done some initial prototyping and I think we can make do with just the notifications API (stage-status) and querying Go via the GoAccessor. Of course additional hook methods would be welcome. I'm not (yet) familiar with the codebase to know how easy would those be to add.Comments?(BTW, great to see the massive improvements in features and user traction in the past two years. I'm very pleased.)