Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Info

Note: Jenkins access can be configured in other ways as well, if you don't have a google/other openID account or you just want to use something else (LDAP/custom users).

Other Things

...

to Configure

Here are some settings you should/could tweak in Manage JenkinsConfigure System:

  • if you don't have Ant installed, in Ant section add a new installation, give it a name and check Install automatically.
  • download and unzip ant-contrib (for example I downloaded and unzipped ant-contrib-0.6-bin.zip) from http://sourceforge.net/projects/ant-contrib/files/ (project page is http://ant-contrib.sourceforge.net/). Check Environment variables in Jenkins configuration page and set a key-value pair with key 'ANT_CONTRIB_JAR' (drop the quotation marks) and value containing the full path to where the downloaded ant-contrib*.jar is located in the unzipped contents - including file name.
  • '# of executors': set it to 1 for now; this limits the concurrent executing jobs to 1. In the future if you want to set-up a more advanced configuration you can configure multiple jobs to run simultaneously (for example for multiple solutions) - just make sure they use separate resources so that they don't affect each other (for example separate Servoy Installations).
  • 'Jenkins URL': to the real URL that will be used by users to access the Jenkins server. (for example this will appear as part of notification emails)
  • 'System Admin e-mail address': use your email address.
  • 'E-mail Notification': configure this as needed. By default it will try to use the localhost SMTP server which will already be working probably on some linux machines. You can also test the configuration by sending a test email.
  • hit the Save button.

Step-by-step Configuration

...

for Using It

...

with Servoy

In the SVN repository we will have Servoy solutions that need to be automatically tested using import-smart-client and a solution to be automatically tested in mobile-test-client. The ANT scripts used by Jenkins to automatically export and test Servoy solutions will be in a separate project 'antRunner' in the same SVN repository.

...

  1. changes are fetched from SVN (solution projects, resources project(s), antRunner project);
  2. root solutions are exported as .servoy files or .war mobile files. (because the .servoy workspace exporter uses the '-dbi' option in the sample ant scripts, it will not need databases to be online, but servoy.properties must still contain the required server definitions; for the sample workspace servoy.properties is already configured correctly);
  3. test client starts a database repository - based on the repository database that must be defined in servoy.properties (if it is not defined to be an in-memory server / HSQL, then the database must be online; for the sample workspace it will use an in-memory server, so no database needs to be started);
  4. solutions from (2) are imported into that repository (.servoy files) or in Servoy's embedded Tomcat (for mobile .war files) (databases needed by the solutions must be online if not defined as in-memory; for the sample workspace no database server needs to be started);
  5. tests run on those solutions in a test client (which is either a slightly modified smart client - to not block with modal dialogs when errors occur for example, or a slightly modified version of mobile client);
  6. results are published and emails are sent if necessary.

Step 1 -- Sample Workspace

...

and SVN Content

Sample Workspace

First we have to set-up sample SVN contents. This can be done on any computer with access to the SVN server, not necessarily on the same computer as Jenkins.

...

You can now have a look at the sample solutions and run tests on them from developer.

Commit

...

to Your SVN Repository

Install Subclipse plugin in Servoy Developer (Help > Install New Software) if you haven't already done so.

...

After a build finishes you should have 4 files in your build/Status/Build Artifacts - one showing the test results and 3 Servoy log files showing what happened while exporting/testing.

Customize Jenkins Jobs

...

to Suite Your Set

...

of Test Solutions

Congratulations! Now you should have a working sample Mobile Client test job and a working sample Smart Client test job.

