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
@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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.