Create
cancel
Showing results for 
Search instead for 
Did you mean: 
Sign up Log in

How to use WAR file from maven build for CodeDeploy?

ajit54 September 3, 2018

Hello,

I am trying to use bitbucket pipeline for building and deploying the artifact onto AWS EC2 using codedeploy. However, I am at a slight disadvantage as I cannot find the output of the 1st step (Maven build) to push to S3. As far as I know, the maven build step (which is my step 1 in bitbucket-pipeline.yml) produces a WAR file. I should zip it with scripts, appspec file and push it on to S3 from where my code deploy app will pick it up. Can anyone help me on where will the bitbucket store the output WAR file after maven build?

 

Thanks,

Ajit

1 answer

0 votes
Graham Gatus
Atlassian Team
Atlassian Team members are employees working across the company in a wide variety of roles.
September 3, 2018

@ajit54, for a "standard" maven project, you should be able to find your .war file under the "target" directory. Generally it should be target/<artifact>-<version>.war.

You should be able to verify this by running your build commands locally.

If you want to avoid writing additional scripts to build the .zip required by AWS CodeDeploy, you can also try using the maven-assembly-plugin to build the zip.

e.g The following entry in the <build> section of your pom.xml will enable the plugin:

<plugins>
// other plugins here
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>make-zip</id>
<phase>package</phase>
<goals>
<goal>
single
</goal>
</goals>
</execution>
</executions>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptors>
<descriptor>src/assembly/zip.xml</descriptor>
</descriptors>
<finalName>myapp</finalName>
</configuration>
</plugin>
</plugins>

Under src/assembly/zip.xml, you would specify a zip.xml file which contains resources to zip up: 

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
<id>zip</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>${project.build.directory}</directory>
<includes>
<include>demo-0.0.1-SNAPSHOT.war</include>
</includes>
<outputDirectory>.</outputDirectory>
</fileSet>
<fileSet>
<directory>${project.basedir}</directory>
<includes>
<include>appspec.yml</include>
<include>scripts/*</include>
</includes>
<outputDirectory>.</outputDirectory>
</fileSet>
</fileSets>
</assembly>

In the above example, I include my application war, as well as an appspec file, and a few scripts which are referenced from within the appspec. 

This would suite a project with a similar structure to:

.
├── appspec.yml
├── pom.xml
├── scripts
│   ├── start.sh
│   └── stop.sh
├── src
│   ├── assembly
│   │   └── zip.xml
│   └── main
│   └── java
│      └── <your app files>
│  
└── target
  └── demo-0.0.1-SNAPSHOT.war

This will produce a "myapp.zip" file which can be uploaded to S3 and deployed using code deploy.

SPence August 29, 2023

Which image is being used for your answer? 

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events