190 likes | 282 Views
Development Process of Accelerator Controls Software. G.Kruk L.Mestre, V.Paris, S.Oglaza, V. Baggiolini, E.Roux and Application Section developers. Agenda. Development process Issues How we addressed them? Conclusions. Development Process.
E N D
Development Process of Accelerator Controls Software G.Kruk L.Mestre, V.Paris, S.Oglaza, V. Baggiolini, E.Roux and Application Section developers CERN AB Controls
Agenda • Development process • Issues • How we addressed them? • Conclusions
Development Process All activities from the moment a developer starts a new project to the moment the resulting application is running on operational consoles in the control room Operational Consoles
Context in CERN Controls • 2002 • Support for C developments (under control of Make) • No Java development process in place • Java based on small interdependent products • ~ 130 products which use about ~140 external libraries • Dependencies tree very complicated – up to 10 levels • ~ 30 developers • Need for supporting tools • No mature solution on the market • Work started on custom solution
Development Process Issues • Projects and code organization • Source versioning management • Build services (automation of common tasks) • Compilation, JAR • Documentation generation • Dependencies management • Release management • Releasing new versions of software in a dedicated repository • Applications deployment • Issues & bugs tracking (guidelines, naming conventions, directory structure) (CVS) (JIRA)
Build services : Common-Build • Based on Apache Ant • Java based open source build tool (like Make) • XML based build file defining targets • Functionality of Common-Build • Provides predefined targets for everything needed • Compilation, packaging (JAR) • Source code & specific descriptors generation • Documentation generation • Code quality • Unit testing • Prevents Copy/Paste syndrome • Integration with the infrastructure in place • Minimal effort to start
Target examples • Compiling sources • ant compile • Building distribution of the product • ant dist • Releasing new version of the product • ant release
equipstate/ build.xml product.properties product.xml people src/ java/ test/ Common-Build constraints(Directory structure)
equipstate/ build.xml product.properties product.xml people src/ java/ test/ Common-Build constraints(Build file) Regular Ant’s build file that imports targets from Common-Build (always the same)
equipstate/ build.xml product.properties product.xml people src/ java/ test/ Common-Build constraints(Services file) Specifies the services to activate in Common-Build during the build process e.g. JavaDoc generation, unit tests, specific descriptors generation
equipstate/ build.xml product.properties product.xml people src/ java/ test/ Common-Build constraints (Product’s descriptor) Descriptor of the product and its directdependencies
equipstate/ build.xml product.properties product.xml people src/ java/ test/ Common-Build constraints(Release check list) Specifies who has the right to release this product
Dependencies management Production repository 3rd party repository Product A Lib B Lib A equipstate product.xml <product name=“equipstate” …> <!-- … --> <dependencies> <dep product=“LibA” version=“1.2.8” /> <dep product=“ProductA” /> </dependencies> </product>
equipstate/ build.xml product.properties product.xml people lib/ LibA.jar ProductA.jar LibB.jar src/ java/ test/ Production repository 3rd party repository Product A Lib B Lib A equipstate Dependencies management equipstate/ build.xml product.properties product.xml people src/ java/ test/ ant getjars
Release Management Release Tool • Also based on Ant • Both for Java and C/C++ products • Can be used without Common-Build
What Release does • Extracts the product from the CVS to the dedicated production repository • Builds the product (calling Common-Build) • Installs it in a multi-versioned repository • New version is added without modifying the old ones • We can always use old versions • Updates product aliases (symbolic links)
Release management(Production repository) • Aliases: • PRO - production version • PREV - previous versions (version which was replaced by PRO) • NEXT - next version to be tested before becoming PRO dist accsoft macsy leir client equipstate domain PRO PREV NEXT 0.5.1 0.5.2 0.6.0 0.6.1
GUI Applications deployment • We use Java Web Start deployment technology [TH3A.2-50] • uses a special XML descriptor (JNLP file) to deploy and run applications • ensures that all required libraries (cached locally) are up to date • JNLP file specifies • how to run the application • where required libraries are found • Repository contains all libraries and JNLP file • We added a Web server to enable deployment via Java Web Start • http://<path_to_the_dist>/macsy/equipstate/PRO/equipstate.jnlp
Conclusions • We put in place a very solid development process • The whole process is automated now • We have a suite of integrated tools supporting the process • We succeeded to make the deployment path short and simple • This has been validated operationally