Build Scala Project using sbt and Jenkins

Build Scala Project using sbt and Jenkins

Agenda

  • Scala – A Scalable language
  • Scala Download
  • Scala Software Requirement
  • Scala IDEs
  • Scala Install Configuration
  • Scala First Program
  • Compile and Run
  • Building Scala Projects using Jenkins
  • Sbt downloand and configure
Tagged : / / / /

List of build automation software

Make-based tools

  •     distcc
  •     GNU make, a widely used make implementation with a large set of extensions
  •     make, a classic Unix build tool
  •     mk, developed originally for Version 10 Unix and Plan 9, and ported to Unix as part of plan9port
  •     MPW Make, developed for Mac OS Classic and similar to but not compatible with Unix make; OS X comes with both GNU make and BSD make; available as part of Macintosh Programmer’s Workshop as a free, unsupported download from Apple
  •     nmake
  •     PVCS-make, basically follows the concept of make but with a noticeable set of unique syntax features[1]
  •     Rake, a Ruby-based build tool
  •     ElectricMake, a replacement for make and gmake that implements build parallelization with ElectricAccelerator. Produced by Electric Cloud Inc.

Non-Make-based tools

  •     Apache Ant, popular for Java platform development and uses an XML file format
  •     Apache Buildr, open-source build system, Rake-based, gives full power of scripting in Ruby with integral support for most abilities wanted in a build system
  •     Apache Maven, a Java platform tool for project management and automated software build
  •     A-A-P, a Python based build tool
  •     Cabal, common architecture for building applications and libraries in the programming language Haskell
  •     Flowtracer
  •     Gradle, an open-source build and automation system with a Groovy Rake domain specific language (DSL), combining the advantages of Ant and Apache Maven plus providing many innovative features like a reliable incremental build
  •     Leiningen, a tool providing commonly performed tasks in Clojure projects, including build automation lei
  •     MSBuild, the Microsoft build engine
  •     NAnt, a tool similar to Ant for the .NET Framework
  •     Perforce Jam, a generally enhanced, ground-up tool which is similar to Make
  •     Psake, domain-specific language and build automation tool written in PowerShell
  •     sbt, a build tool built on a Scala-based DSL
  •     SCons, Python-based, with integrated functionality similar to autoconf/automake
  •     Shake, Haskell based, embedded DSL
  •     Tup, Lua based, make-like DSL with a pure focus on speed and scalability
  •     Tweaker, allowing task definitions to be written in any languages (or intermixed languages) while providing a consistent interface for them all
  •     Visual Build, a graphical user interface software for software builds
  •     Waf is a Python-based tool for configuring, compiling and installing applications. It is a replacement for other tools such as Autotools, Scons, CMake or Ant

Build script generation tools

  •     automake
  •     CMake, a cross-platform tool that generates files for the native build environment, such as makefiles for Unix or Workspace files for Visual Studio
  •     GNU Build Tools (aka autotools), a collection of tools for portable builds. These in particular include Autoconf and Automake, cross-platform tools that together generate appropriate localized makefiles.
  •     Generate Your Projects (GYP) – Created for Chromium; it is another tool that generates files for the native build environment
  •     imake
  •     Premake, a Lua based tool for making makefiles, Visual Studio files, Xcode projects, and more
  •     qmake

Continuous integration tools

  •     AnthillPro, build automation with pipeline support for deployment automation and testing. Cross-platform, cross-language
  •     Bamboo, continuous integration software
  •     Automated BuildStudio, a system for automating and managing software build, test and deploy processes, with build scheduling and continuous integration support
  •     Apache Continuum
  •     BuildBot, a Python-based software development continuous integration tool which automates the compile/test cycle
  •     BuildIT, a free graphical build or task tool for Windows with an emphasis on simplicity and ease of use
  •     Buildout, a Python-based build system for creating, assembling and deploying applications from multiple parts
  •     CABIE Continuous Automated Build and Integration Environment, open source, written in Perl
  •     Cascade, a continuous integration tool that builds and tests software components after each change is committed to the repository. Also provides a “checkpointing” facility by which changes can be built and tested before they are committed
  •     CruiseControl, for Java and .NET
  •     FinalBuilder, for Windows software developers. FinalBuilder provides a graphical IDE to create and run build projects
  •     Hudson, an extensible continuous integration engine
  •     Jenkins, an extensible continuous integration engine, forked from Hudson
  •     Team Foundation Server, an extensible continuous integration engine from Microsoft
  •     TeamCity

