On Thu, Nov 21, 2013 at 6:45 AM, Adam Spiers <aspi...@suse.com> wrote:

> Darrel O'Pry (darrel.o...@gmail.com) wrote:
>
> > I hear a lot of knee jerk throw everything out and start over
> undertones. I
> > don't that that is a wise idea as it  loses history. One of the things I
> > love about git is history. Also being an agile developer I focus on
> > continuous improvement and rarely like to start things over.
>
> Exactly Darrel!  I understand where the instinct for "let's start
> afresh" comes from, but really it's only sweeping ugly stuff under the
> carpet.  And it's not just git history we'd risk losing - it's issue
> history, wiki history ...
>

It also doesn't address the workflow issues that created the current state
of things...  It's more important to address a possible cause rather than a
symptom.

<snip>

>
> > 2) On boarding new developers.
>
<snip>

> > Beyond that we go our of our way to make development across platforms
> easy.
> > We typically use virtual box and vagrant as a starting point to normalize
> > everyone's development environment and share the git checkout with the
> > vagrant.  This way everyone is building on the same build environment.
>  We
> > typically share the git checkout from the VM host to the build VM. The
> > build, run, test within the VM. You just expand the number of vagrants
> you
> > use to test on other platforms. I tend toward veewee if I need to build
> and
> > track any sort of super custom vagrant base boxes.
> >
>
> Standardising the dev environment is a great idea.  There's still some
> remaining work to do in order for this to be SUSE-friendly though.
> Most SUSE-oriented folk prefer KVM to VirtualBox, and last time I
> looked, vagrant's support for kvm / libvirt still needed work.  This
> would be well worth completing.  Secondly, building openSUSE-based
> ISOs is still a work in progress (I worked with John on this last
> weekend).
>

This is a situation where I feel the needs of the project to be accessible
as a whole, should override the preferences of a few participants.
VirtualBox is a free cross platform desktop virtualization environment. It
is available to windows, mac, and linux developers. It is accessible for
both corporate teams and private hackers. The public shared project should
focus on the most accessible development tools possible.  Try to cater to
kvm, vbox, vmware will just add unnecessary complexity to on boarding a new
developer.

It's totally doable, but it means that new developers have more decisions
to make to get started on the project and someone has to spend time
planning, testing, and maintain support for multiple virtual box providers.
It means time will be spent debugging whether the problem is the
virtualization layer or crowbar. Time better spent making crowbar more
awesome.

If the team at SUSE or any other team is really insistent on maintaining
another development environment, they should be welcome to fork and manage
their own tooling to convert the vboxes to kvm. Alternatively, get involved
in the vagrant and veewee communities to streamline the generation and
publishing of consistent virtual machines for multiple virtualization
providers.

Even then tools like veewee don't make much sense in a developer's
workflow. I've tried fitting things like veewee into developer workflows
with the idea of letting everyone build images from preseed and
kickstart... Too much time is spent building images and drinking coffee for
simple package additions.

The approach our teams use is to build minimal vboxes using veewee. We
mostly use debian/ubuntu so we switch the tasksel from standard/server to
minimal to reduce the OS footprint in the VMs. We also remove ruby, chef,
and puppet to avoid conflicts with whatever we'll be installing. We store
the veewee definitions in our code repositories so they're tracked with
code, but we don't require developers to build the vboxes. We build and
publish them to a private website where our team can access them.  We don't
do any configuration via veewee except setting up ssh and public key access
(necessary for vagrant). We also use private keypairs in lieu of the public
vagrant keys for our private projects.

All of the dev environment configuration is handled by vagrant provisioning
shell scripts.. typically config.vm.provision "shell", path:
"bootstrap.sh".

There is of course a need to expand on this to build a dev environment for
a project like crowbar that needs multiple vm for building and needs to
setup a rather complex testing environment with mutiple vms. The nice thing
is you can also ship a testing environment with vagrant and the same boxes.
This makes it possible to

vagrant up dev
vagrant up ubuntu12.10-admin
vagrant up bare-node1
vagrant up bare-node2
vagrant up bare-node3
vagrant up bare-node4

Which could all be wrapped up in a grunt, make, rake, shell script task...
There could even have a grunt watcher kicking of environment re-builds and
test locally on commit. It would probably be wise to expand testing to KVM
and other virtualization providers and testing stacks...

When we've helped clients implement deployment and testing of other
opensource projects in private environments with more rigorous testing and
QA requirements, We've created  a separate internal deployment repository
that includes the upstream code as a sub-module and provides the project or
implementation specific continuous deployment pipeline around the existing
public project tooling.

Feel free to reach out directly if anyone wants to implement this stuff.
I'm glad to help if people are interested in the community can agree on a
direction, but my time to contribute actual code to open source projects is
limited by my own consulting practice. We've also been unfortunately lax in
building model repositories as starting points, and I'm unable to share
examples of our client work. I do have an interest in testing out tooling
and workflows in lots of different development environments and settings.
 Crowbar is a pretty complex case from a continuous deployment perspective
and the virtual development to bare metal deployment is a an important use
case to work with.


> 3) Maintenance
> >
> > We use jenkins extensively to review our pull requests. We do a number of
> > smoke tests including linting to enfoce code style, fxcop/sniffing/etc to
> > look for common code mistakes, code coverage. We lean heavily on peer
> > review of pull requests. Our team is distributed and we don't always have
> > the luxury of pairing, instead we do a code review with each pull request
> > that includes a developer on the project and a developer from another
> > project. It serves to cross train, and have someone less familiar with
> the
> > project who will not take the knowledge one develops writing and working
> on
> > the code for granted.
>
> +1.  Of course Crowbar doesn't use Jenkins yet, but it probably could
> in the future if we reduced the number of git repos and wanted to
> switch to it (I'm not religious either way - github is good enough for
> our code reviews IMO).


We actually use GitHub for everything. Jenkins is pretty easy to integrate
with GitHub and setup to update your pull requests with testing... We run a
Jenkins server per GitHub repository in the cloud and run our build agents
on physical hardware with virtual box and vagrant available so we can do
all of our unit testing inside the same development environment as the
developers without having to do a lot of customization in our build farm to
support projects.
_______________________________________________
Crowbar mailing list
Crowbar@dell.com
https://lists.us.dell.com/mailman/listinfo/crowbar
For more information: http://crowbar.github.com/

Reply via email to