Build Automation Kurt Christensen

Similar documents
Maven Introduction to Concepts: POM, Dependencies, Plugins, Phases

Package Management and Build Tools

Why switch exist-db from Ant to Maven?

MAVEN MOCK TEST MAVEN MOCK TEST I

Software Building (Sestavování aplikací)

... Fisheye Crucible Bamboo

This tutorial explains how you can use Gradle as a build automation tool for Java as well as Groovy projects.

MAVEN INTERVIEW QUESTIONS

Construction: version control and system building

Software Engineering - Development Infrastructure 2. Kristjan Talvar Nortal

Construction: version control and system building

Topics covered. Introduction to Maven Maven for Dependency Management Maven Lifecycles and Plugins Hands on session. Maven 2

Getting Started with Gradle

C++ Binary Dependency Management with Gradle. Hugh Greene

Language alone won t pay your bills. Alan Franzoni - EP 2012 twitter: franzeur website:

The Actual Real World at EclipseCon/ALM

Build Tools. Software Engineering SS A tool was needed. Agenda for today. Build tools. Software complexity. Build tools

Build Tools. Software Engineering SS 2007

Apache Buildr in Action

I Got My Mojo Workin'

Hello Gradle. TestNG, Eclipse, IntelliJ IDEA. Óbuda University, Java Enterprise Edition John von Neumann Faculty of Informatics Lab 2.

Simplified Build Management with Maven

Distributing JavaFX Applications with Java WebStart and Artifactory

Hello Maven. TestNG, Eclipse, IntelliJ IDEA. Óbuda University, Java Enterprise Edition John von Neumann Faculty of Informatics Lab 2.

MAVEN MOCK TEST MAVEN MOCK TEST IV

Gradle Leveraging Groovy for Building Java Applications. Hans Dockter Gradle Project Lead

JBoss Tattletale 1.1 Developer's Guide

gradle : Building Android Apps Mobel Meetup

The Workshop. Slides (you have a copy in the zip) Practical labs Ask questions

Extreme Java Productivity with Spring Roo and Spring 3.0

Moven. Machine/Deep Learning Models Distribution Relying on the Maven Infrastructure. Sergio Fernández (Redlink GmbH) November 14th, Sevilla

What is Maven? Apache Maven is a software project management and comprehension tool (build, test, packaging, reporting, site, deploy).

Generating A Hibernate Mapping File And Java Classes From The Sql Schema

An Integrated Approach to Managing Windchill Customizations. Todd Baltes Lead PLM Technical Architect SRAM

Skyway Builder 6.3 Reference

Build automation. CSE260, Computer Science B: Honors Stony Brook University

(Refer Slide Time: 0:48)

JDO Tools Guide (v5.1)

Introduction to project industrialization using Maven YaJUG 06/10/2009. Copyright Pierre-Antoine Grégoire License Creative Commons 2.

GAVIN KING RED HAT CEYLON SWARM

Cheat Sheet: Wildfly Swarm

Lab 5 Exercise Build and continuous integration tools

1 Copyright 2011, Oracle and/or its affiliates. All rights reserved.

Maven POM project modelversion groupid artifactid packaging version name

JVM Survival Guide. Hadi Hariri

Managing Installations and Provisioning of OSGi Applications. Carsten Ziegeler

Gradle. The Basics and Beyond

What s new in IBM Operational Decision Manager 8.9 Standard Edition

Content. Development Tools 2(57)

S A M P L E C H A P T E R

Component based Development. Table of Contents. Notes. Notes. Notes. Web Application Development. Zsolt Tóth

DITA Gradle and Git. DITA-OT day Rotterdam

CSE 390 Lecture 8. Large Program Management: Make; Ant

CSE 333 Interlude - make and build tools

Gant as Ant and Maven Replacement

TIBCO StreamBase 10.2 Building and Running Applications in Studio, Studio Projects and Project Structure. November 2017

Continuous integration for databases using Red Gate tools

#jenkinsconf. Jenkins user plugin. This time it's. Jenkins User Conference Israel. Shiran JFrog

