2007 Adobe Systems Incorporated. All Rights Reserved. 1 Joe Berkovitz VP Engineering Allurent, Inc....

Post on 24-Dec-2015

214 views 0 download

transcript

2007 Adobe Systems Incorporated. All Rights Reserved.1

Joe Berkovitz

VP Engineering

Allurent, Inc.

Continuous Integration with Flex, FlexUnit, and Ant

2007 Adobe Systems Incorporated. All Rights Reserved.2

Is your build process like a Rube Goldberg contraption?

Manual

Fragile

Missing

Current Build Process

Image Source: http://mousetrapcontraptions.com/rube-cartoons-2.html

2007 Adobe Systems Incorporated. All Rights Reserved.3

Goal of this talk is to introduce tools and techniques to create a continuous integration based build process.

Centralized

Automated

Self-Testing

Ideal Build Process

Image Source: http://science.ksc.nasa.gov/shuttle/missions/sts-105/images/contact105_medium.html

2007 Adobe Systems Incorporated. All Rights Reserved.4

Continuous Integration is a software development practice where members of a team integrate their work frequently.

Each integration is verified by an automated build and test that detects integration errors as quickly as possible.

Continuous Integration

Source: http://www.martinfowler.com/articles/continuousIntegration.html

2007 Adobe Systems Incorporated. All Rights Reserved.5

Continuous Integration Cycle

Source: http://www.methodsandtools.com/archive/archive.php?id=42

2007 Adobe Systems Incorporated. All Rights Reserved.6

Build Failure Notification

2007 Adobe Systems Incorporated. All Rights Reserved.7

Build Log

2007 Adobe Systems Incorporated. All Rights Reserved.8

Project Dashboard

2007 Adobe Systems Incorporated. All Rights Reserved.9

Project Distributions

2007 Adobe Systems Incorporated. All Rights Reserved.10

Continuous Integration Cycle

2007 Adobe Systems Incorporated. All Rights Reserved.11

Build Process

Source Code

Build File

Generated AssetsBuild Tool

2007 Adobe Systems Incorporated. All Rights Reserved.12

Project View

Project

Build File

Generated Assets/bin

/src Source Code

Build Tool

/

2007 Adobe Systems Incorporated. All Rights Reserved.13

Build Automation Tool

Widely Used

Extensive Documentation

Cross Platform

Robust

XML Based

Ant

2007 Adobe Systems Incorporated. All Rights Reserved.14

Project

Tree governed by a set of automated jobs or "targets"

Ideally corresponds 1-to-1 with real projects

XML defines targets

Key Ant Concepts

Property

• Holds a constant textual value or file location

• Accessed with ${xyz} syntax

• Environment or custom defined

Target

• Logical chunk of work

• Can depend on other targets

• Works like a script

Task

• Individual command

• Accepts arguments to control behavior

• Used in targets

2007 Adobe Systems Incorporated. All Rights Reserved.15

Ant Hello World Demonstration

2007 Adobe Systems Incorporated. All Rights Reserved.16

<project name="HelloWorld" default="build">

<property name="message" value="Hello World!"/>

<target name="init" description="Initialize the build">

<tstamp/>

</target>

<target name="build" depends="init" description="Build the Hello World project">

<echo message="${message} Today is ${TODAY}"/>

</target>

</project>

Hello World Build Script

2007 Adobe Systems Incorporated. All Rights Reserved.

Hello World Build Script Output

Executed build file

Name of target being run

Name of target being run

Task name and output

Result of the build

Diagnostic information

Buildfile: build.xml

init:

build:

[echo] Hello World! Today is September 17 2007

BUILD SUCCESSFUL

Total time: 0 seconds

17

2007 Adobe Systems Incorporated. All Rights Reserved.18

Ant mxmlc Demonstration

2007 Adobe Systems Incorporated. All Rights Reserved.19

<!-- Using the Flex Ant Tasks provided by Adobe Labs -->

<project name="SampleApplication" default="build">

<taskdef resource="flexTasks.tasks" classpath="${basedir}/flexTasks/lib/flexTasks.jar"/>

<property name="FLEX_HOME" value="C:/Talk/Flex2.0.1HF2"/>

<target name="build">

<mxmlc file="src/${ant.project.name}.mxml" output="bin/${ant.project.name}.swf">

<load-config filename="${FLEX_HOME}/frameworks/flex-config.xml"/>

