In Application Development life cycle continuous integration is an important factor. How easy to get something deployed which is built in a build server. You can simply use maven exec plugin to run Curl commands to call rest apis.
Following is an example. Before call the create application api we need to call login api and get created a logged in session. To do that we need to call login api with -c cookies and we need to call create application api with -b cookies.
You don't have to deploy it each time you build it. So you can set the phase of the executions to deploy as above. But it might try to deploy the artifact to nexus. To stop that you can skip deploy by adding following.
In App Cloud to deploy the changes we need to create new version. So to do that we will always need to increase the version name of the create request. You can use helper plugin and replace plugin as a combination. With following configuration I am creating a property and I am replacing them in each deploy with next patch version number.
And you need to have a property like below as well.
Rest of the details of the apis can be found in [1]. Following is the full build tag and the properties tag in the pom.xml. If you run mvn clean install this would not get triggered. This will only trigger when you run mvn deploy.
[1] https://docs.wso2.com/display/AppCloud/Published+APIs
Following is an example. Before call the create application api we need to call login api and get created a logged in session. To do that we need to call login api with -c cookies and we need to call create application api with -b cookies.
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<id>login</id>
<phase>deploy</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>curl</executable>
<arguments>
<argument>-v</argument>
<argument>-k</argument>
<argument>-c</argument>
<argument>cookies</argument>
<argument>-X</argument>
<argument>POST</argument>
<argument>-F</argument>
<argument>action=login</argument>
<argument>-F</argument>
<argument>userName=<email @ replaced with .>@<tenant domain></argument>
<argument>-F</argument>
<argument>password=<password></argument>
<argument>https://newapps.cloud.wso2.com/appmgt/site/blocks/user/login/ajax/login.jag</argument>
</arguments>
</configuration>
</execution>
<execution>
<id>create application</id>
<phase>deploy</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>curl</executable>
<arguments>
<argument>-v</argument>
<argument>-k</argument>
<argument>-b</argument>
<argument>cookies</argument>
<argument>-X</argument>
<argument>POST</argument>
<argument>https://newapps.cloud.wso2.com/appmgt/site/blocks/application/application.jag</argument>
<argument>-F</argument>
<argument>action=createApplication</argument>
<argument>-F</argument>
<argument>applicationName=Buzzwords Backend</argument>
<argument>-F</argument>
<argument>applicationDescription=API Producer application for buzzword sample</argument>
<argument>-F</argument>
<argument>conSpecMemory=512</argument>
<argument>-F</argument>
<argument>conSpecCpu=300</argument>
<argument>-F</argument>
<argument>runtime=2</argument>
<argument>-F</argument>
<argument>appTypeName=mss</argument>
<argument>-F</argument>
<argument>applicationRevision=${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.nextIncrementalVersion}</argument>
<argument>-F</argument>
<argument>uploadedFileName=${artifactId}-${version}.jar</argument>
<argument>-F</argument>
<argument>runtimeProperties=runtimeProperties=[{"key":"k1","value":"e1"}]</argument>
<argument>-F</argument>
<argument>tags=[{"key":"k1","value":"t1"}]</argument>
<argument>-F</argument>
<argument>fileupload=@${project.build.directory}/${artifactId}-${version}.jar</argument>
<argument>-F</argument>
<argument>isFileAttached=true</argument>
<argument>-F</argument>
<argument>isNewVersion=true</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
You don't have to deploy it each time you build it. So you can set the phase of the executions to deploy as above. But it might try to deploy the artifact to nexus. To stop that you can skip deploy by adding following.
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.7</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
In App Cloud to deploy the changes we need to create new version. So to do that we will always need to increase the version name of the create request. You can use helper plugin and replace plugin as a combination. With following configuration I am creating a property and I am replacing them in each deploy with next patch version number.
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.10</version>
<executions>
<execution>
<phase>deploy</phase>
<id>parse-version</id>
<goals>
<goal>parse-version</goal>
</goals>
<configuration>
<versionString>${appcloud.version}</versionString>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.google.code.maven-replacer-plugin</groupId>
<artifactId>replacer</artifactId>
<version>1.5.3</version>
<executions>
<execution>
<phase>deploy</phase>
<goals>
<goal>replace</goal>
</goals>
</execution>
</executions>
<configuration>
<file>pom.xml</file>
<replacements>
<replacement>
<token>${appcloud.version}</token>
<value>${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.nextIncrementalVersion}</value>
</replacement>
</replacements>
</configuration>
</plugin>
And you need to have a property like below as well.
<properties>
<appcloud.version>1.0.7</appcloud.version>
</properties>
Rest of the details of the apis can be found in [1]. Following is the full build tag and the properties tag in the pom.xml. If you run mvn clean install this would not get triggered. This will only trigger when you run mvn deploy.
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.10</version>
<executions>
<execution>
<phase>deploy</phase>
<id>parse-version</id>
<goals>
<goal>parse-version</goal>
</goals>
<configuration>
<versionString>${appcloud.version}</versionString>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.google.code.maven-replacer-plugin</groupId>
<artifactId>replacer</artifactId>
<version>1.5.3</version>
<executions>
<execution>
<phase>deploy</phase>
<goals>
<goal>replace</goal>
</goals>
</execution>
</executions>
<configuration>
<file>pom.xml</file>
<replacements>
<replacement>
<token>${appcloud.version}</token>
<value>${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.nextIncrementalVersion}</value>
</replacement>
</replacements>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<id>login</id>
<phase>deploy</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>curl</executable>
<arguments>
<argument>-v</argument>
<argument>-k</argument>
<argument>-c</argument>
<argument>cookies</argument>
<argument>-X</argument>
<argument>POST</argument>
<argument>-F</argument>
<argument>action=login</argument>
<argument>-F</argument>
<argument>userName=<email @ replaced with .>@<tenant domain></argument>
<argument>-F</argument>
<argument>password=<password></argument>
<argument>https://newapps.cloud.wso2.com/appmgt/site/blocks/user/login/ajax/login.jag</argument>
</arguments>
</configuration>
</execution>
<execution>
<id>create application</id>
<phase>deploy</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>curl</executable>
<arguments>
<argument>-v</argument>
<argument>-k</argument>
<argument>-b</argument>
<argument>cookies</argument>
<argument>-X</argument>
<argument>POST</argument>
<argument>https://newapps.cloud.wso2.com/appmgt/site/blocks/application/application.jag</argument>
<argument>-F</argument>
<argument>action=createApplication</argument>
<argument>-F</argument>
<argument>applicationName=Buzzwords Backend</argument>
<argument>-F</argument>
<argument>applicationDescription=API Producer application for buzzword sample</argument>
<argument>-F</argument>
<argument>conSpecMemory=512</argument>
<argument>-F</argument>
<argument>conSpecCpu=300</argument>
<argument>-F</argument>
<argument>runtime=2</argument>
<argument>-F</argument>
<argument>appTypeName=mss</argument>
<argument>-F</argument>
<argument>applicationRevision=${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.nextIncrementalVersion}</argument>
<argument>-F</argument>
<argument>uploadedFileName=${artifactId}-${version}.jar</argument>
<argument>-F</argument>
<argument>runtimeProperties=runtimeProperties=[{"key":"k1","value":"e1"}]</argument>
<argument>-F</argument>
<argument>tags=[{"key":"k1","value":"t1"}]</argument>
<argument>-F</argument>
<argument>fileupload=@${project.build.directory}/${artifactId}-${version}.jar</argument>
<argument>-F</argument>
<argument>isFileAttached=true</argument>
<argument>-F</argument>
<argument>isNewVersion=true</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.7</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<microservice.mainClass>org.wso2.carbon.mss.sample.Application</microservice.mainClass>
<appcloud.version>1.0.7</appcloud.version>
</properties>
[1] https://docs.wso2.com/display/AppCloud/Published+APIs
Comments
Post a Comment