Anyone thought of/is using a cloud development environment?

[POST EDIT: This actually became quite long and went towards a much larger scope than just a cloud ide. Just a warning… lol]

Hi All,

I’ve been recently toying with the idea of integrating a development environment on a server-based (public cloud, private cloud, vagrant box(es)) model…

We all (most) understand the trend on moving to VMs, then vagrant vms, then container based architectures for development (be it running on the local machine or remotely)… I’m quite interested in putting one more item in that "immutable / always accessible / always “adhereing to production standard” enfironment): the IDE…

And I know that many people have their own preferences and I wont go into them… but I myself have preferences and I myself have shifted preferences when something which improved my flow came along… I can see a series of advantages/characteristics which make this a “good” idea, or at least not a trash one :slight_smile:
just a few:

  • Being able to access work independent of your machine being setup “just the way you like it” always - this is a PITA for me… I have OSX and Windows machines I use daily… (and even when I had only windows or only osx), keeping things in sync is a pain… (Atom/Nuclide with settings sync is a sorry excuse which almost works almost always, but I digress)… so just “having an IDE open all the time” is a nice plus imo…
  • It provides ability to work against “workspaces” “environments” “stacks” (or whatever u want to call your apps “ecosystem”) that are always ready and easily syncable to the latest prdouction specs (updated DB version? update your app definition such as what we do in rancher, and everyone who uses the same stack or stack template can receive that)…
  • Local development is possible but brings some of the issues which already exist with them… nonetheless, some cloud ide’s have desktop versions, or desktop “connectors” to help you use even your existing non-cloud ide to work on things…
  • Security (some companies could look into this as a way of keeping a more centralized control?)
  • pair programming, vcs, etc and all the common features arent missing

plus you can integrate the IDE with a deploy/CI process…

So basically my question goes, does this make sense to anyone at all? Has anyone looked at the IDEs now available? Has anyone done something “rancher-related” with it? Is anyone interested in trying to tackle this? I think a catalog which installs one of the available (and widely developed ides like c9, codenvy (or eclipse) che (not quite sure the differences yet), koding, or others could be something really neat.

My idea would be tying this into the VCS system such as Gitlab (which has a mention of adding Koding IDE in their roadmap) and basically getting a “developer center” up… The IDE should support both the writing of code, but also the composition of the dockerfiles. Everything would be stored in VCS (Git for example if gitlab, or even github if be the case, etc)… Containers/Compositions/Bundles would be built and uploaded to the registry (local or public) through the IDE (using docker tools, no need to reinvent)… Git/Gitlab/Github can/could trigger webhooks for CI, and rancher could “host” the development stacks, aware of new versions, or even allowing file changes within a container if be the case (say website development where you may not need a build if you just change an HTML file)…

I started toying with Codenvy/che and it seems to be able to do some of this, not sure how its doing it though… it has its concept of “workspaces” which from what I could see accepts a docker-compose file (so workspace=stack?)… I wonder how difficult it would be to integrate or merge the overlaps and have a one-stop cloud (or local) development, test, staging, production workflow hosted inside rancher…

Its quite ambitious, so I’d start either just editing source-code and commiting from within the IDE and allowing a CI process to do the rest and rancher updating the service (probably manually or from the CI), but ideally I dont see why it wouldnt be able to all be scripted from the same place… ideally culminating in an environment flow from development, to testing, to staging, etc, all the way to production from a single point (well that point is actually rancher), but it would require a bit more in terms of workflows, and its something that an IDE together with VCS system could eventually help narrow gaps with imo…

(approvals akeen to code review, merging causes CI to deploy and so forth, but not just on a development branch…)

Anyways, I guess this is me dreaming big, but I’m going to start experimenting with parts of this, if anyone has done anything (ide, stack creation, image building, etc using tools within rancher itself - not rancher tools, but tools running on a rancher cluster - i’d be interested to hear more… (the basics I get…jenkins for CI, ok, what I mean is integrated some tools to accomplish this more unified workflow).

Let the shooting begin :smile:

PS: before I get 100% shot down, let m just say that althoguh I talked abt the flow all the way to production, I think the first issue to tackle and the one where potentially most is gained is integrating the “code creation” with the “stack creation” for quick and uniform development environments which allow changes on both code and stack easily and with traceability (everything in VCS). Codenvy does this with its workspaces, but I’d like to explore bringing such functionality on top of Rancher as a (series) of services.

1 Like

Sounds a lot like the Eclipse Che https://eclipse.org/che/

Hi @mishak !

Indeed, there is a little bit of feature overlap… In some senses its more like Codenvy’s commercial version of Che, but either way its not really what I’d like…

Che is including their own implementation of “workspaces & stacks” (a.k.a. containers) which you bring up with “recipes” (a.k.a. dockerfiles), which I dont particularly think is an intelligent choice… They also have a lot of catching up to play in order to support everything Docker supports, and even more to what Rancher supports…

After quietly assuming to myself that I wanted nirvana when I wrote the post above, I started investigating some other options… Basically, “che” workspaces could be ok for developer environments, but then I wouldnt have parity between environments… So what I’m trying to do right now is to connect Che or Cloud9 (I read a lot of good reviews abt them so i’m trying them out), simply as an editor… So basically the devs would have an environment within a rancher cluster, and either separately or within the same stack they would have an “editor” stack/service… This would not exist beyond the development phases, and should be a decent initial compromise…

Che is supposed to work with external docker hosts, even with swarm apparently (although from what I gathered in their github it may still be extremely buggy?) so it could be an option to have che generate its “workspaces” on top of rancher… I even thought of letting che create the cnotainers with the rancher metadata so rancher recognizes and adds the internal networking to that container, etc, but without any sort of compose support plus their direction of “having their own format of compose file, own format of xxx” isnt really something i’m interested in as opposed to just the IDE… Apparently its not so easy at this point to uncouple server & ide, but ideally I’ll use (if I go with Che), a “dumb” workspace just to give access via SSH/SCP (for remote development), and the necessary git tools etc to integrate into our flow with gitlab.

I have already gotten cloud9 to work using volumes-from recourse in docker-compose files, but this wont work with rancher… When using a single docker-compose “stack” on a single machine its easy to get code changes from one volume to the other. In rancher since volumes-from doesnt work “correctly” (correctly as per the way it works in vanilla docker, please dont flame me lol) I cant really have a single data container shared by multiple containers (sidekick limitation discussed already ages ago)… also there is an issue of where the IDE container is located vs where the data or execution container is in terms of host… I’m thinking the only way to get around this is by maybe using a glusterfs on the development environment so we can have “live chanhges” from the IDE to the necessary execution containers (php, webservers,etc)… Any other ideas? (other than that I’d have to push changes to git or at least some central location and re-pull… probably too time consuming)…

I think I may give the gluster approach a go, although I would strip that too out once its past the dev stage…