Each plugin has one or more test applications under
test/projects
each of which has grails.plugin.location.whatever = "../../.."
in BuildConfig.groovy
. So each plugin CI build needs to run not only the plugin's own unit tests but any integration and/or functional tests included in the test apps as well.Hudson plugins
I installed the essential plugins I would need:- The Grails plugin makes building Grails projects much easier and allows you to build against multiple versions of Grails.
- The Git plugin enables Hudson to pull from a Git repository such as GitHub.
- The GitHub plugin adds links to the GitHub project in the Hudson build.
- The Chuck Norris plugin encourages you to keep your tests from failing.
Configuring Grails
Under Manage Hudson -> Configure System there is a Grails Builder section where I entered the name and path of the various versions of Grails installed on the build box.Connecting to GitHub
In the project configuration:- I pasted the GitHub project URL in the Github project field (shown if you have the GitHub plugin installed).
- Under Source Code Management I selected Git then pasted the read-only repository URL into the URL of repository field.
- I entered master in the Branch Specifier field as I've seen Hudson do odd things picking up changes from other branches before. I don't really need this behaviour and haven't had time to investigate it further yet.
- I ticked Poll SCM under Build Triggers then set a cron expression of
*/5 * * * *
so Hudson will poll GitHub every 5 minutes.
Grails build steps
- Select Build with Grails from the Add build step drop down, then:
- Select the Grails Installation you want to use.
- Enter the Targets to run. These are the Grails commands that Hudson will execute. For example, I entered
"test-app unit: -clean --non-interactive" package-plugin
for the to run unit tests then package the plugin. The quotes allow arguments to be passed to individual targets so I'm telling the test-app phase to build clean and run non-interactively (i.e. Grails won't ask about things like installing or uninstalling plugins). - The other fields can be left blank for now.
- Add further Grails build steps for test applications. The only difference in configuring these is that the targets will likely be different and Project Base Directory needs to be set to the relative path where the test apps lives, e.g.
test/projects/content-caching
Isolating each build
One thing I found is that it's probably a good idea to specify separate working directory for each build. I found that simultaneous builds would stomp over each other's compiled classes otherwise. This is particularly an issue for me where I have a build for the Selenium RC plugin whilst one of the test apps for the Springcache plugin uses the latest Selenium RC release to run tests.Hudson provides various environment variables so I just set grails.work.dir to
/tmp/.grails/${JOB_NAME}
in every case.The other consideration is the port that Grails applications will use. If you are running any kind of functional tests the Grails application will start and it each Hudson job needs to use a separate server port or simultaneous jobs will experience port contention. The server port is also configured in the Grails build step. I've just assigned a different one to each job but I couldn't think of a particularly clever way to automate the port assignment.
Test reports
Under Post-build Actions I ticked Publish JUnit test result report then entered a comma-separated set of paths to the XML reports generated by each build step. For example, the Springcache plugin has the following reports configured:target/test-reports/*.xml,test/projects/springcache-test/target/test-reports/*.xml,test/projects/content-caching/target/test-reports/*.xml
That's picking up the root plugin's unit test reports and the reports generated by the springcache-test and content-caching test applications. Hudson does a good job of merging these together into a unified test report.
11 comments:
Thanks for writing that up Rob. I feel closer to tackling this myself now. Is there anything special to consider when storing grails plugins in git as well as publishing them to the central grails .svn repo?
I don't think so. I release mine using -zipOnly so the only artefacts on svn are the zip files. I'm not (yet) releasing the plugins using Hudson so my Hudson jobs completely ignore svn.
Hi Robert,
I've used the Port allocator plugin to handle choosing a port for functional tests, etc... (see http://wiki.hudson-ci.org/display/HUDSON/Port+Allocator+Plugin).
I used it in a freestyle project and passed the env-var generated by the port-allocator build-step through to a Maven build-step. The Maven build-step supports property assigment with env-var interpolation which then is passed through to Grails.
Hopefully something similar (or even more direct) can work for the Grails plugin.
The Port Allocator plugin works beautifully with Grails builds. I've just had it create GRAILS_PORT and SELENIUM_PORT environment variables then specified the former as 'server.port' and the latter as 'selenium.server.port' in the Grails build for functional testing steps.
mobdro
https://mobdroapp.fun/
mobdro apk
appvn
mobdro for smart tv
mobdro sports
mobdro download
it will really help Gift Cards 2021
Thats great post !! I like ur every post they always give me some new knowledge.
VidMate | VidMate for PC |
VidMate 2014
supreme hoodie
supreme
moncler
kyrie 5 shoes
supreme hoodie
kobe byrant shoes
golden goose
moncler jackets
supreme clothing
nike sb
check over hereaddress great post to readlook at these guys my companyclick now
تتعدد الأسباب التي دفعت الخبراء والمهندسين إلى استخدام شيش حصيرة الومنيوم في مصر بدل من الشبابيك الخشبية، ويتمثل هذا التغيير في العديد من الفوائد والأهداف التي يمكن تحقيقها من خلال الاستخدام الألومنيوم.
التحكم بمستويات السكر في الدم يعتبر الطريقة الصحيحة لعلاج الغرغرينا يمكن تحقيق ذلك من خلال تناول الأدوية الموصوفة من قبل افضل دكتور متخصص في علاج الدوالي بتقنية الكلاكس و علاج الغرغرينا الدكتور محمود ناصر ,واتباع نظام غذائي صحي ولياقي بانتظام. ويمكن أيضًا التحدث إلى الطبيب حول أي مضاعفات محتملة أو دراسة الخيارات الأخرى المتاحة لتحقيق التحكم في مستويات السكر في الدم.
Post a Comment