Meant to throw this out yesterday direct to Rainer since it's not a quick/easy solution but the first time you see it (though most likely already have) it's sort of an "wow" moment...
http://www.ebaytechblog.com/2014/04/04/delivering-ebays-ci-solution-with-ap ache-mesos-part-i http://www.ebaytechblog.com/2014/05/12/delivering-ebays-ci-solution-with-ap ache-mesos-part-ii http://www.youtube.com/watch?v=VZPbLUJnR68 We are just working on this internally ourselves as part of a larger cloud initiative including docker. It's a lot to come up to speed on from scratch, but since beside CI/CD I routinely hear "it's hard to setup environments" this could pay huge dividends later...since you would just leave the underlying bare metal/VMs alone and deploy/start/stop/delete containers as needed. Docker files can be tracked in source control, and builds fired on commits, so end-to-end pipeline is easy once the plumbing exists. Unfortunately I can't volunteer anything yet, because I've just moved past learning phase and putting together a project plan before starting a PoC...after that I might have something more useful than the above links to share. :-) -----Original Message----- From: Rainer Gerhards <[email protected]> Reply-To: rsyslog-users <[email protected]> Date: Friday, October 31, 2014 at 3:53 AM To: rsyslog-users <[email protected]> Subject: Re: [rsyslog] CI - was: Feedback Request: do we still need -devel versions? >Let me get straight to the beef (nun pun intended): This sounds all really >great. Is anyone willing to do the initial work of creating a couple of >tests and integrate them into the rsyslog process? > >Rainer > >2014-10-31 7:35 GMT+01:00 singh.janmejay <[email protected]>: > >> Im trying to see these problems in the light of CI. >> >> On Fri, Oct 31, 2014 at 10:50 AM, David Lang <[email protected]> wrote: >> >> > We already have make check being run daily. So it's not on every >>commit, >> > but given the time it takes to run and the pace of merging new >>features >> > into the master tree, daily should be just fine. >> > >> > The problems that we run into are not easy for the system to find. As >>I >> > understand it, we have a few noticable pain points. >> > >> > 1. distro specific problems. >> > >> > The CentOS boot problem for example. >> > The ongoing SELinux/etc issues that we run into are another >> > Systemd is going to be more common in the future (and it's a moving >> > target) >> > >> >> My team had to solve a similar problem with one of my ex-employers. Our >>CI >> setup was composed of machines running various environments. We had >> machines running CentOS, Windows, Solaris etc. All of these machines >>were >> running CI-agent/worker and the build was configured to do exactly the >>same >> thing on each worker. So we basically found issues before releasing >> GA-versions provided we had all relevant versions of environments >>running. >> This kind of infrastructure would require several machines/VMs, each one >> running one supported environment. But this also requires some budget to >> finance the setup. >> >> The only other option seems to be what -devel releases are supposed to >> facilitate, but if we had limited success with that, it can't be >>counted as >> a real option. >> >> >> > >> > 2. difficulty in setting up a repeatable test environment. >> > >> > Output to Oracle or ElasticSearch are two examples. The difficulty >>is >> > setting up the external data store in such a way that it can be >> populated, >> > tested, and then reset back to the known good state. >> > >> > Other examples are connections to the various MQ systems. >> > >> >> Common/recommended practise here is to make each tests stateless. Most >> language/platform specific testing-frameworks provide a notion of setup >>and >> teardown. Large end-to-end integration tests usually have elaborate >> setup/teardown steps which involve truncating database tables, deleting >> elasticsearch indices, draining/purging relevant external queues etc. >> >> But most value is derived from having 2 levels of tests. >> >> The make-check tests that we have are end-to-end integration tests. Such >> tests generally face external-dependency based flakiness problems, until >> setup/teardown are done very well (like they aggressively re-try failed >> operations etc). >> >> A lower level of test would be unit-tests, which test individual >>functions, >> or set of functions rather than testing end-to-end behaviour of rsyslog. >> This is where tools such as google-test, cppunit etc come in. These >>tests >> are usually quicker to write as they don't involve elaborate >>orchestration. >> For instance, regex-property-extractor could have dedicated tests to >>see if >> it handles groups well, it handles char-classes well etc. With such 5 - >>10 >> tests guarding different behaviours of regex-property-extractor, we >>should >> have enough confidence that it works standalone. The only thing >>integration >> test needs to check is, does it work well when used end-to-end, for >>which >> one test with simple input and output exercising match and submatch >> features would suffice. Trouble starts when one tries to test all >> combination of features through integration tests, which is usually >> prohibitively expensive (not just in terms of running-time, but >> writing/maintaining overhead too). >> >> >> > >> > 3. (extending #2) Contributed modules tend to be especially bad here. >> They >> > tend to be written for specific cases and have heavy depenencies on >> > external components. Without assitance from someone who knows those >> > external components well, setting up a good test is _hard_ >> > >> >> Yes, writing integration tests involving multiple systems is painful. >>The >> solution is to bank a lot more on unit-tests for functional correctness >>and >> only write a few end-to-end tests to validate that integration points >>work >> well with each other. Such a test would fail when a new version of >> elasticsearch changes semantics of a certain API, while all unit-tests >> would keep passing. >> >> Also, large amount of functional-testing can be done without involving >> external systems by using mock-endpoints. For instance, think of having >>an >> endpoint which receives elasticsearch bulk api payload and lets you >> validate it was well-formed and semantically correct. This test won't >>fail >> if elasticsearch changes its API, but it'll fail if anything in >> implementation misbehaves, allowing one to catch large set of bugs >>easily. >> End-to-end integration tests are then only required for the last-mile. >> >> >> > >> > 4. (extending #2) configuring modules can sometimes be hard. >> > >> > The GnuTLS problems are a good example of this sort of thing. Even >>when >> > tests exist, that just means that those particular configuations work. >> > People trying to use different features of the module (or in this >>case, >> the >> > underlying library and certificates) run into new problems. >> > >> > >> Again, unit-tests allow one to test one feature standalone very easily. >>So >> generally I'd write tests for each feature working alone involving >>minimal >> set of features, and then cover bad combinations as they surface(or as >>we >> expect them to surface). >> >> >> > >> > #1 needs more people running the tests, and just trying to use the >>system >> > on a variety of situations. >> > >> > #4 needs documentation and more tests written. >> > >> > Rainer does a pretty good job at testing things before they hit the >> master >> > branch. While I was working at Intuit building their logging systems >> out, I >> > was very comfortable running custom builds from git in production with >> just >> > a short amount of 'smoke test' time. I wish all projects had as good a >> > track record. >> > >> > We really don't have that many real bugs reported, and the vast >>majority >> > of the problems that we do run into tend to be race conditions and >>other >> > things that are fairly hard to trigger. That doesn't mean that we >>don't >> > have occasional problems. The segfault bug that a handful of people >>have >> > reported recently is an example of that, but the fact that it's so >>hard >> to >> > duplicate means that automated testing isn't likely to help a lot. >> > >> >> I have had some amount of success in guarding regressions with >> race-conditions in the past. It generally involves one big ugly test per >> race-condition which uses semaphores and wait/notify mechanisms to make >> code run in a certain way which is known to reproduce the problem. >>However, >> this won't help in discovering potential/new race-conditions. In TDD >> (test-driven-development) style of working, people write tests for new >> features that involve complex concurrency concerns before/while writing >> actual code. The idea is to enumerate as many race-conditions as >>possible >> and cover them with tests. This approach is not bullet-proof, but it >>works >> in most cases. >> >> >> > >> > David Lang >> > >> > >> > On Fri, 31 Oct 2014, singh.janmejay wrote: >> > >> > Im unsure if I have understood you correctly, but you seem to be >> thinking >> >> of CI as a way of writing tests(like a testing framework, eg. >> google-test, >> >> make-check etc). >> >> >> >> But actually CI is a process(not a tool/framework). I guess this is >>the >> >> best source of information about it: >> >> http://en.wikipedia.org/wiki/Continuous_integration >> >> >> >> So having a CI process in simple terms means that the >>integration-branch >> >> (which happens to be master in our case) and all the other long-lived >> >> branches such as feature-branches that live for a few days/weeks, >>should >> >> be >> >> monitored by an automated build process. >> >> >> >> This build process would trigger 'make check' for every new commit >> (people >> >> often use git-push based post-update hook to notify build-server). >>This >> >> build would be reported on a CI dashboard, which tells people if the >> build >> >> was green or red. >> >> >> >> CI servers also go one step further and support output-artifact >> >> integration >> >> so developers can see which tests failed, why they failed etc. >> >> >> >> So no changes are required to the way rsyslog codebase is right now. >>We >> >> have a directory full of tests, we have a command that returns >>non-zero >> >> exit code for failing tests and this setup is sufficient for us to >>setup >> >> an >> >> automated build process. >> >> >> >> We should check if travis can run 'make check' for us. >> >> >> >> >> >> On Thu, Oct 30, 2014 at 8:38 PM, Rainer Gerhards < >> >> [email protected]> >> >> wrote: >> >> >> >> 2014-10-30 13:35 GMT+01:00 singh.janmejay >><[email protected]>: >> >>> >> >>> +1 for testsuite and CI. >> >>>> >> >>>> >> >>> I tried to get a quick glimpse at CI, but not only rsyslog doc is >>full >> of >> >>> acronyms and references that talk only for those in the field ;) >> >>> >> >>> Can someone tell me in quick words how in CI a test to do this looks >> >>> like: >> >>> >> >>> - spin up a rsyslogd listener instance "LST" >> >>> - spin up a rsyslogd sender instance "SND" >> >>> - make "SND" send a couple of thousand messages to LST >> >>> - stop both instances *when work is finished* >> >>> - count if LST did receive all messages and did so in correct format >> >>> >> >>> This is one of the basic tests in the current rsyslog testbench. >> >>> >> >>> I would appreciate if a control file for CI could be provided, so >>that >> I >> >>> can judge the effort that's to be made if I were to convert to that >> >>> system >> >>> (it sounds interesting). Is there some volunteer who would migrate >>the >> >>> current testbench and educate me ... in the way James has done this >>for >> >>> the >> >>> rsyslog-doc project? >> >>> >> >>> Thanks, >> >>> Rainer >> >>> >> >>> >> >>> +1 for time based releases. >> >>>> >> >>>> It'll be valuable to have adhoc minor/micro releases. Release >>feature >> by >> >>>> feature or few features/fixes at a time type of thing. >> >>>> >> >>>> -- >> >>>> Regards, >> >>>> Janmejay >> >>>> >> >>>> PS: Please blame the typos in this mail on my phone's uncivilized >>soft >> >>>> keyboard sporting it's not-so-smart-assist technology. >> >>>> >> >>>> On Oct 30, 2014 6:01 PM, "Thomas D." <[email protected]> wrote: >> >>>> >> >>>> Hi, >> >>>>> >> >>>>> +1 for an always working "master" branch. >> >>>>> >> >>>>> Do your work in feature branches. Only merge when you think the >> changes >> >>>>> are ready. Don't merge when you think "I am ready, but this needs >> >>>>> >> >>>> testing". >> >>>> >> >>>>> >> >>>>> Regarding the testing problem in general: I would stop adding new >> >>>>> features for a while. Spend more time in improving code quality. >> >>>>> Try to find/create a working test suite. There will always be the >> >>>>> problem that nobody will test your stuff. So you need a way to >>write >> >>>>> tests. Yes, creating a test suite will take some time. But in the >>end >> >>>>> >> >>>> it >> >>> >> >>>> will improve the software quality and boost your development. >> >>>>> Remember that you can use CI for free with GitHub. Every pull >>request >> >>>>> could be automatically tested for you... >> >>>>> >> >>>>> >> >>>>> +1 for a time-based release approach. >> >>>>> >> >>>>> >> >>>>> PS: Debian Jessie will freeze at 23:59 UTC on the 5th of November >> 2014. >> >>>>> Just a reminder if you want to see some of the recent changes in >> >>>>> >> >>>> Jessie... >> >>>> >> >>>>> >> >>>>> >> >>>>> -Thomas >> >>>>> _______________________________________________ >> >>>>> rsyslog mailing list >> >>>>> http://lists.adiscon.net/mailman/listinfo/rsyslog >> >>>>> http://www.rsyslog.com/professional-services/ >> >>>>> What's up with rsyslog? Follow https://twitter.com/rgerhards >> >>>>> NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a >> >>>>> >> >>>> myriad >> >>> >> >>>> of sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if >>you >> >>>>> DON'T LIKE THAT. >> >>>>> >> >>>>> _______________________________________________ >> >>>> rsyslog mailing list >> >>>> http://lists.adiscon.net/mailman/listinfo/rsyslog >> >>>> http://www.rsyslog.com/professional-services/ >> >>>> What's up with rsyslog? Follow https://twitter.com/rgerhards >> >>>> NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a >> myriad >> >>>> of sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if >>you >> >>>> DON'T LIKE THAT. >> >>>> >> >>>> _______________________________________________ >> >>> rsyslog mailing list >> >>> http://lists.adiscon.net/mailman/listinfo/rsyslog >> >>> http://www.rsyslog.com/professional-services/ >> >>> What's up with rsyslog? Follow https://twitter.com/rgerhards >> >>> NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a >> myriad >> >>> of sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if >>you >> >>> DON'T LIKE THAT. >> >>> >> >>> >> >> >> >> >> >> >> >> _______________________________________________ >> > rsyslog mailing list >> > http://lists.adiscon.net/mailman/listinfo/rsyslog >> > http://www.rsyslog.com/professional-services/ >> > What's up with rsyslog? Follow https://twitter.com/rgerhards >> > NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a >>myriad >> > of sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if you >> > DON'T LIKE THAT. >> > >> >> >> >> -- >> Regards, >> Janmejay >> http://codehunk.wordpress.com >> _______________________________________________ >> rsyslog mailing list >> http://lists.adiscon.net/mailman/listinfo/rsyslog >> http://www.rsyslog.com/professional-services/ >> What's up with rsyslog? Follow https://twitter.com/rgerhards >> NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a myriad >> of sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if you >> DON'T LIKE THAT. >> >_______________________________________________ >rsyslog mailing list >http://lists.adiscon.net/mailman/listinfo/rsyslog >http://www.rsyslog.com/professional-services/ >What's up with rsyslog? Follow https://twitter.com/rgerhards >NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a myriad >of sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if you >DON'T LIKE THAT. _______________________________________________ rsyslog mailing list http://lists.adiscon.net/mailman/listinfo/rsyslog http://www.rsyslog.com/professional-services/ What's up with rsyslog? Follow https://twitter.com/rgerhards NOTE WELL: This is a PUBLIC mailing list, posts are ARCHIVED by a myriad of sites beyond our control. PLEASE UNSUBSCRIBE and DO NOT POST if you DON'T LIKE THAT.