Configuration management tools

  •     Salt (Python-based)
  •     Ansible
  •     Puppet (Ruby-based)
Tagged : / / / / /

Hardware for The Build Lab

The build lab should include some high-end hardware for building the applications. Because the entire team depends on the results of a build, the high-end computers ensure that the build is completed as quickly as possible. Furthermore, you can use high-speed network equipment to push bits around from source control to build machines to release servers.

At a minimum, the build lab should have four machines:

  • Server that contains the Source Code Control program— This is your product. Do you really want this server residing someplace where you have little control over this box?
  • Debug build machine for the mainline builds— If you don’t separate your debug and release machines, you will accidentally ship debug binaries, which is not a good thing.
  • Release build machine for the mainline builds— This is a “golden goose” that turns out the “gold eggs” of your company or group. Treasure this machine like a princess, and guard it like all the king’s fortunes.
  • Internal release share server— This is one more piece of hardware that stores the “bread and butter” of the group or company. Don’t give up control of this hardware to anyone unless your IT department reports through your development group.

Hardware Requirements

Each machine in the preceding list should meet the following requirements:

  • Number of processors— This depends on the build tool you use. One is usually sufficient, because few build tools really take advantage of multiple processors.
  • Processor speed— The lab budget dictates this, but the faster the processor, the better it is.
  • Amount of installed RAM— Max out the machine. RAM is relatively cheap these days, especially when you consider the performance increase you get. Increasing the RAM is usually the first upgrade done when trying to improve the performance of any computer.
  • Number of hard drives— A minimum of two drives (or partitions) is preferred:
    • Drive 1 (C:) is for the operating system and installed applications.
    • Drive 2 (D:) is for building binaries, release shares, or the source database; the minimum space required is roughly ten times the space needed to build your application.
    • The split partitions are good because if you ever need to format or blow away a drive due to corruption, only part of the project will be affected. The recovery is much faster and easier.
  • Hard drive type— This is most likely SCSI, but it could be IDE.
  • Number of power supplies— If you purchase server class hardware (pizza boxes) that belong in racks, you need to consider how many power supplies to order.
  • Motherboard BIOS version— This does make a difference. Make sure you note what is being used and standardize on it.
Tagged : / / / / /

Tag SVN “Nightly” Builds with CruiseControl.Net

rajeshkumar created the topic: Tag SVN “Nightly” Builds with CruiseControl.Net
How would I do a nightly or other scheduled build for CruiseControl.NET without having a duplicate project?

In my current config, every 60 seconds, I am checking out the trunk using Subversion, running MSBuild, then either NUnit or MSTest.

I would like to commit back to SVN as a tag, but I don’t want it on every successful build. I want it to make a nightly build or some other set schedule. To me, it seems a bit tedious to have two CruiseControl.Net projects with basically the same options. What is the best way to handle that?

As a bonus, I would like it to build as a release build and commit the binaries in the same tag.
Regards,
Rajesh Kumar
Twitt me @ twitter.com/RajeshKumarIn

rajeshkumar replied the topic: Re:Tag SVN “Nightly” Builds with CruiseControl.Net
i’ll tell you how we use ccnet (and we’re quite happy with it that way).

