Incremental rollouts


#1

Say we wanted to release to 1%, 5%, 10%, 25%, then 100% of devices in a gradual rollout. I see that you can create a separate application for each cohort, then git push to each in turn (from this blog post about canarying: https://resin.io/blog/canary-rollouts-on-resin-io/)

The tricky part is that each separate application could get out of sync with the others, and if I’m working on a branch locally I have to switch back to master to push the next stage. It would also be nice to roll back a stage and all previous ones if there’s an issue with the rollout. Is there a better way to do this (e.g. like heroku pipelines)?


#2

I’m not sure I totally understand the setup that you describe. But I believe that these scripts here should be able to show you these sorts of manual release settings, that you can combine with your own logic.

These use specific device UUID’s to set which device to update, but you can combine them with calls to the resin API and get more of that %-wise releases that you mention.

The now deprecated https://github.com/resin-io-playground/resin-stageddeploy was using something like that too, for an example. Please use that for inspiration at most, it was only working for resinOS 1.x, not 2.x, and uses a different update mechanism. The inspiration is more on the API calls side to get lists of devices and update by percentages.


#3

Thanks for the pointer to that repo! Combining environment variable based rollouts with the API should let us do what we want to do.