CTL. Introduction. April 21, distributed control dispatching framework

Tuesday, April 26, 2011

LGTM Enterprise System Requirements. Release , August 2018

Build and Provision: Two Sides of the Coin We Love to Hate

Packaging, automation, Continuous Integration

Introduction to Mobile Development

PROGRAMMING WITH THE MICROSOFT.NET FRAMEWORK USING MICROSOFT VISUAL STUDIO 2005 Course No. MS4995A 5 Day PREREQUISITES COURSE OUTLINE

Maven 2 & Continuum. by Trygve Laugstøl

Continuous Integration & Code Quality MINDS-ON NUNO 11 APRIL 2017

SCA Java Runtime Overview

Development tools: Version control, build tools, and integrated development environments 1

Advanced Dependency Management with Gradle. Benjamin Muschko, Gradle Inc.

Enter the Gradle Hans Dockter CEO, Gradleware Founder Gradle

B3 Modeling Unbreakable Builds. Eclipse Modeling Day Nov 16-19, Ed Merks, Bjorn Freeman-Benson, Miles Daffin

TOP REASONS WHY YOU SHOULD SWITCH TO MAVEN 3

CSE 374 Programming Concepts & Tools

Programming: C ++ Programming : Programming Language For Beginners: LEARN IN A DAY! (Swift, Apps, Javascript, PHP, Python, Sql, HTML) By Os Swift

IKAN ALM Architecture. Closing the Gap Enterprise-wide Application Lifecycle Management