we’ve got 20 projects on the build server and several release branches of previous versions. we only start builds on demand using the cctray application. so after a developer is done implementing a feature, he clicks the “force build” button and ccnet starts to do its thing (build, test, tag, copy build output to a network drive, notify other devs,…).

the advantage is that devs can decide when to start a build. projects that haven’t changed aren’t built. projects with work in progress can be built several commits later, only when a developer thinks that he needs a build.

one idea that comes to mind for starting nightly builds would be to use ccnet’s remoting interface (which is also used by cctray), connect it to the ccnet instance and call the force-build-method at midnight.

concerning “committing binaries to the same tag”:

there is a problem in ccnet that causes it to sometimes tag a revision from the trunk and sometimes to tag the working copy. it does this depending on if there were changes since the last build (in which case it tags the revision from the trunk), or if there were no changes since the last build (in which case it tags the working copy).

this is pretty annoying because you never know what will be committed – in the first case your binaries won’t get committed, in the second case they will.

we have actually patched ccnet ourselves to make it always commit the working copy so we get deterministic behaviour. i have once submitted the patch but it never made it in…
Regards,
Rajesh Kumar
Twitt me @ twitter.com/RajeshKumarIn

Tagged :

New Setup issues of CruseControl

scmuser created the topic: New Setup issues of CruseControl
Connectforu Config Tab Issues

Hi,

I have cruise contriol and when i navigated to Connectforu and click in Config Tab, i got following issues, plz guide me.

HTTP ERROR: 500

javax.naming.ServiceUnavailableException [Root exception is java.rmi.ConnectException: Connection refused to host: epc-rajesh-wxp.chordiant-epc.com; nested exception is:
java.net.ConnectException: Connection refused: connect]

RequestURI=/cruisecontrol/config.jspa
Caused by:

java.io.IOException: javax.naming.ServiceUnavailableException [Root exception is java.rmi.ConnectException: Connection refused to host: epc-rajesh-wxp.chordiant-epc.com; nested exception is:
java.net.ConnectException: Connection refused: connect]
at mx4j.remote.resolver.rmi.Resolver.lookupStubInJNDI(Resolver.java:100)
at mx4j.remote.resolver.rmi.Resolver.lookupRMIServerStub(Resolver.java:72)
at mx4j.remote.resolver.rmi.Resolver.lookupClient(Resolver.java:52)
at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:119)
at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:38)
at net.sourceforge.cruisecontrol.Configuration.(Configuration.java:91)
at net.sourceforge.cruisecontrol.interceptor.ConfigurationInterceptor.createConfiguration(ConfigurationInterceptor.java:76)
at net.sourceforge.cruisecontrol.interceptor.ConfigurationInterceptor.getConfiguration(ConfigurationInterceptor.java:86)
at net.sourceforge.cruisecontrol.interceptor.ConfigurationInterceptor.before(ConfigurationInterceptor.java:64)
at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:34)
at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:164)
at com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:116)
at com.opensymphony.webwork.dispatcher.ServletDispatcher.serviceAction(ServletDispatcher.java:272)
at com.opensymphony.webwork.dispatcher.ServletDispatcher.service(ServletDispatcher.java:237)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206)
at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:324)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:829)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:513)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)

Powered by Jetty://

scmuser replied the topic: Re:New Setup issues of CruseControl
I’m using Cruisecontrol 2.6.2 and I’m having problems with the JMX Control Panel.

First off, the URL for the Control Panel contains the hostname of the computer, which can’t be resolved over the network. I have tried setting the jmxhost parameter in the web.xml file to its IP adress, but it doesn’t work; it still uses the host name. As a workaround I’ve now entered the host name and the corresponding IP adress in my Hosts file, but I don’t want to do that for every computer, so is there a way to do this within cruisecontrol?

With the above workaround the host name can be resolved, but all that I get when I click the button for the control panel is an XML file:

“There is no/ style /i/nformation/ connected to this /XML file/. Subsequent the /Tree/-/View/ of the //document// is /shown/.”

….

