{"id":1862,"date":"2012-09-06T19:00:00","date_gmt":"2012-09-06T19:00:00","guid":{"rendered":"http:\/\/www.javacodegeeks.com\/2012\/10\/jenkins-deploying-jee-artifacts.html"},"modified":"2012-10-22T06:59:48","modified_gmt":"2012-10-22T06:59:48","slug":"jenkins-deploying-jee-artifacts","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2012\/09\/jenkins-deploying-jee-artifacts.html","title":{"rendered":"Jenkins: Deploying JEE Artifacts"},"content":{"rendered":"<div dir=\"ltr\" style=\"text-align: left\">With the advent of          <i>Continuous Integration<\/i>         and          <i>Continuous Delivery<\/i>        , our builds are split into different steps creating the deployment pipeline. Some of these steps can be for example compile and run fast tests, run slow tests, run automated acceptance tests, or releasing the application, to cite a few.<\/p>\n<p>The final steps of our deployment pipeline, implies a deployment of our product (in case of           <i>JEE<\/i> project a           <i>war<\/i> or           <i>ear<\/i>) to production-like environment, for UAT or to production system when product is released.<br \/>\nIn this post we are going to see how we can configure           <strong>Jenkins<\/strong> to manage the deployment of a           <i>Java<\/i> Enterprise Application correctly. <\/p>\n<p>First thing to do is creating  the application, in this case a very simple web application in            <i>Java<\/i> (in fact is only one            <i>jsp<\/i> which prints a            <i>Hello World!!<\/i> message) and            <i>mavenize <\/i>it to create a            <i>war<\/i> file (           <i>bar.war<\/i>) when            <i>package<\/i> goal is executed.                                         <\/p>\n<p>Then we need to create a            <strong>Jenkins<\/strong> job (called            <i>bar-web<\/i>) which is the responsible of compiling, and running unit tests.                                  <\/p>\n<p>After this job would  come other jobs like running integration tests, running more tests, static code analysis (aka code quality), or uploading artifacts to  artifacts repository but won&#8217;t be shown here.<br \/>\nAnd finally, the last steps which imply deploying previous generated code to staging environment (for running            <i>User Acceptance Tests<\/i> for example) and after key users give the ok, deploying to production environment.<br \/>\nSo let&#8217;s see how to create these final steps in           <strong>Jenkins<\/strong>. Note that binary file created in previous steps  (          <i>bar-web<\/i> in our case) must be used in all these steps. This is because of two reasons, the first one is that your deployment pipeline should be run as fast as possible and obviously compiling in each step the code is not the best way to get it, the second one is that each time you compile your sources, increases the chance of not being compiling sources of previous steps. To achieve this goal we can follow two strategies, the first one is uploading binary files to artifact repository (like           <i>Nexus<\/i> or           <i>Artifactory<\/i>) and get from there in each job. The second one is using           <i>copy-artifacts<\/i>           <strong>Jenkins<\/strong> plugin to get binary files generated by previous step.          <\/p>\n<p>Let&#8217;s see how to configure           <strong>Jenkins<\/strong> for the first approach.          <\/p>\n<p>Using artifact repository approach, requires that you download the version we want to deploy from repository and then deploy it to external environment; in our case deploying to a web server.  All these steps are done by using          <i> maven-cargo-plugin<\/i>.<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<pre class=\"brush:java\"> &lt;build&gt;\r\n  &lt;plugins&gt;\r\n   &lt;plugin&gt;\r\n    &lt;groupId&gt;org.codehaus.cargo&lt;groupId&gt;\r\n    &lt;artifactId&gt;cargo-maven2-plugin&lt;artifactId&gt;\r\n    &lt;version&gt;1.0&lt;version&gt;\r\n \r\n    &lt;!-- Container configuration --&gt;\r\n    &lt;container&gt;\r\n     &lt;containerId&gt;tomcat6x&lt;containerId&gt;\r\n     &lt;type&gt;remote&lt;type&gt;\r\n    &lt;container&gt;\r\n    &lt;configuration&gt;          \r\n     &lt;type&gt;runtime&lt;type&gt;\r\n     &lt;properties&gt;\r\n      &lt;cargo.remote.username&gt;admin&lt;cargo.remote.username&gt;\r\n      &lt;cargo.remote.password&gt;&lt;cargo.remote.password&gt;\r\n      &lt;cargo.tomcat.manager.url&gt;http:localhost:8888manager&lt;cargo.tomcat.manager.url&gt;\r\n     &lt;properties&gt;\r\n    &lt;configuration&gt;\r\n    &lt;deployer&gt;\r\n                          &lt;deployables&gt;\r\n                              &lt;deployable&gt;\r\n                                  &lt;groupId&gt;com.lordofthejars.bar&lt;groupId&gt;\r\n                                  &lt;artifactId&gt;bar-web&lt;artifactId&gt;\r\n                                  &lt;type&gt;war&lt;type&gt;\r\n                              &lt;deployable&gt;\r\n                          &lt;deployables&gt;\r\n                 &lt;deployer&gt;\r\n   &lt;plugin&gt;\r\n  &lt;plugins&gt;\r\n &lt;build&gt;\r\n \r\n &lt;dependencies&gt;\r\n         &lt;dependency&gt;\r\n             &lt;groupId&gt;com.lordofthejars.bar&lt;groupId&gt;\r\n             &lt;artifactId&gt;bar-web&lt;artifactId&gt;\r\n             &lt;type&gt;war&lt;type&gt;\r\n             &lt;version&gt;${target.version}&lt;version&gt;\r\n         &lt;dependency&gt;\r\n &lt;dependencies&gt;\r\n<\/pre>\n<p>Then we only have to create a new           <strong>Jenkins<\/strong> job, named           <i>bar-to-staging, <\/i>which will run           <i>cargo:redeploy <\/i>         <strong>Maven<\/strong> goal, and           <i>Cargo<\/i> plugin will be the responsible to deploy           <i>bar-web<\/i> to web server.          <\/p>\n<p>This approach has one advantage and one disadvantage.  The main advantage is that you are not bound to           <strong>Jenkins<\/strong>, you can use           <strong>Maven<\/strong> alone, or any other           <strong>CI<\/strong> that supports           <strong>Maven<\/strong>. The main disadvantage is that relies on artefacts repository, and this plan a new problem, deployment pipeline involves many steps, and between these steps (normally if you are building a snapshot version), a new artefact could be uploaded to artefacts repository with same version, and use it in the middle of pipeline execution. Of course this scenario can be avoided by managing permissions in artefact repository.                               <\/p>\n<p>The other approach is use           <strong>Jenkins<\/strong> plugin, called           <i>copy-artifact-plugin<\/i>. In this case           <strong>Jenkins<\/strong> acts as an artefact repository, so artifacts created in previous step are used in next step without involving any external repository. Using this approach we cannot use           <i>maven-cargo-plugin<\/i>, but we can use           <i>deploy- jenkins-plugin <\/i>in conjunction with           <i>copy-artifacts-plugin<\/i>.                               <\/p>\n<p>So let&#8217;s see how to implement this approach.          <\/p>\n<div class=\"separator\" style=\"clear: both;text-align: center\"><a href=\"http:\/\/1.bp.blogspot.com\/-0raEfIYp8tA\/UEhtBHU0bVI\/AAAAAAAAB1o\/2I5kCzSQ8J0\/s1600\/barWeb.JPG\"><img decoding=\"async\" border=\"0\" height=\"199\" src=\"http:\/\/1.bp.blogspot.com\/-0raEfIYp8tA\/UEhtBHU0bVI\/AAAAAAAAB1o\/2I5kCzSQ8J0\/s320\/barWeb.JPG\" width=\"320\" \/><\/a><\/div>\n<p>First thing is create a           <strong>Jenkins<\/strong>           <i>build job<\/i> (          <i>bar-web<\/i>), which creates the           <i>war<\/i> file. Note that two           <i>Post-build actions<\/i> are defined, first one is           <i>Archive the artifacts<\/i>, which is used to store generated files so           <i>copy artifacts plugin<\/i> can copy them to another workspace.  The other one is           <i>Build other projects<\/i>, which in this case, calls a job which is responsible of deploying           <i>war<\/i> file to staging directory (          <i>bar deploy-to-staging<\/i>).          <\/p>\n<p>Next thing is create           <i>bar deploy-to-staging<\/i> build job, which main action is deploying           <i>war<\/i> file generated by previous build job to           <i>Tomcat<\/i> server.          <\/p>\n<div class=\"separator\" style=\"clear: both;text-align: center\"><a href=\"http:\/\/1.bp.blogspot.com\/-uXGa2QZZoDI\/UEhtIOe3-tI\/AAAAAAAAB1w\/OPh-q3EHWBc\/s1600\/barStaging.JPG\"><img decoding=\"async\" border=\"0\" height=\"203\" src=\"http:\/\/1.bp.blogspot.com\/-uXGa2QZZoDI\/UEhtIOe3-tI\/AAAAAAAAB1w\/OPh-q3EHWBc\/s320\/barStaging.JPG\" width=\"320\" \/><\/a><\/div>\n<p>For this second build job, you should configure           <i>Copy artifacts plugin<\/i> to copy previous generated files to current workspace, so in           <i>Build section<\/i>, in           <i>Copy artifacts from another project <\/i>section, we set from which build job we want to copy the artifact (in our case           <i>bar-web<\/i>) and which artifacts we want to copy. And finally in           <i>Post-build actions section<\/i>, we must configure which file should be deployed to           <i>Tomcat<\/i> (          <i>bar.web<\/i>), remember that this file is the compiled and packaged by previous build jobs, and finally set           <i>Tomcat<\/i> parameters. And execution pipeline looks something like:          <\/p>\n<div class=\"separator\" style=\"clear: both;text-align: center\"><a href=\"http:\/\/3.bp.blogspot.com\/--ppTGlJqA7M\/UEhtNvAkU7I\/AAAAAAAAB14\/5OUiUbRJyjA\/s1600\/viewPipeline.JPG\"><img decoding=\"async\" border=\"0\" height=\"100\" src=\"http:\/\/3.bp.blogspot.com\/--ppTGlJqA7M\/UEhtNvAkU7I\/AAAAAAAAB14\/5OUiUbRJyjA\/s320\/viewPipeline.JPG\" width=\"320\" \/><\/a><\/div>\n<p>Note that a third           <i>build job<\/i> has been added which deploys           <i>war<\/i> file to production server.          <\/p>\n<p>This second approach is the counter part of the first approach, you can be sure that the artefact used in previous step of pipeline will be the one used in all steps, but you are bounded to           <strong>Jenkins\/Hudson<\/strong>.          <\/p>\n<p>So if you are going to create a policy in your artefact repository so only pipeline executor can upload artefacts to repository, first approach is better, but if you are not using an external artefact repository (you use           <strong>Jenkins<\/strong> as is) then second approach is the best one to assure that packaged artefact in previous steps are not modified by parallel steps.          <\/p>\n<p>After file is deployed to server, acceptance tests or UAT tests can be executed without any problem.          <\/p>\n<p>I wish that now we can address the final steps of our deployment pipeline in a secure and better way.          <\/p>\n<p><strong><i>Reference: <\/i><\/strong><a href=\"http:\/\/www.lordofthejars.com\/2012\/09\/deploying-jee-artifacts-with-jenkins.html\">Deploying JEE Artifacts with Jenkins<\/a> from our <a href=\"http:\/\/www.javacodegeeks.com\/p\/jcg.html\">JCG partner<\/a> Alex Soto at the <a href=\"http:\/\/www.lordofthejars.com\/\">One Jar To Rule Them All<\/a> blog.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>With the advent of Continuous Integration and Continuous Delivery , our builds are split into different steps creating the deployment pipeline. Some of these steps can be for example compile and run fast tests, run slow tests, run automated acceptance tests, or releasing the application, to cite a few. The final steps of our deployment &hellip;<\/p>\n","protected":false},"author":119,"featured_media":166,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[68,423,542],"class_list":["post-1862","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-apache-maven","tag-continuous-integration","tag-jenkins"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Jenkins: Deploying JEE Artifacts - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"With the advent of Continuous Integration and Continuous Delivery , our builds are split into different steps creating the deployment pipeline. Some of\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2012\/09\/jenkins-deploying-jee-artifacts.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Jenkins: Deploying JEE Artifacts - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"With the advent of Continuous Integration and Continuous Delivery , our builds are split into different steps creating the deployment pipeline. Some of\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2012\/09\/jenkins-deploying-jee-artifacts.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2012-09-06T19:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2012-10-22T06:59:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/jenkins-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Alex Soto\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@http:\/\/twitter.com\/alexsotob\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Alex Soto\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/jenkins-deploying-jee-artifacts.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/jenkins-deploying-jee-artifacts.html\"},\"author\":{\"name\":\"Alex Soto\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/6566a1238c71f5d85ba5b5df5d2eac59\"},\"headline\":\"Jenkins: Deploying JEE Artifacts\",\"datePublished\":\"2012-09-06T19:00:00+00:00\",\"dateModified\":\"2012-10-22T06:59:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/jenkins-deploying-jee-artifacts.html\"},\"wordCount\":977,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/jenkins-deploying-jee-artifacts.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/jenkins-logo.jpg\",\"keywords\":[\"Apache Maven\",\"Continuous Integration\",\"Jenkins\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/jenkins-deploying-jee-artifacts.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/jenkins-deploying-jee-artifacts.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/jenkins-deploying-jee-artifacts.html\",\"name\":\"Jenkins: Deploying JEE Artifacts - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/jenkins-deploying-jee-artifacts.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/jenkins-deploying-jee-artifacts.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/jenkins-logo.jpg\",\"datePublished\":\"2012-09-06T19:00:00+00:00\",\"dateModified\":\"2012-10-22T06:59:48+00:00\",\"description\":\"With the advent of Continuous Integration and Continuous Delivery , our builds are split into different steps creating the deployment pipeline. Some of\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/jenkins-deploying-jee-artifacts.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/jenkins-deploying-jee-artifacts.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/jenkins-deploying-jee-artifacts.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/jenkins-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/jenkins-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2012\\\/09\\\/jenkins-deploying-jee-artifacts.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Jenkins: Deploying JEE Artifacts\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/6566a1238c71f5d85ba5b5df5d2eac59\",\"name\":\"Alex Soto\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/cc3a211b790033d32fee33bb321b7bb6e2d381dab14531d3f2e8df9885bca7f9?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/cc3a211b790033d32fee33bb321b7bb6e2d381dab14531d3f2e8df9885bca7f9?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/cc3a211b790033d32fee33bb321b7bb6e2d381dab14531d3f2e8df9885bca7f9?s=96&d=mm&r=g\",\"caption\":\"Alex Soto\"},\"sameAs\":[\"http:\\\/\\\/www.lordofthejars.com\\\/\",\"https:\\\/\\\/x.com\\\/http:\\\/\\\/twitter.com\\\/alexsotob\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/Alex-Soto\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Jenkins: Deploying JEE Artifacts - Java Code Geeks","description":"With the advent of Continuous Integration and Continuous Delivery , our builds are split into different steps creating the deployment pipeline. Some of","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/2012\/09\/jenkins-deploying-jee-artifacts.html","og_locale":"en_US","og_type":"article","og_title":"Jenkins: Deploying JEE Artifacts - Java Code Geeks","og_description":"With the advent of Continuous Integration and Continuous Delivery , our builds are split into different steps creating the deployment pipeline. Some of","og_url":"https:\/\/www.javacodegeeks.com\/2012\/09\/jenkins-deploying-jee-artifacts.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2012-09-06T19:00:00+00:00","article_modified_time":"2012-10-22T06:59:48+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/jenkins-logo.jpg","type":"image\/jpeg"}],"author":"Alex Soto","twitter_card":"summary_large_image","twitter_creator":"@http:\/\/twitter.com\/alexsotob","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Alex Soto","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/jenkins-deploying-jee-artifacts.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/jenkins-deploying-jee-artifacts.html"},"author":{"name":"Alex Soto","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/6566a1238c71f5d85ba5b5df5d2eac59"},"headline":"Jenkins: Deploying JEE Artifacts","datePublished":"2012-09-06T19:00:00+00:00","dateModified":"2012-10-22T06:59:48+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/jenkins-deploying-jee-artifacts.html"},"wordCount":977,"commentCount":2,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/jenkins-deploying-jee-artifacts.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/jenkins-logo.jpg","keywords":["Apache Maven","Continuous Integration","Jenkins"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2012\/09\/jenkins-deploying-jee-artifacts.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/jenkins-deploying-jee-artifacts.html","url":"https:\/\/www.javacodegeeks.com\/2012\/09\/jenkins-deploying-jee-artifacts.html","name":"Jenkins: Deploying JEE Artifacts - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/jenkins-deploying-jee-artifacts.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/jenkins-deploying-jee-artifacts.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/jenkins-logo.jpg","datePublished":"2012-09-06T19:00:00+00:00","dateModified":"2012-10-22T06:59:48+00:00","description":"With the advent of Continuous Integration and Continuous Delivery , our builds are split into different steps creating the deployment pipeline. Some of","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/jenkins-deploying-jee-artifacts.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2012\/09\/jenkins-deploying-jee-artifacts.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/jenkins-deploying-jee-artifacts.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/jenkins-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/jenkins-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2012\/09\/jenkins-deploying-jee-artifacts.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"Jenkins: Deploying JEE Artifacts"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/6566a1238c71f5d85ba5b5df5d2eac59","name":"Alex Soto","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/cc3a211b790033d32fee33bb321b7bb6e2d381dab14531d3f2e8df9885bca7f9?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/cc3a211b790033d32fee33bb321b7bb6e2d381dab14531d3f2e8df9885bca7f9?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/cc3a211b790033d32fee33bb321b7bb6e2d381dab14531d3f2e8df9885bca7f9?s=96&d=mm&r=g","caption":"Alex Soto"},"sameAs":["http:\/\/www.lordofthejars.com\/","https:\/\/x.com\/http:\/\/twitter.com\/alexsotob"],"url":"https:\/\/www.javacodegeeks.com\/author\/Alex-Soto"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/1862","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/119"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=1862"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/1862\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/166"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=1862"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=1862"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=1862"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}