In the part 1 I have shown how to setup a simple CI environment and how to build a Service Bus project using Maven. In this part I will try to make a release pipeline which builds, deploys, tests, packages and release a whole service using Jenkins and if all successful and finally install the artifact in Nexus.
Lets start where we left of. Startup Tomcat and log into Jenkins. We need some sort of plugin to be able to run multiple actions in a sequence. Jenkins has alot of plugins but the one which I am going to use is the MultiJob one. Go to Manage Jenkins->Manage plugins, choose the available tab, check the Multijob plugin and click Install without restart.
The multi-job plugin can chain jobs together and share variables and artifact between jobs. You can make very intricate jobs but for now I will keep it simple. I will make 1 job that will:
- Build the service bus component which also refers to a SharedObjects project and deploy it to my server
- Build the soa component which also refers to the MDS and deploy it to my server
- Run the matching soap ui test
- If succesfull, install the artifact to nexus
I have created a simple HelloService which first goes to the SB and then routes to a SOA component. The SB component makes use of a SharedObjects SB project which holds the WSDL and XSD. This project is setup so you don’t have to sync between this project and the MDS. This because the SB isn’t able yet to access the MDS. The SOA component does nothing else the return a string response. So the setup will look like this:
So the first job we have to create is one which builds and deploys an SB project using maven. We will have to have 2 jobs as we want to deploy the SharedObjects project and we want to deploy the SB service afterwards. Lets make the SharedObject first. This is an easy one as it has no references to any other project.
Create a new Jenkins job called OSB – SharedObjects which is based on a maven project. The .pom file is very simple. This will look like this:
4.0.0 com.oracle.servicebus sbar-project-common 12.1.3-0-0 nl.cvgz GedeeldeObjecten 1.0 sbar
As a maven goal we can just use the following command to build and deploy the SharedObject project to the designated server:
clean pre-integration-test -DoracleHome=${oracleHome} -DoracleServerUrl=${osbServername} -DoracleUsername=${osbUsername} -DoraclePassword=${osbPassword}
You can insert the variables from a property file as you can see. Now lets try this first job and see how it runs.
Started by user Hugo Hendriks [EnvInject] - Loading node environment variables. Building in workspace D:\tomcatfiles\.jenkins\jobs\OSB - GedeeldeObjecten\workspace Cleaning local Directory GedeeldeObjecten Checking out svn://hendriksh@u10023o/mmi/trunk/OSB/GedeeldeObjecten at revision '2015-02-18T19:18:29.973 +0100' A GedeeldeObjecten.jpr A apps A apps\services A apps\services\HelloService A apps\services\HelloService\1.0 A apps\services\HelloService\1.0\HelloService.wsdl A apps\services\HelloService\1.0\cdm.xsd A apps\services\HelloService\1.0\HelloService.xsd A servicebus.sboverview A alerts A alerts\Log.alert A alerts\ErrorDestination.alert A pom.xml U . At revision 927 Cleaning local Directory Build Checking out svn://hendriksh@u10023o/mmi/trunk/build at revision '2015-02-18T19:18:29.973 +0100' A build-env-TST.properties A build-env-ONT.properties At revision 927 no change for svn://hendriksh@u10023o/mmi/trunk/OSB/GedeeldeObjecten since the previous build no change for svn://hendriksh@u10023o/mmi/trunk/build since the previous build [EnvInject] - Executing scripts and injecting environment variables after the SCM step. [EnvInject] - Injecting as environment variables the properties file path 'Build/build-env-ONT.properties' [EnvInject] - Variables injected successfully. Parsing POMs [GedeeldeObjecten] $ D:\ProgramFiles\Java\jdk1.7.0_71/bin/java -cp D:\tomcatfiles\.jenkins\plugins\maven-plugin\WEB-INF\lib\maven31-agent-1.5.jar;D:\ProgramFiles\Apache\apache-maven-3.2.3\boot\plexus-classworlds-2.5.1.jar;D:\ProgramFiles\Apache\apache-maven-3.2.3/conf/logging jenkins.maven3.agent.Maven31Main D:\ProgramFiles\Apache\apache-maven-3.2.3 D:\ProgramFiles\Apache\Tomcat8.0\webapps\jenkins\WEB-INF\lib\remoting-2.48.jar D:\tomcatfiles\.jenkins\plugins\maven-plugin\WEB-INF\lib\maven31-interceptor-1.5.jar D:\tomcatfiles\.jenkins\plugins\maven-plugin\WEB-INF\lib\maven3-interceptor-commons-1.5.jar 58198 <===[JENKINS REMOTING CAPACITY]===>���channel started Executing Maven: -B -f D:\tomcatfiles\.jenkins\jobs\OSB - GedeeldeObjecten\workspace\GedeeldeObjecten\pom.xml clean pre-integration-test -DoracleHome=[MY-ORACLEHOME] -DoracleServerUrl=http://[MY-SERVER] -DoracleUsername=[MY-USER] -DoraclePassword=[MY-PASSWORD] [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building GedeeldeObjecten 1.0 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ GedeeldeObjecten --- [INFO] [INFO] --- oracle-servicebus-plugin:12.1.3-0-0:package (default-package) @ GedeeldeObjecten --- [INFO] [INFO] --- oracle-servicebus-plugin:12.1.3-0-0:deploy (default-deploy) @ GedeeldeObjecten --- [INFO] Service Bus Archive deployed using session Service_Bus_Maven-GedeeldeObjecten-1424283534524. Diagnostic XML Bean debug log file created: C:\Windows\TEMP\xmlbeandebug7850265000274769465.log [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 02:37 min [INFO] Finished at: 2015-02-18T19:21:15+01:00 [INFO] Final Memory: 22M/362M [INFO] ------------------------------------------------------------------------ [JENKINS] Archiving D:\tomcatfiles\.jenkins\jobs\OSB - GedeeldeObjecten\workspace\GedeeldeObjecten\pom.xml to nl.cvgz/GedeeldeObjecten/1.0/GedeeldeObjecten-1.0.pom [JENKINS] Archiving D:\tomcatfiles\.jenkins\jobs\OSB - GedeeldeObjecten\workspace\GedeeldeObjecten\.data\maven\sbconfig.sbar to nl.cvgz/GedeeldeObjecten/1.0/GedeeldeObjecten-1.0.sbar D:/tomcatfiles/.jenkins/jobs/OSB - GedeeldeObjecten/workspace/GedeeldeObjecten/pom.xml is not inside D:/tomcatfiles/.jenkins/jobs/OSB - GedeeldeObjecten/workspace/GedeeldeObjecten/GedeeldeObjecten/; will archive in a separate pass D:/tomcatfiles/.jenkins/jobs/OSB - GedeeldeObjecten/workspace/GedeeldeObjecten/.data/maven/sbconfig.sbar is not inside D:/tomcatfiles/.jenkins/jobs/OSB - GedeeldeObjecten/workspace/GedeeldeObjecten/GedeeldeObjecten/; will archive in a separate pass channel stopped Finished: SUCCESS
As you can see….success!
The next bit will be to make a job which deploys the HelloService SB component. This job will actually be quite the same as the previous one except for the fact that it references the SharedObjects project. If you run the normal maven build, it will complain that it can’t find the shared resources. The way to solve this, is to also checkout the SharedObject project during the build in your workspace. This way it can find the project compile time.
Started by user Hugo Hendriks [EnvInject] - Loading node environment variables. Building in workspace D:\tomcatfiles\.jenkins\jobs\OSB - Service\workspace Cleaning local Directory HelloService_v1.0 Checking out svn://hendriksh@u10023o/mmi/trunk/OSB/HelloService_v1.0 at revision '2015-02-18T19:31:12.398 +0100' A pom.xml A Business A Business\HelloService.bix A LogPipeline.pipeline A HelloPipeline.pipeline A Proxy A HelloService_v1.0.jpr A ValidatePipeline.pipeline A HelloService.proxy A servicebus.sboverview At revision 927 Cleaning local Directory GedeeldeObjecten Checking out svn://hendriksh@u10023o/mmi/trunk/OSB/GedeeldeObjecten at revision '2015-02-18T19:31:12.398 +0100' A GedeeldeObjecten.jpr A apps A apps\services A apps\services\HelloService A apps\services\HelloService\1.0 A apps\services\HelloService\1.0\HelloService.wsdl A apps\services\HelloService\1.0\cdm.xsd A apps\services\HelloService\1.0\HelloService.xsd A servicebus.sboverview A alerts A alerts\Log.alert A alerts\ErrorDestination.alert A pom.xml U . At revision 927 Cleaning local Directory Build Checking out svn://hendriksh@u10023o/mmi/trunk/build at revision '2015-02-18T19:31:12.398 +0100' A build-env-TST.properties A build-env-ONT.properties At revision 927 Cleaning local Directory Customization Checking out svn://hendriksh@u10023o/mmi/trunk/OSB/Customization at revision '2015-02-18T19:31:12.398 +0100' A all_BS_ACC.xml A all_BS_TST.xml A all_BS_ONT.xml At revision 927 no revision recorded for svn://hendriksh@u10023o/mmi/trunk/OSB/HelloService_v1.0 in the previous build no change for svn://hendriksh@u10023o/mmi/trunk/build since the previous build no change for svn://hendriksh@u10023o/mmi/trunk/OSB/Customization since the previous build [EnvInject] - Injecting environment variables from a build step. [EnvInject] - Injecting as environment variables the properties file path 'Build/build-env-ONT.properties' [EnvInject] - Variables injected successfully. Parsing POMs Modules changed, recalculating dependency graph [HelloService_v1.0] $ D:\ProgramFiles\Java\jdk1.7.0_71/bin/java -cp D:\tomcatfiles\.jenkins\plugins\maven-plugin\WEB-INF\lib\maven31-agent-1.5.jar;D:\ProgramFiles\Apache\apache-maven-3.2.3\boot\plexus-classworlds-2.5.1.jar;D:\ProgramFiles\Apache\apache-maven-3.2.3/conf/logging jenkins.maven3.agent.Maven31Main D:\ProgramFiles\Apache\apache-maven-3.2.3 D:\ProgramFiles\Apache\Tomcat8.0\webapps\jenkins\WEB-INF\lib\remoting-2.48.jar D:\tomcatfiles\.jenkins\plugins\maven-plugin\WEB-INF\lib\maven31-interceptor-1.5.jar D:\tomcatfiles\.jenkins\plugins\maven-plugin\WEB-INF\lib\maven3-interceptor-commons-1.5.jar 58247 <===[JENKINS REMOTING CAPACITY]===>���channel started Executing Maven: -B -f D:\tomcatfiles\.jenkins\jobs\OSB - Service\workspace\HelloService_v1.0\pom.xml clean pre-integration-test -DoracleHome=[MY-ORACLEHOME] -DoracleServerUrl={MY-SERVER} -DoracleUsername=[MY-USER] -DoraclePassword=[MY-PASSWORD] [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building HelloService 1.0 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ HelloService --- [INFO] [INFO] --- oracle-servicebus-plugin:12.1.3-0-0:package (default-package) @ HelloService --- [INFO] [INFO] --- oracle-servicebus-plugin:12.1.3-0-0:deploy (default-deploy) @ HelloService --- [INFO] Service Bus Archive deployed using session Service_Bus_Maven-HelloService-1424284297240. [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 34.955 s [INFO] Finished at: 2015-02-18T19:31:56+01:00 [INFO] Final Memory: 23M/226M [INFO] ------------------------------------------------------------------------ Waiting for Jenkins to finish collecting data [JENKINS] Archiving D:\tomcatfiles\.jenkins\jobs\OSB - Service\workspace\HelloService_v1.0\pom.xml to nl.cvgz/HelloService/1.0/HelloService-1.0.pom [JENKINS] Archiving D:\tomcatfiles\.jenkins\jobs\OSB - Service\workspace\HelloService_v1.0\.data\maven\sbconfig.sbar to nl.cvgz/HelloService/1.0/HelloService-1.0.sbar channel stopped Finished: SUCCESS
Also success! So we now have 2 separate jobs:
- OSB – SharedObjects = which builds and deploys your SharedObject project.
- OSB – Service = which builds and deploys your HelloService project.
The next thing is to do the same for the SOA component. I actually want a SOA – MDS jenkins job which zips and deploys the MDS but it seems Oracle doesn’t support the deployment of the MDS through maven yet. I have heard rumors though that you can zip it and deploy it using the normal maven plugins. I am able to zip the apps directory but I haven’t been able to deploy it yet so if anyone knows how to do this….let me know 🙂
The last job is a SOA – Service job which builds and deploys the SOA component. When you create a SOA project you get a pom with it. To make this work with the MDS you do have to tweak it here and there. The problem is that the MDS reference is made through the application which references the adf-config.xml. Lets start of with the adf-config.xml which is located in .adf\META-INF. You should make a MDS like this:
As you can see we made the metadata-path for the /apps settable using a variable soamds.apps.home. So now you can set the directory of your apps of your application which holds the soa project. Now for the last bit….the .pom file of you soa project. As I said, you will have to tweak some settings here as it doesn’t completely work out of the box. You should make the following adjustments:
4.0.0 VGZ-SOA-Application HelloService 1.0 sar com.oracle.soa sar-common 12.1.3-0-0 ${project.basedir}\SOA/ ${project.basedir}/target ${scac.input.dir}/composite.xml ${scac.output.dir}/out.xml ${scac.output.dir}/error.txt 1 ${project.artifactId} ${project.version} default ${oracleServerUrl} ${oracleUsername} ${oraclePassword} true true false false ${scac.output.dir}/testResult ${project.artifactId}com.oracle.soa.plugin oracle-soa-plugin 12.1.3-0-0 ${project.artifactId} ${scac.input} ${scac.output.dir}/sca_${project.artifactId}_rev${composite.revision}.jar ${serverUrl} ../../../ ${project.version} ${composite.revision} ${scac.input.dir} ${user} ${password} ${input}true
You should add
../../../
to you plugin. This will have to point to the place where your application is located and thus where your .adf/META-INF/adf-config.xml is also. In my case, that is 3 folders up when I do a checkout of my svn. You also have to fix
After you have done all this lets create a Jenkins job called SOA – Service and run the following maven command:
clean pre-integration-test -DoracleServerUrl=${soaServername} -DoracleUsername=${soaUsername} -DoraclePassword=${soaPassword}
Don’t forget to set soamds.apps.home=${workspace}\GedeeldeObjecten as environment variable and to also checkout the application.jws including .adf/META-INF/adf-config.xml. Now lets give the job a spin:
Started by user Hugo Hendriks [EnvInject] - Loading node environment variables. Building in workspace D:\tomcatfiles\.jenkins\jobs\SOA - Service\workspace Cleaning local Directory . Checking out svn://hendriksh@u10023o/mmi/trunk/services at revision '2015-02-18T20:23:09.684 +0100' A VGZ-SOA-Application.jws U . At revision 927 Cleaning local Directory .adf Checking out svn://hendriksh@u10023o/mmi/trunk/services/.adf at revision '2015-02-18T20:23:09.684 +0100' A META-INF A META-INF\adf-config.xml At revision 927 Cleaning local Directory GedeeldeObjecten/apps Checking out svn://hendriksh@u10023o/mmi/trunk/OSB/GedeeldeObjecten/apps at revision '2015-02-18T20:23:09.684 +0100' A services\HelloService A services\HelloService\1.0 A services\HelloService\1.0\HelloService.xsd A services\HelloService\1.0\HelloService.wsdl A services\HelloService\1.0\cdm.xsd U . At revision 927 Cleaning local Directory HelloService_v1.0/soa/HelloService_v1.0 Checking out svn://hendriksh@u10023o/mmi/trunk/services/HelloService_v1.0/soa/HelloService_v1.0 at revision '2015-02-18T20:23:09.684 +0100' A HelloService_v1.0.jpr A SOA A SOA\composite.xml A SOA\Schemas A SOA\Events A SOA\Mediators A SOA\Mediators\HelloMediator.mplan A SOA\measurements.xml A SOA\Transformations A SOA\WSDLs A SOA\testsuites A SOA\testsuites\fileList.xml A pom.xml U . At revision 927 Cleaning local Directory Build Checking out svn://hendriksh@u10023o/mmi/trunk/build at revision '2015-02-18T20:23:09.684 +0100' A build-env-TST.properties A build-env-ONT.properties At revision 927 no change for svn://hendriksh@u10023o/mmi/trunk/services/.adf since the previous build no revision recorded for svn://hendriksh@u10023o/mmi/trunk/services/HelloService_v1.0/soa/HelloService_v1.0 in the previous build no change for svn://hendriksh@u10023o/mmi/trunk/build since the previous build [EnvInject] - Injecting environment variables from a build step. [EnvInject] - Injecting as environment variables the properties file path 'Build/build-env-ONT.properties' [EnvInject] - Variables injected successfully. [EnvInject] - Injecting as environment variables the properties content soamds.apps.home=${workspace}\GedeeldeObjecten [EnvInject] - Variables injected successfully. Parsing POMs Modules changed, recalculating dependency graph [HelloService_v1.0] $ D:\ProgramFiles\Java\jdk1.7.0_71/bin/java -cp D:\tomcatfiles\.jenkins\plugins\maven-plugin\WEB-INF\lib\maven31-agent-1.5.jar;D:\ProgramFiles\Apache\apache-maven-3.2.3\boot\plexus-classworlds-2.5.1.jar;D:\ProgramFiles\Apache\apache-maven-3.2.3/conf/logging jenkins.maven3.agent.Maven31Main D:\ProgramFiles\Apache\apache-maven-3.2.3 D:\ProgramFiles\Apache\Tomcat8.0\webapps\jenkins\WEB-INF\lib\remoting-2.48.jar D:\tomcatfiles\.jenkins\plugins\maven-plugin\WEB-INF\lib\maven31-interceptor-1.5.jar D:\tomcatfiles\.jenkins\plugins\maven-plugin\WEB-INF\lib\maven3-interceptor-commons-1.5.jar 58351 <===[JENKINS REMOTING CAPACITY]===>���channel started Executing Maven: -B -f D:\tomcatfiles\.jenkins\jobs\SOA - Service\workspace\HelloService_v1.0\soa\HelloService_v1.0\pom.xml clean pre-integration-test -DoracleServerUrl=[MY-SERVER] -DoracleUsername=[MY-USER] -DoraclePassword=[MY-PASSWORD] [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building HelloService 1.0 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ HelloService --- [INFO] [INFO] --- maven-resources-plugin:2.7:resources (default-resources) @ HelloService --- [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory D:\tomcatfiles\.jenkins\jobs\SOA - Service\workspace\HelloService_v1.0\soa\HelloService_v1.0\src\main\resources [INFO] [INFO] --- oracle-soa-plugin:12.1.3-0-0:compile (default-compile) @ HelloService --- [INFO] ------------------------------------------------------------------------ [INFO] ORACLE SOA MAVEN PLUGIN - COMPILE [INFO] ------------------------------------------------------------------------ [INFO] [INFO] ABOUT TO RUN oracle.soa.scac.ValidateComposite... [INFO] compile: Executing: [cmd:[D:\ProgramFiles\Java\jdk1.7.0_71\bin\java, -Djava.protocol.handler.pkgs=oracle.mds.net.protocol|oracle.fabric.common.classloaderurl.handler|oracle.fabric.common.uddiurl.handler, oracle.soa.scac.ValidateComposite, D:\tomcatfiles\.jenkins\jobs\SOA - Service\workspace\HelloService_v1.0\soa\HelloService_v1.0\SOA//composite.xml, -level=1, -appHome=../../../]] [INFO] Process being executed, waiting for completion. [INFO] [exec] 2015-02-18 20:23:35.950/4.421 Oracle Coherence 12.1.3.0.0(thread=main, member=n/a): Loaded operational configuration from "jar:file:/D:/ProgramFiles/Apache/apache-maven-repository/com/oracle/coherence/coherence/12.1.3-0-0/coherence-12.1.3-0-0.jar!/tangosol-coherence.xml" [INFO] [exec] 2015-02-18 20:23:36.091/4.562 Oracle Coherence 12.1.3.0.0 (thread=main, member=n/a): Loaded operational overrides from "jar:file:/D:/ProgramFiles/Apache/apache-maven-repository/com/oracle/coherence/coherence/12.1.3-0-0/coherence-12.1.3-0-0.jar!/tangosol-coherence-override-dev.xml" [INFO] [exec] 2015-02-18 20:23:36.091/4.562 Oracle Coherence 12.1.3.0.0 (thread=main, member=n/a): Optional configuration override "/tangosol-coherence-override.xml" is not specified [INFO] [exec] 2015-02-18 20:23:36.107/4.578 Oracle Coherence 12.1.3.0.0 (thread=main, member=n/a): Optional configuration override "cache-factory-config.xml" is not specified [INFO] [exec] 2015-02-18 20:23:36.107/4.578 Oracle Coherence 12.1.3.0.0 (thread=main, member=n/a): Optional configuration override "cache-factory-builder-config.xml" is not specified [INFO] [exec] 2015-02-18 20:23:36.107/4.578 Oracle Coherence 12.1.3.0.0 (thread=main, member=n/a): Optional configuration override "/custom-mbeans.xml" is not specified [INFO] [exec] [INFO] [exec] Oracle Coherence Version 12.1.3.0.0 Build 52031 [INFO] [exec] Grid Edition: Development mode [INFO] [exec] Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. [INFO] [exec] [INFO] [exec] 2015-02-18 20:23:36.247/4.718 Oracle Coherence GE 12.1.3.0.0 (thread=main, member=n/a): Created cache factory com.tangosol.net.DefaultConfigurableCacheFactory [INFO] [exec] Feb 18, 2015 8:23:37 PM oracle.fabric.common.wsdl.SchemaManager isIncrementalBuildSupported [INFO] [exec] INFO: XMLSchema incremental build enabled. [INFO] [exec] Mediators/HelloMediator.mplan: warning: Assigning property/constant "concat("Hallo ", $in.payload/tns:HelloRequest/tns:Naam)" to element "$out.payload/tns:HelloResponse/tns:begroeting". Please make sure target is single leaf node, otherwise non-leaf node will contain only string value which may generate non-valid xml as per the xsd. [INFO] compile: [cmd:[D:\ProgramFiles\Java\jdk1.7.0_71\bin\java, -Djava.protocol.handler.pkgs=oracle.mds.net.protocol|oracle.fabric.common.classloaderurl.handler|oracle.fabric.common.uddiurl.handler, oracle.soa.scac.ValidateComposite, D:\tomcatfiles\.jenkins\jobs\SOA - Service\workspace\HelloService_v1.0\soa\HelloService_v1.0\SOA//composite.xml, -level=1, -appHome=../../../]] exit code=0 [INFO] SOA COMPILE DONE [INFO] [INFO] --- maven-resources-plugin:2.7:testResources (default-testResources) @ HelloService --- [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] skip non existing resourceDirectory D:\tomcatfiles\.jenkins\jobs\SOA - Service\workspace\HelloService_v1.0\soa\HelloService_v1.0\src\test\resources [INFO] [INFO] --- maven-compiler-plugin:3.2:testCompile (default-testCompile) @ HelloService --- [INFO] No sources to compile [INFO] [INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ HelloService --- [INFO] No tests to run. [JENKINS] Recording test results [INFO] [INFO] --- oracle-soa-plugin:12.1.3-0-0:sar (default-sar) @ HelloService --- [INFO] Building sar: D:\tomcatfiles\.jenkins\jobs\SOA - Service\workspace\HelloService_v1.0\soa\HelloService_v1.0\target\sca_HelloService_rev1.0.jar [INFO] [INFO] --- oracle-soa-plugin:12.1.3-0-0:deploy (default-deploy) @ HelloService --- [INFO] ------------------------------------------------------------------------ [INFO] ORACLE SOA MAVEN PLUGIN - DEPLOY COMPOSITE [INFO] ------------------------------------------------------------------------ [INFO] [INFO] setting user/password..., user=weblogic Processing sar=D:\tomcatfiles\.jenkins\jobs\SOA - Service\workspace\HelloService_v1.0\soa\HelloService_v1.0/target/sca_HelloService_rev1.0.jar Adding sar file - D:\tomcatfiles\.jenkins\jobs\SOA - Service\workspace\HelloService_v1.0\soa\HelloService_v1.0\target\sca_HelloService_rev1.0.jar INFO: Creating HTTP connection to host:[MY-SERVER], port:[MY-PORT] INFO: Received HTTP response from the server, response code=200 ---->Deploying composite success. [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 21.328 s [INFO] Finished at: 2015-02-18T20:23:41+01:00 [INFO] Final Memory: 27M/356M [INFO] ------------------------------------------------------------------------ Waiting for Jenkins to finish collecting data [JENKINS] Archiving D:\tomcatfiles\.jenkins\jobs\SOA - Service\workspace\HelloService_v1.0\soa\HelloService_v1.0\pom.xml to VGZ-SOA-Application/HelloService/1.0/HelloService-1.0.pom [JENKINS] Archiving D:\tomcatfiles\.jenkins\jobs\SOA - Service\workspace\HelloService_v1.0\soa\HelloService_v1.0\target\sca_HelloService_rev1.0.jar to VGZ-SOA-Application/HelloService/1.0/HelloService-1.0.jar channel stopped Archiving artifacts Finished: SUCCESS
Perfect! As a final we can make a job to run a unit test against the just deployed server. I already made a description of how to do this here.
Now for the multijob. This will be a Release-Service job which calls all of the above step in a specific order. In the end you can use the CopyArtifact plugin to copy all of the generated artifacts into the Release-Service job. You can then zip these. I’m using the promote plugin to authorize the upload of the zip into Nexus. So the job looks like this now:
The stars on the left side will tell you that these where builds which where promoted and ended up in Nexus. I’m using a windows batch command to upload the zip to Nexus like this:
mvn deploy:deploy-file -Durl=[MY-SERVER] -DrepositoryId=local-nexus -DgroupId=nl.cvgz.mmi.services -DartifactId=%servicenaamkort% -Dversion=%serviceversie% -Dpackaging=zip -Dfile=target/%servicenaam%.zip
And finally they will end up in Nexus then. A zip which will contain:
- OSB/SharedObject.sbar
- OSB/Service.sbar
- OSB/Customizations. Directory with customizations files for DTAP
- SOA/MDS.zip
- SOA/Service.jar
So this could possibly be a way to automatically build, deploy, test, package and release a whole service using Jenkins. Some issues which I haven’t solved yet:
- It seems adding a customization file during the deploy of the SB component gives an error. Could be a bug though.
- Deploying the MDS.zip to the soa server through maven. If you know how to do this….drop me a line please
Pingback: SOA & BPM Community Newsletter March 2015 | SOA Community Blog
Hi Hendriks.., Thanks for sharing the info. It really helped a lot.
I am encountring below error while running the “mvn package” command to create a .sbar file
Please help..
C:MavenTestHelloOSB>mvn package
[INFO] Scanning for projects…
[ERROR] [ERROR] Some problems were encountered while processing the POMs:
[WARNING] ‘parent.relativePath’ of POM ServiceBusApplication1:HelloOSB:1.0-SNAPS
HOT (C:MavenTestHelloOSBpom.xml) points a
t ServiceBusApplication1:HelloOSB instead of com.oracle.servicebus:sbar-project-
common, please verify your project structure @ line 5, column 9
[FATAL] Non-resolvable parent POM for ServiceBusApplication1:HelloOSB:1.0-SNAPSH
OT: Failure to find com.oracle.servicebus:sbar-project-common:pom:12.1.3-0-0 in
https://repo.maven.apache.org/maven2 was cached in the local repository, resolut
ion will not be reattempted until the update interval of central has elapsed or
updates are forced and ‘parent.relativePath’ points at wrong local POM @ line 5,
column 9
Hi Raghu,
It looks like that in the pom.xml of the project you are building, you refer to an unknown parent. Usually your parent section of your pom will look like this:
Make sure you have put these artifacts into your Maven repo with the synchronisation plugin….see here
Pingback: CI using Oracle Fusion Middleware 12C: Part 2. Building a SB and SOA project using maven and the MDS by Hugo Hendriks | SOA Community Blog
How to package all OSB Projects into single sbar (jar)
In this case I recommend to you the use of: Exporting an Oracle Service Bus Configuration Offline (https://docs.oracle.com/cd/E29542_01/dev.1111/e15866/app_export.htm#OSBDV1969) you only need create a settings file (xml) and only you need to indicate all the projects that you wanna package in a single sbar or jar.
Example:
Assume one OSB Application might have 10 projects.
For each project a sbar file is created and deployed in separate osb session.
How to package and deploy all 10 projects in one session.
I don’t know if you can deploy them all in one session but you can look into the inheritance capabilities of Maven. You could make one parent pom file which has all the OSB projects as modules. This way you can build and deploy them but not just in 1 servicebus session.
Pingback: OFM 12C: Running WLST scripts using the weblogic-maven-plugin in your build pipeline
Hi,
How to package & deploy OSB12c application using ant?
Requesting you help in same.
Regards,
Kunal Parsewar
Hi Kunal,
I guess you can use the 11G scripts if you wanted. You can find several good blogs about how to do this. I have no experience with packaging and deploying 12C OSB projects using ant.
Hey,
Thanks for your post it’s been very helpful.
How do you deal with custom settings that may be environment specific and that in my experience are not covered by and OSB Customization file like Service Accounts Username/Passwords or JCA physical and archive directories.
Also for SCA composites there may be also things that can change per environment and so youll have to create a config plan tailored for such environment…
Is this something you have done for 12c with Maven or custom scripts?
Hi Sam,
For the OSB part we use a seperate OSB project called something like Settings. This project contains all ServiceAccounts with username and passwords which like you said, cannot be updated using a customization file. It’s the task of operations to maintain these. If something extra is needed in here, it has to be written down in the installation manual. You could of course try and build your own customization mechanism by using the replacer plugin in your pom when building sbar project. This could be used for items which operations have no issue with you knowing…such as JCA physical and archive directories but probably not production username and passwords 🙂
For SCA we use server tokens: http://biemond.blogspot.nl/2013/04/token-configurations-in-oracle-soa.html and we don’t have much other customizations here but like above, you could also use the replacer plugin to replace certain values.
regards,
Hugo
Pingback: SOA Suite 12C: Add version information to your ServiceBus projects using custom maven plugin
Pingback: Oracle Fusion Middleware 12C: Deploy the MDS using Maven
Pingback: Add version information to your ServiceBus projects
Hi Hugo,
I need help, regarding the cleaning the jar file, not able to delete the jar file which was created by previous build..
Jenkins running on Tomcat, Getting code from TFS and build sar and deploying it on Weblogic. for next build we need to clean the workspace to get the new changes from TFS to local workspace to build and deploy new SAR..
But while cleaning the workspace, Jenkins unable to clean the existing jar file..
getting error “device or resource busy “.
How to release the services after deploy.. Can you please help me on this..
Hi Arjun,
you can try and install a jenkins plugin which explicit cleans the workspace before or after a build. Check it out….https://wiki.jenkins.io/display/JENKINS/Workspace+Cleanup+Plugin. Hopefully this will clean your workspace.
best regards,
Hugo
Hi Hugo,
I am using the above said plugin.. But still not able to clean jar..
Regards,
Arjun Gavini
Hi Arjun,
That is weird. You can try to add -X to your Maven command to get some debug information why it can’t clean the jar. I have no idea….maybe a file system lock or something?