Introduction to Programming Microsoft.NET Applications with Visual Studio 2008 (C#)

CodeHub. Curran Kelleher 8/18/2012

Software Building (Sestavování aplikací)

OAuth2 Autoconfig. Copyright

REASONS TO USE A BINARY REPOSITORY MANAGER WHEN DEVELOPING WITH. White Paper

B. Assets are shared-by-copy by default; convert the library into *.jar and configure it as a shared library on the server runtime.

Checking Out and Building Felix with NetBeans

Mobile and Social Computing

Red Hat Application Migration Toolkit 4.1

MAVEN MOCK TEST MAVEN MOCK TEST III

Developing ONOS Apps

Build. System building

DevOps and Maven. Eamonn de Leastar Dr. Siobhán Drohan Produced by:

<put document name here> 1/13

Raven: Scripting Java Builds with Ruby MATTHIEU RIOU

Free Downloads The Definitive ANTLR 4 Reference

1.2. Name(s) and address of Document Author(s)/Supplier: Sahoo: 1.3. Date of This Document: 12 July 2008

Maven 2.1 Artifact Resolution Specification

Maven. INF5750/ Lecture 2 (Part II)

Who Moved My Module? 1

This document contains information about the ElectricAccelerator Solution Support Add-in. Topics include: Overview 2. New Features and Improvements 2

Mind Q Systems Private Limited

Red Hat Fuse 7.0 Installing on Apache Karaf

Selenium Testing Course Content

Transcription:

Build Automation Kurt Christensen

Kurt Christensen Computer programmer (17 years) and software development coach (9 years) github.com/projectileboy Available for purchase at: kurt.j.christensen@gmail.com Twitter: projectileboy

What are we trying to do? Build software! But how? Where does this fit into the overall topic of continuous delivery? Write code o Tools - IDEs, version control Test code o Testing tools and frameworks Build code o Build automation and continuous integration Deploy code o Environments

What are we trying to do? Compile, test, package, deploy... o In other words, manage "the build lifecycle" o And more: generate documentation, generate keys, rebuild databases, obfuscate and minify, etc. Manage dependencies o Between our own projects and sub-projects o Between our project and third-party libraries Understand our project and all of its parts NOTE: Thoughtful use of version control systems is a separate but related issue!

What are our options? Shell scripts Makefiles Ant Ivy Maven Gradle Rake, Buildr and others

Shell Scripts Simple scripts which execute various command-line programs within a shell Everything we're trying to accomplish can be done with shell scripts "The assembly language of build automation"

Shell Scripts An example: gradlew.bat for Gradle https://github.com/gradle/gradle/blob/master/gradlew.bat

Shell Scripts So what's the problem? Well... it's the assembly language of build automation... Platform-dependent BUT... shell scripts are still very often useful wrappers for all of these other build tools!

make make provides something like a domain-specific shell scripting language for building software make still works fine, and is everywhere (it's how most GNU projects get built)

make An example: a makefile for make http://ftp.gnu.org/gnu/make/

make So what's the problem? Nothing, if you're building a C/C++ application for Unix Otherwise, not so helpful (For example: http://www.cs.swarthmore.edu/~newhall/unixhelp/javamakefiles.html)

Ant Platform-independent tool which executes targets defined in XML build files We define targets, within which we specify various tasks to be executed (e.g., javac) - most tasks we would ever want are bundled in Ant; many more available from third-parties (Example: JBoss-specific deployment tasks) Targets can depend on other targets

Ant Relatively easy to define our own tasks (Example: generating test data SQL from an Excel spreadsheet) Macro facility helps eliminate duplicate code Enables platform-independent methods for defining properties (e.g., classpath) (also easy to read in external property files We can have parent and child build scripts

Ant An example: Ant's build.xml http://svn.apache.org/viewvc/ant/core/trunk/build.xml

Sidebar: MSBuild, NAnt NAnt is the.net build tool inspired by Ant MSBuild is the official Microsoft build automation tool, similar to NAnt (We won't explore in depth; they're both very (We won t explore in depth; they re both very similar to Ant in both spirit and syntax)

Ant So what's the problem? Extremely verbose XML-based language g You tend to write the same Ant scripts over and over and over again Certain things aren't handled well, or at handled at all Dependency management Imperative scripting language without decent imperative coding constructs t (e.g., for loops)

Ivy Increasingly, applications are less about writing new code and more about stitching together functionality from existing libraries Ivy adds dependency management to Ant

Ivy An example: Ivy's ivy.xml, and build.xml http://svn.apache.org/viewvc/ant/ivy/core/trunk/ivy.xml http://svn.apache.org/viewvc/ant/ivy/core/trunk/build.xml

Ivy So what's the problem? You're still left with an enormous Ant script!

Maven Declarative rather than imperative - Project Object Model (POM) file defines project structure and dependencies Maven goals are executed within the context of a lifecycle For Java project which follow certain conventions, Maven eliminates much of the boilerplate Ant code

Maven Goals are defined within plugins Most plugins you care about are bundled with Maven, although you can write your own As with Ant, we can have parents and children

Maven Provides dependency management Atif Artifacts t (i.e., external libraries) i are stored in and retrieved from repositories Repository is by default a well-known global repository, but can be an internal corporate repository

Maven An example: Maven's pom.xml http://svn.apache.org/viewvc/maven/maven-3/trunk/pom.xml

Maven So what's the problem? Very unforgiving i of those who choose to structure things differently Example: Deploying a non-trivial set of web applications to ATG

Gradle Ant + Ivy with the power of Groovy, an actual programming language! Build domain-specific language handles most tasks, but vanilla Groovy code can also be used Provides a certain amount of convention over configuration, similar to Maven

Gradle An example: Gradle's build.gradle https://github.com/gradle/gradle/blob/master/build.gradle

Gradle So what's the problem? Requires Groovy knowledge Small community Hasn t achieved critical mass minimal tool support, harder to find help, etc.

..and much, much more! Rake - Make, in Ruby Buildr - similar to Gradle, but based on Ruby instead of Groovy See: http://en.wikipedia.org/wiki/list_of_build_automation_softwareof automation software

Limited Life Experience + Overgeneralization = Advice - Paul Buchheit, creator of Gmail

Recommendations Vanilla Java app? Maven is the standard but if you re using Ant and it s working for you, leave it alone! (But consider Ivy) If your build does non-trivial unusual things, Maven will fight you If you re green-fielding, or doing something unusual, investigate unusual options (e.g., Gradle)

Questions? Comments? Insults? Twitter: @projectileboy kurt.j.christensen@gmail.com com