<source-path path-element="${FLEX_HOME}/frameworks"/>

</mxmlc>

</target>

</project>

Compiling an Application

2007 Adobe Systems Incorporated. All Rights Reserved.20

Keep source and output separated

Don’t do work you’ve already done

Provide reasonable defaults

Centralize behavior

Predictability

Build Practices

2007 Adobe Systems Incorporated. All Rights Reserved.21

Build Templates

Source Code

Build File

Generated AssetsBuild Tool

Build Templates

User Specific

Overrides

2007 Adobe Systems Incorporated. All Rights Reserved.22

Build Templates

Encapsulates Best Practices

Handles Flex Applications, Libraries, and Documentation

Cross Project Dependencies

Multiple Project Builds

Antennae

2007 Adobe Systems Incorporated. All Rights Reserved.23

Antennae Demonstration

2007 Adobe Systems Incorporated. All Rights Reserved.24

<project name="SampleApplication" default="build">

<property name="root.dir" location="../"/>

<property file="${root.dir}/build-user.properties"/>

<import file="${root.dir}/tools/build-imports.xml"/>

<path id="flex2.lib.path"/>

<target name="build" depends="init,flex2-application" description="Build the application" />

</project>

Antennae Build Script

2007 Adobe Systems Incorporated. All Rights Reserved.25

Flex Builder can invoke Ant to compile a Flex project

Flex Builder can use Ant targets…

to do all build work

just to do the non-compilation steps

Using Ant and Flex Builder together

2007 Adobe Systems Incorporated. All Rights Reserved.26

Continuous Integration Cycle

2007 Adobe Systems Incorporated. All Rights Reserved.27

Build Verification

Supports Flex and ActionScript

Asynchronous Testing Facilities

Graphical Test Results

FlexUnit

2007 Adobe Systems Incorporated. All Rights Reserved.28

FlexUnit Test Results

2007 Adobe Systems Incorporated. All Rights Reserved.29

FlexUnit Demonstration

2007 Adobe Systems Incorporated. All Rights Reserved.30

FlexUnit Automation

Test Suite Generation

Test Filtering

Actionscript to Java Result Reporting

Antennae

2007 Adobe Systems Incorporated. All Rights Reserved.31

Antennae Demonstration

2007 Adobe Systems Incorporated. All Rights Reserved.32

<project name="SampleTestApplication" default="test">

<!-- Shared imports -->

<import file="${root.dir}/lib/build-assets.xml" />

<path id="flex2.lib.path">

<pathelement location="${flexunit2.swc}"/>

<pathelement location="${arc-flexunit2.swc}"/>

<!-- Include asset under test here -->

</path>

<target name="build" depends="init,flex2-test-application" description="Build the test application"/>

<target name="test" depends="build,test-flexunit2" description="Run the test application"/>

</project>

Automated Test Script

2007 Adobe Systems Incorporated. All Rights Reserved.33

Continuous Integration Cycle

2007 Adobe Systems Incorporated. All Rights Reserved.34

Ant Demonstration

2007 Adobe Systems Incorporated. All Rights Reserved.35

Complex Project Demonstration

2007 Adobe Systems Incorporated. All Rights Reserved.36

Complex Project View

SubProject1

Assets/bin

/srcSource Code

assets

SubProject2

Assets/bin

/srcSource Code

imports

Project

Build File

/proj2

/proj1

/

2007 Adobe Systems Incorporated. All Rights Reserved.37

Many small projects keep dependencies under control

But… Flex Builder is very slow when building many Library Projects

Solution: Create single Flex Builder "super-project" that has multiple source paths in multiple projects.

Building Complex Projects with Flex Builder

2007 Adobe Systems Incorporated. All Rights Reserved.38

Continuous Integration Cycle

2007 Adobe Systems Incorporated. All Rights Reserved.39

Key Concepts Source code repository

Clean build machine

Runs after every commit

Popular platforms CruiseControl

Apache Continuum

Many others

Continuous Integration

2007 Adobe Systems Incorporated. All Rights Reserved.40

Ant http://ant.apache.org/

FlexUnit http://code.google.com/p/as3flexunitlib/

Antennae http://code.google.com/p/antennae/

Continuous Integration Matrix http://docs.codehaus.org/x/gCk

Flex Ant Tasks http://labs.adobe.com/wiki/index.php/Flex_Ant_Tasks

Resources

2007 Adobe Systems Incorporated. All Rights Reserved.41

Q & A