Does anybody know how to fix this? Thanks.

Tagged :

Unregister Issues in JMX Interface

scmuser created the topic: Unregister Issues in JMX Interface
Hi,

I am just learning Cruise Control. I access http://localhost:8000/ link and click on un-register and then this Page is disappeared.

Can you guide me how to reset this back to earlier state?

scmuser replied the topic: Re:Unregister Issues in JMX Interface
Hi

I got this solution by restarting server…

still dont knw the root cause for this.

Tagged :

Msbuild slower than devenv

scmuser created the topic: msbuild slower than devenv
Hi, I’m experiencing performance inconsistencies with regards to build duration when building a VS2008 solution file with either devenv or msbuild from command line.

My solution contains both C# and C++ projects, and I have these results:

devenv.exe (either command line or within the ide): 7 minutes msbuild.exe: 14 minutes

I tried tuning the msbuild switches passing /maxcpucount and /p:VCBuildAdditionalOptions=m# but with no luck so far.

Any idea?

scmuser replied the topic: Re:msbuild slower than devenv
what is the full msbuild command you are running?

As a side point, have you got the build output turned down to Quiet or Minimal? That reduces build time a little…

7 minutes to build in the IDE!! Personally I’d go insane, debugging must be a nightmare

Tagged :

Build Archive Policy

sgoldstein created the topic: Build Archive Policy
I wanted to get some input from the SCM community regarding build archiving. When using either a CI or nightly build approach, a number of builds are generated during a release. How do people generally define a retention policy for retaining builds on disk? Once the retention policy dictates that a build should be removed from disk, what happens to it? Do people back it up to tape or some other media? Do people simply delete it entirely?

I ask because there are situations in which, for example, a bug is filed against a particular build and the dev team may want to go back an investigate. Typically, we’ve been archiving to tape, but it’s very time consuming and I don’t feel that the value is outweighing the cost.

Thanks.

rajeshkumar replied the topic: Re:Build Archive Policy
It’s all about process you follow and what release cycle you have..Dev team doesn’t need to refer old build until some milestone has been achieved as part of build. So as a Build engineer you need to know all the milestone achieved and which build CI# and revision number.
you can write a script which will store a information about revision number associated with the build and Build number, this number can be referenced in the future to get same build using CI tools
Scenario two: here I do follow some process. Like

I always clean up incremental build.

I do escrow audit after any patch, major or minor release.

Base line after any milestone met and documentation

Keep more than one year build only when if its matching with some milestone
Regards,
Rajesh Kumar
Twitt me @ twitter.com/RajeshKumarIn

Tagged :

MSBuild Tool

rambabu1683 created the topic: MSBuild Tool
Hi guys,

i am new to this forum.
can anyone help me about MSBUILD tool with small examples?

Warm Regards,
Rambabu.M

rajeshkumar replied the topic: MSBuild Tool
These quicks urls might help you…
www.scmgalaxy.com/189-msbuild/229-introduction-to-msbuild.html
www.scmgalaxy.com/189-msbuild/161-runnin…ous-integration.html
Regards,
Rajesh Kumar
Twitt me @ twitter.com/RajeshKumarIn

Tagged :

Windows: “OpenSCManager failed – Access is denied. (0x5)” errors when

scmuser created the topic: Windows: “OpenSCManager failed – Access is denied. (0x5)” errors when
Problem:
Windows: “OpenSCManager failed – Access is denied. (0x5)” errors when starting Nexus

Solution:
You need to run the command prompt as an Administrator to avoid the problem. For example:
1. click on start
2. click “All Programs”
3. click on accessories
4. right click on “Command Prompt” icon
5. click “properties”
6. click on the “shortcut” tab on the top
7. click the advanced button at the bottom
8. click on the check box that says “Run as Administrator”.
9. click OK
When you now use the modified shortcut to the command prompt session it will allow you to perform Administrator operations and avoid the error.

Tagged :