How to share artifact from two different build plans of two repositories
Asked by Ray Lee:

Hi,

I guess this question may be asked before by other users, but I really need your assistance to complete a build of a program which has dependency on another program. These two programs are put into two different repositories, now, we need to setup "clean install" on building program A and then program B can pick up program A from maven repositories within bamboo to continue its build.

However, I want to find a way such that a jar is built from program A build plan and build plan of Program B picks up the jar as part of library to build. I think share artifact works like this.

But I cannot find a correct documentation / example on doing this. Would you see if you can provide assistance on this ?

Thanks a lot,


Answers:
author: Daniel Santos
body: Hi [@Ray Lee](/t5/user/viewprofilepage/user-id/2115484)  

I don't think we have a document with a sequence of steps for this configuration, but we have documents about the features you need to use in order to accomplish this.  

General steps:

1. Create plan A with the repository for plan A.
2. Configure its tasks in order to create the Jar you want as an artifact.
3. Create an artifact definition and configure it as shared and required.  
   For the artifact creation: [Configuring a job's build artifacts - Atlassian Documentation.](https://confluence.atlassian.com/bamboo/configuring-a-job-s-build-artifacts-289277071.html)
4. Create plan B with the repository for plan B.
5. Configure its tasks in order to build the second app. It needs to have the artifact download task right after the checkout task.  
   For the artifact download configuration: [Sharing artifacts - Atlassian Documentation](https://confluence.atlassian.com/bamboo/sharing-artifacts-359400060.html).
6. Configure plan A to trigger plan B when a new build happens in A.  
   For the build dependency configuration: [Setting up plan build dependencies - Atlassian Documentation](https://confluence.atlassian.com/bamboo/setting-up-plan-build-dependencies-289276887.html).

<br />

![Bitbucket_server_-_Plan_A_-_library__Edit_plan_configuration_-_Atlassian_Bamboo_-_Vivaldi.png](https://community.atlassian.com/t5/image/serverpage/image-id/64223iA115376274CD80BD/image-size/large?v=v2&px=999 "Bitbucket_server_-_Plan_A_-_library__Edit_plan_configuration_-_Atlassian_Bamboo_-_Vivaldi.png")

I hope the example above helps you to move forward. =\]

comments: author: Ray Lee
body: Hi Daniel,

Really thank you for your reply. We finally make the sharing artifact across two repository build project. Your instructions are really helpful. But we hit one drawback in our implementation, we need to explicitly have one dependency set in child project

(the project depending on another project artifact output when building)

\<dependency\>  
\<groupId\>com.test.product\</groupId\>  
\<artifactId\>testParent\</artifactId\>  
\<version\>0.0.1-SNAPSHOT\</version\>  
\<scope\>system\</scope\>  
\<systemPath\>${basedir}/testParent/target/testParent-0.0.1-SNAPSHOT.jar\</systemPath\>  
\</dependency\>

Do you have any idea how we overcome this thing ?

As when two projects putting into same workspace in eclipse, we need to copy the jar file into the target library folder before another project can be built with manual action.

Not sure I make mistake in the configuration, would you help to share your hints to me ?

Thanks a lot,

Ray


author: Daniel Santos
body: Hi [@Ray Lee](/t5/user/viewprofilepage/user-id/2115484)

I'm not sure if I understood you correctly.

* Are you trying to download the artifact from the parent plan (plan A) or from and external source from outside Bamboo?


author: Ray Lee
body: Hi [@Daniel Santos](/t5/user/viewprofilepage/user-id/502125)

Yes, in plan B, I include Job to download source from Plan A and Build package for Plan A and share artifact. Then Plan B tries to use the share artifact from a specific path to continue its build process.

In Plan B, I need to specify

\<dependency\>  
\<groupId\>com.test.product\</groupId\>  
\<artifactId\>testParent\</artifactId\>  
\<version\>0.0.1-SNAPSHOT\</version\>  
\<scope\>system\</scope\>  
\<systemPath\>${basedir}/testParent/target/testParent-0.0.1-SNAPSHOT.jar\</systemPath\>  
\</dependency\>

such that Plan B can get Plan A artifact to build in bamboo

However, in my eclipse workspace, I need to put the jar (from Plan A) in the above path such that Plan B can build manually in eclipse

I really have no idea how to fix this thing.

Would you help me ?

Thanks,


author: Daniel Santos
body: Hi [@Ray Lee](/t5/user/viewprofilepage/user-id/2115484),

You should have the artifact in the build working directory, by following the first configuration shared.  

Builds can be run in local agents (in the Bamboo server) or in Remote agents (can be anywhere in the same network).  

Assuming your Eclipse workspace is in the Bamboo server, you can use a **script task** to copy the artifact to the new location.

In case your eclipse workspace is in a different machine you will need to use the **SCP task** to copy the artifact through SSH.  

<br />