...

  • customize the job ant build's behavior by defining more properties in BuildAdd build stepInvoke AntAdvancedProperties > expanded. Customizable properties are listed in the first section of 'antRunner/export_and_test.properties' and are explained in their comments preceding each one:

    Code Block
    languagejava
    # ------------------------------------------------------------------------------------------------
    # Properties that you should set in Jenkins job configurations (ant advanced config; they will ---
    # be available to ant and also have precedence over what is defined in this file               ---
    # ------------------------------------------------------------------------------------------------
    
    # Servoy developer installation that will be used for exporting/testing (a separate install
    # is recommended for each Jenkins job in case multiple jobs are configured to run concurrently)
    
    work.servoy.install.dir             = [your_jenkins_dedicated_servoy_installation_dir]
    work.servoy.install.url             = http://localhost:8080
    
    # Paths to other downloaded tools that we need
    
    webdriver.chrome.driver             = [path_to_the_downloaded_selenium_chrome_driver_executable]
    selenium.server.jar                 = [path_to_downloaded_selenium_server_jar]
    
    # Solutions to be exported and then tested;
    # multiple solutions can be specified via a comma separated list of solution names
    
    smart_test_solutions                = solution1,solution2
    
    mobile_test_solutions               = demo_ipAddressValidatorTester
    mobile_service_solutions            = demo_ipAddressValidatorTester_service
    
    mobile_to_deploy                    = demo_ipAddressValidator
    mobile_to_deploy_services           = demo_ipAddressValidator_service
    
    # If you are using a Servoy version >= 7.3 please uncomment or set the following (otherwise leave it
    # commented out; setting it to "false" or "nope" is not the same); the old way should work on 7.3 or
    # newer as well, but not the other way around; new way only only gets rid of some unneeded exporter
    # initialization time
    
    # work.servoy.install.7.3.or.higher = yep
    
    # 1 hour time-out; edit this as needed - depending on how long it usually takes for your solution tests to run (should probably be lower in most cases)
    
    test.timeout                           = 3600000
    
    # Uncomment the following to send '-pl' argument to workspace solution exporters: alternate project locations;
    # solution and resources projects will be searched for in direct subfolders of the given 'WORKSPACE'.
    # Example: if the workspace needs to contain projects from different git repositories, those can be checked
    # out in '[WORKSPACE]/repo1', '[WORKSPACE]/repo2' and so on
    
    #alternate_project_locations.on=yep
    
    # Uncomment the following line/set this if you want passed exports generated by previous build
    # to be deleted at the beginning of each build cycle
    
    #always_clean_passed_exports        = yep
    
    # For Sauce Labs test cloud (testing mobile clients); also uncomment relevant lines in
    # "run_mobile_client_tests_if_exported_ok" target of jenkins_build.xml; other changes might be needed as well, but this is the main idea
    
    #sauce.labs.user                    = [your Sauce Labs user here]
    #sauce.labs.token                   = [access token goes here]
    #sauce.labs.selenium.url            = http://${sauce.labs.user}:${sauce.labs.token}@localhost:${SAUCE_ONDEMAND_PORT}/wd/hub
    # define a timeout for sauce labs to not require additional Selenium commands for a solution (set to 1.5 min; should be updated for how long your test can possibly take to run, but not much higher)
    #sauce.labs.selenium.idle-timeout   = 90
    
    # If you want your mobile solutions deployed to a Servoy server after testing is done,
    # uncomment / set values as in the following two lines and change the value of
    # servoy.deploy.install.dir to point to it; passed .war files will be copied to deploy.webapps.dir location.
    
    #deploy.servoy.install.dir          = [your_mobile_war_deployment_servoy_installation]
    #deploy.webapps.dir                 = ${deploy.servoy.install.dir}/application_server/server/webapps
    
    # WORKSPACE property is normally already set by Jenkins in job build step
    # ANT_CONTRIB_JAR is normally already set if you followed all the steps in "Building a Software Factory" WIKI
    # page; it's set as a system property in global Jenkins configuration - environment variables
    
    #WORKSPACE                          = [if_not_set_by_Jenkins_you_can_configure_it_as_well]
    #ANT_CONTRIB_JAR                    = [if_not_set_in_Jenkins_config_as_environment_variable_you_can_configure_it_as_well]
  • workspace exporter arguments (you should have available all the options present in UI Solution Export Wizard) can be customized by modifying antRunner/export_and_test.xml macrodefs 'export-solution' and 'export-mobile-solution'. You can see a list of available command line arguments in a console window by executing {servoyInstall}/developer/exporter/export.bat -help and {servoyInstall}/developer/exporter/mobile_export.bat -help;
  • smart test client and mobile test client arguments (which are actually system properties sent to a junit test suite) can be customized by modifying antRunner/export_and_test.xml macrodefs 'run-smart-client-tests' and 'run-mobile-client-tests'. You can see a list of available arguments by commenting out the '<!--arg value="-help" /-->' lines in these marcrodefs and creating/executing an ant task that calls them from the command line (or alternatively just comment out those lines in a Jenkins job and check the job build's console - after it is executed).