The instructions on this page describe how to configure artifact sharing between Jobs in a Plan. Artifact sharing allows you to pass an artifact from one Job to a Job in a subsequent Stage. That is, the artifact is copied to the subsequent Job's agent. Note, you cannot pass artifacts between Jobs in the same stage.
For example, you may want to run acceptance tests on a build, share the WAR from one Job to another without rebuilding it each time.
The instructions on this page also describe how to configure artifact sharing when you are using a Maven builder. In this case, the artifact is deployed to and resolved from a Maven repository by Jobs, rather than being copied from agent to agent.
On this page:
You can share artifacts between Jobs in different Stages via artifact dependencies. Each time the artifact is shared with a subsequent Job, it is copied to the Job's agent.
To share an artifact between two Jobs in different Stages:
Screenshot above: Creating an Artifact Dependency
Before you begin:
Maven artifact sharing works by producing new remote repositories when you run a Plan. These are temporary equivalents of the deployment repositories configured within the project's pom.xml files. For example, if the project deploys its repository to the 'mycorp-private' repository at http://repository.example.com/ then Bamboo will create a 'mycorp-private' repository for each Plan result hosted on the Bamboo server.
When a Job produces a Maven artifact, it is deployed to this repository. A subsequent Job that consumes an artifact created by this process will resolve it from the repository within Bamboo. This process of deploying and resolving artifacts can then be repeated, as necessary across subsequent Jobs in later Stages. Once a build has completed, the temporary repositories are removed to conserve disk space, unless specified otherwise (see configuration instructions below).
The diagram below shows an example of how artifact sharing works. Two Jobs, Job A and Job B, share an artifact in Plan, MyPlan. Job A builds the artifact then deploys it to the temporary remote Maven repository. Job A triggers Job B. Job B resolves the artifact, builds, then deploys the artifact back to the repository.
Diagram above: Maven artifact sharing example
Artifact sharing is configured differently when using Maven 2 or 3 as a builder for your Jobs. Artifacts are deployed to and resolved from a Maven repository, rather than copied from agent to agent. You will need to change your pom.xml file, as well as configure the relevant Jobs to set up artifact sharing.
Before you begin:
To share an artifact between two Maven Jobs in different Stages:
Edit your pom.xmlfile and add the following plugin definition:
<build> <plugins> <plugin> <groupId>com.atlassian.bamboo.maven.sharing</groupId> <artifactId>bamboo-artifact-sharing-maven-plugin</artifactId> <version>3.0-i5</version> <executions> <execution> <id>sharing</id> <goals> <goal>share</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
<version>) must match the version of Bamboo you are using. This version number number will be compatible across minor releases of Bamboo, unless specified otherwise in the relevant upgrade.
Screenshot above: Enabling Maven artifact sharing for a Plan
Screenshot above: Viewing the build result for a Job with Maven artifact sharing
Artifacts are copied to a subdirectory (/JOB_KEY/download-data/) under your 'Build Directory' folder (see Locating Important Directories and Files). Artifacts which you define in the plan are listed in each build result as artifacts (see Viewing a Build's Artifacts in the Bamboo User's Guide).
Viewing a Build's Artifacts
Configuring a Job's Build Artifacts
6 Comments
Bob Swift
Mar 22, 2011Is there a difference between build artifacts and job artifacts as shown on the screen shot on Bamboo 3.0 Release Notes? If so, can you expand how to define a job artifact verses a build artifact? I was able to create a build artifact and share it between jobs but the artifact isn't needed once the build completes.
Jens Schumacher
Mar 30, 2011There is no difference between Build and Job artifacts. All artifacts are removed based on the build expiry settings within the global administration.
Kevin Loveland
Apr 28, 2011Where are the pom.xml changes required? Are they required in the root pom.xml? Are they required in each of the sub-module pom.xml? Are they only required in the modules pom.xml you wish to share?
What exactly do the changes to the pom.xml file do?
Are there other configuration options that can be provided?
dan carter
Dec 13, 2011I have enabled maven artifact sharing, and i have added the build plugin to my pom.xml, but they artifact tab says
Produced Maven Artifacts
No maven artifacts have been produced for this Job
Do I have to manually add an artifact definition for every artifact in my multimodule build? Shouldn't it work this out from my poms?
If i have to manually define (and maintain) the artefact definitions. Can i add just one artefact definition and use a pattern like */target/*.jar ?
Will be a pain if i have to maintain my project structure in both maven and bamboo.
dan carter
Dec 13, 2011"If a Job needs to deploy an artifact (i.e. produce the artifact), mark the artifact as shared in the relevant artifact definition."
Do i need to create the artifact definintion, or should the definition appear automatically once 'maven artifact sharing' is enabled.
If i need to create it manually, what should the definition look like? Should it point to the directory containing the maven project, or point to the target subdirectory containing the built jar, or point to the pom.xml file, or point to the jar, or ...?
Can I use pattern matching to select multiple projects / artefacts?
dan carter
Dec 13, 2011Also, does the maven build plugin "bamboo-artifact-sharing-maven-plugin" need adding to the pom that is producing the artifact or the one consuming the artifact?