﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-paulwong-随笔分类-JENKINS</title><link>http://www.blogjava.net/paulwong/category/50704.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 25 Jan 2022 20:21:50 GMT</lastBuildDate><pubDate>Tue, 25 Jan 2022 20:21:50 GMT</pubDate><ttl>60</ttl><item><title>JENKINS 部署 agularjs</title><link>http://www.blogjava.net/paulwong/archive/2022/01/25/439385.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Tue, 25 Jan 2022 03:02:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2022/01/25/439385.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/439385.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2022/01/25/439385.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/439385.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/439385.html</trackback:ping><description><![CDATA[<img width="600" id="image-36-1955" alt="" src="https://cdn.shortpixel.ai/spai/w_1488+q_glossy+ret_img+to_webp/https://serengetitech.com/wp-content/uploads/2020/12/ci-cd-angular-config-2.jpg" data-spai="1"  margin-bottom-medium"="" data-spai-upd="1020" style="box-sizing: inherit; border-style: none; vertical-align: top; height: 375px; max-width: 100%; margin-bottom: 32px; opacity: 1; transition: opacity 0.5s linear 0.2s; width: 600px; color: #393335; font-family: lufga-regular; font-size: 16px; background-color: #fafafa;" border="" hspace="0" vspace="0" height="375" /><div id="div_block-44-1955"  hide-scrollbar"="" style="box-sizing: inherit; display: flex; flex-flow: column nowrap; align-items: flex-start; width: 770px; padding-left: 16px; padding-right: 16px; overflow: hidden; max-width: 100%; word-break: break-word; color: #393335; font-family: lufga-regular; font-size: 16px; background-color: #fafafa;"><div id="text_block-37-1955"  margin-bottom-medium"="" style="box-sizing: inherit; margin-bottom: 32px;"><span id="span-38-1955"  oxy-stock-content-styles"="" style="box-sizing: inherit; display: inline-block; text-decoration: inherit;"><p style="box-sizing: inherit;">This article assumes that you have a running Jenkins instance on your Linux machine with a valid domain (not localhost), GitLab and that you are familiar with the Angular framework.</p><p style="box-sizing: inherit;">For Jenkins, please install the GitLab and NodeJS plugins. For simplicity&#8217;s sake, this article is going to use simple shell commands to run automated tests and to deploy an app to production.</p><p style="box-sizing: inherit;"><span style="box-sizing: inherit; font-weight: bolder;">***Note.</span>&nbsp;If you can&#8217;t decide where to test all this, there is an article I wrote that might help you:&nbsp;<a href="https://serengetitech.com/tech/ci-cd-cloud-voyage-with-jenkins/" style="box-sizing: inherit; background-color: transparent; touch-action: manipulation; color: #43c8a0; text-decoration-line: none; text-decoration-skip-ink: auto;">CI/CD Cloud Voyage with Jenkins</a>.</p><h2>Configuring Gitlab and Jenkins</h2><h3><span style="box-sizing: inherit; font-weight: bolder;">Jenkins: Access Rights to GitLab</span></h3><p style="box-sizing: inherit;">In order to use GitLab with Jenkins, you&#8217;ll need to generate an access token in GitLab, which you can do in&nbsp;<span style="box-sizing: inherit; font-weight: bolder;">User menu &gt; Settings &gt; Access tokens</span></p><div eplus-craaij"="" style="box-sizing: inherit; margin: 32px 0px 64px;"><figure size-full"="" style="box-sizing: inherit; display: table; margin: 0px auto; clear: both;"><img width="600" height="362" src="https://cdn.shortpixel.ai/spai/w_1107+q_glossy+ret_img+to_webp/https://serengetitech.com/wp-content/uploads/2020/12/GitLab-Access-token.jpg" data-spai="1" alt="" data-spai-upd="738" style="box-sizing: inherit; border-style: none; vertical-align: top; height: 362px; max-width: 100%; opacity: 1; transition: opacity 0.5s linear 0.2s; border-radius: inherit; width: 600px;" /></figure></div><p style="box-sizing: inherit;">and configure GitLab Connection on Jenkins by adding the newly generated token.</p><p style="box-sizing: inherit;">In Jenkins, go to&nbsp;<span style="box-sizing: inherit; font-weight: bolder;">Manage Jenkins &gt; Configure system</span>&nbsp;and find the GitLab section.</p><div eplus-izuxfr"="" style="box-sizing: inherit; margin: 32px 0px 64px;"><figure size-full"="" style="box-sizing: inherit; display: table; margin: 0px auto; clear: both;"><img width="600" height="247" src="https://cdn.shortpixel.ai/spai/w_1107+q_glossy+ret_img+to_webp/https://serengetitech.com/wp-content/uploads/2020/12/Manage-Jenkins-GitLab-section.jpg" data-spai="1" alt="" data-spai-upd="738" style="box-sizing: inherit; border-style: none; vertical-align: top; height: 247px; max-width: 100%; opacity: 1; transition: opacity 0.5s linear 0.2s; border-radius: inherit; width: 600px;" /></figure></div><p style="box-sizing: inherit;">To add a token that you previously generated, click on&nbsp;<span style="box-sizing: inherit; font-weight: bolder;">Add</span>&nbsp;by the Credentials input and choose Jenkins. In the credentials dialog, choose&nbsp;<span style="box-sizing: inherit; font-weight: bolder;">GitLab API token</span>&nbsp;in the&nbsp;<em style="box-sizing: inherit;">Kind</em>&nbsp;input and paste your token from GitLab into the API token input field.&nbsp;</p><figure size-large=""  eplus-84i1z3"="" style="box-sizing: inherit; margin: 32px 0px 64px;"><img width="600" height="278" src="https://cdn.shortpixel.ai/spai/w_1107+q_glossy+ret_img+to_webp/https://serengetitech.com/wp-content/uploads/2020/12/Jenkins-Credentials.jpg" data-spai="1" alt="" data-spai-upd="738" style="box-sizing: inherit; border-style: none; vertical-align: top; height: 278px; max-width: 100%; opacity: 1; transition: opacity 0.5s linear 0.2s; border-radius: inherit; width: 600px;" /></figure><h3><span style="box-sizing: inherit; font-weight: bolder;">Jenkins: Configure NodeJSInstaller</span></h3><p style="box-sizing: inherit;">In order to be able to run npm scripts, it is necessary to configure NodeJSInstaller. In Jenkins, go to&nbsp;<span style="box-sizing: inherit; font-weight: bolder;">Manage Jenkins &gt; Global Tool Configuration &gt; NodeJS installations.</span></p><figure size-large=""  eplus-wijgni"="" style="box-sizing: inherit; margin: 32px 0px 64px;"><img width="600" height="307" src="https://cdn.shortpixel.ai/spai/w_1107+q_glossy+ret_img+to_webp/https://serengetitech.com/wp-content/uploads/2020/12/Jenkins-Configure-NodeJSInstaller.jpg" data-spai="1" alt="" data-spai-upd="738" style="box-sizing: inherit; border-style: none; vertical-align: top; height: 307px; max-width: 100%; opacity: 1; transition: opacity 0.5s linear 0.2s; border-radius: inherit; width: 600px;" /></figure><h3><span style="box-sizing: inherit; font-weight: bolder;">Jenkins: Create CI build for Angular</span></h3><p style="box-sizing: inherit;">In order to be able to run Angular tests and check your code style in Jenkins on the created merge request in GitLab you&#8217;ll have to:</p><p style="box-sizing: inherit;">1. Click on the&nbsp;<em style="box-sizing: inherit;">New item</em>&nbsp;link in the Jenkins dashboard</p><p style="box-sizing: inherit;">2. Enter a job name and choose&nbsp;<em style="box-sizing: inherit;">Freestyle project</em></p><figure size-large=""  eplus-zu8thi"="" style="box-sizing: inherit; margin: 32px 0px 64px;"><img width="600" height="152" src="https://cdn.shortpixel.ai/spai/w_1107+q_glossy+ret_img+to_webp/https://serengetitech.com/wp-content/uploads/2020/12/ci-build-for-angular.jpg" data-spai="1" alt="" data-spai-upd="738" style="box-sizing: inherit; border-style: none; vertical-align: top; height: 152px; max-width: 100%; opacity: 1; transition: opacity 0.5s linear 0.2s; border-radius: inherit; width: 600px;" /></figure><p style="box-sizing: inherit;">3. Choose the GitLab Connection that we&#8217;ve just created in the Gitlab Connection section.</p><figure size-large=""  eplus-opx1lx"="" style="box-sizing: inherit; margin: 32px 0px 64px;"><img width="600" height="216" src="https://cdn.shortpixel.ai/spai/w_1107+q_glossy+ret_img+to_webp/https://serengetitech.com/wp-content/uploads/2020/12/GitLab-Connection.jpg" data-spai="1" alt="" data-spai-upd="738" style="box-sizing: inherit; border-style: none; vertical-align: top; height: 216px; max-width: 100%; opacity: 1; transition: opacity 0.5s linear 0.2s; border-radius: inherit; width: 600px;" /></figure><p style="box-sizing: inherit;">4. Choose Git as your source code management. Enter your repository URL. Create new credentials on Jenkins. These credentials are for cloning the project. You use them to log in to Gitlab.</p><figure size-large=""  eplus-ctouru"="" style="box-sizing: inherit; margin: 32px 0px 64px;"><img width="600" height="277" src="https://cdn.shortpixel.ai/spai/w_1107+q_glossy+ret_img+to_webp/https://serengetitech.com/wp-content/uploads/2020/12/Source-Code-Management.jpg" data-spai="1" alt="" data-spai-upd="738" style="box-sizing: inherit; border-style: none; vertical-align: top; height: 277px; max-width: 100%; opacity: 1; transition: opacity 0.5s linear 0.2s; border-radius: inherit; width: 600px;" /></figure><p style="box-sizing: inherit;">5. Next, configure build triggers, i.e. on which GitLab event to run a build. In this particular example, angular-ci-build is going to trigger when a new merge request gets created.</p><figure size-large=""  eplus-tyr5xd"="" style="box-sizing: inherit; margin: 32px 0px 64px;"><img width="600" height="312" src="https://cdn.shortpixel.ai/spai/w_1107+q_glossy+ret_img+to_webp/https://serengetitech.com/wp-content/uploads/2020/12/Angular-ci-build.jpg" data-spai="1" alt="" data-spai-upd="738" style="box-sizing: inherit; border-style: none; vertical-align: top; height: 312px; max-width: 100%; opacity: 1; transition: opacity 0.5s linear 0.2s; border-radius: inherit; width: 600px;" /></figure><p style="box-sizing: inherit;">In this step, we need to go back to GitLab and create a hook that will trigger this build under&nbsp;<span style="box-sizing: inherit; font-weight: bolder;">Settings &gt; Integrations</span>. Copy the URL provided by Jenkins and paste it into the project hook form and finally click&nbsp;<em style="box-sizing: inherit;">Add webhook</em>.</p><figure size-large=""  eplus-ry6tkd"="" style="box-sizing: inherit; margin: 32px 0px 64px;"><img width="600" height="400" src="https://cdn.shortpixel.ai/spai/w_1107+q_glossy+ret_img+to_webp/https://serengetitech.com/wp-content/uploads/2020/12/GitLab-webhook.jpg" data-spai="1" alt="" data-spai-upd="738" style="box-sizing: inherit; border-style: none; vertical-align: top; height: 400px; max-width: 100%; opacity: 1; transition: opacity 0.5s linear 0.2s; border-radius: inherit; width: 600px;" /></figure><p style="box-sizing: inherit;">6. Provide the configured NodeJsInstaller in the global configuration to be able to run npm commands.</p><figure size-large=""  eplus-qdm6op"="" style="box-sizing: inherit; margin: 32px 0px 64px;"><img width="600" height="136" src="https://cdn.shortpixel.ai/spai/w_1107+q_glossy+ret_img+to_webp/https://serengetitech.com/wp-content/uploads/2020/12/NodeJsInstaller-npm-commands.jpg" data-spai="1" alt="" data-spai-upd="738" style="box-sizing: inherit; border-style: none; vertical-align: top; height: 136px; max-width: 100%; opacity: 1; transition: opacity 0.5s linear 0.2s; border-radius: inherit; width: 600px;" /></figure><p style="box-sizing: inherit;">7. And finally, in the Build section choose&nbsp;<span style="box-sizing: inherit; font-weight: bolder;">Add build step &gt; Execute shell.</span>&nbsp;Write shell scripts to test the Angular app code and run tests.</p><figure size-large=""  eplus-9eaq6s"="" style="box-sizing: inherit; margin: 32px 0px 64px;"><img width="600" height="472" src="https://cdn.shortpixel.ai/spai/w_1107+q_glossy+ret_img+to_webp/https://serengetitech.com/wp-content/uploads/2020/12/Build-step.jpg" data-spai="1" alt="" data-spai-upd="738" style="box-sizing: inherit; border-style: none; vertical-align: top; height: 472px; max-width: 100%; opacity: 1; transition: opacity 0.5s linear 0.2s; border-radius: inherit; width: 600px;" /></figure><p style="box-sizing: inherit;">Click&nbsp;<em style="box-sizing: inherit;">Save</em>&nbsp;and we are good to go. At this point everything should work.</p><p style="box-sizing: inherit;">When you create a new merge request, GitLab should trigger angular-ci-build on Jenkins and you should see&nbsp;<em style="box-sizing: inherit;">status pending&nbsp;</em>on that particular merge request page.</p><p style="box-sizing: inherit;">When Jenkins is done, the status on GitLab should automatically be updated. Depending on whether the build passed or not, the merge button will change color.</p><h3><span style="box-sizing: inherit; font-weight: bolder;">Jenkins: Create CD Build for Angular</span></h3><p style="box-sizing: inherit;">In order to be able to deploy Angular to another Linux machine, we need to:</p><p style="box-sizing: inherit;">Repeat steps 1&#8211;4 from&nbsp;<em style="box-sizing: inherit;">Jenkins: Create CI Build for Angular</em>, changing only the name of the build. This time, it can be angular-deploy.&nbsp;</p><p style="box-sizing: inherit;">5. For step five, we now choose a different configuration for deployment. We are going to run this build when a merge request gets accepted.</p><figure size-large=""  eplus-vg0fal"="" style="box-sizing: inherit; margin: 32px 0px 64px;"><img width="600" height="312" src="https://cdn.shortpixel.ai/spai/w_1107+q_glossy+ret_img+to_webp/https://serengetitech.com/wp-content/uploads/2020/12/Angular-ci-build-1.jpg" data-spai="1" alt="" data-spai-upd="738" style="box-sizing: inherit; border-style: none; vertical-align: top; height: 312px; max-width: 100%; opacity: 1; transition: opacity 0.5s linear 0.2s; border-radius: inherit; width: 600px;" /></figure><p style="box-sizing: inherit;">Just like for the CI build, we have to create a new GitLab hook that will hit the Jenkins build endpoint.</p><figure size-large=""  eplus-wugjfm"="" style="box-sizing: inherit; margin: 32px 0px 64px;"><img width="600" height="379" src="https://cdn.shortpixel.ai/spai/w_1107+q_glossy+ret_img+to_webp/https://serengetitech.com/wp-content/uploads/2020/12/GitLab-hook.jpg" data-spai="1" alt="" data-spai-upd="738" style="box-sizing: inherit; border-style: none; vertical-align: top; height: 379px; max-width: 100%; opacity: 1; transition: opacity 0.5s linear 0.2s; border-radius: inherit; width: 600px;" /></figure><p style="box-sizing: inherit;">6. This step is also the same as in CI; we need to provide the NodeJSInstaller we already configured globally.</p><p style="box-sizing: inherit;">7. This step is different from CI; this time we don&#8217;t have to test and check linting, but only build the application and copy-paste it to another machine with ssh.</p><figure size-large=""  eplus-v2khwd"="" style="box-sizing: inherit; margin: 32px 0px 64px;"><img width="600" height="470" src="https://cdn.shortpixel.ai/spai/w_1107+q_glossy+ret_img+to_webp/https://serengetitech.com/wp-content/uploads/2020/12/Build-the-application.jpg" data-spai="1" alt="" data-spai-upd="738" style="box-sizing: inherit; border-style: none; vertical-align: top; height: 470px; max-width: 100%; opacity: 1; transition: opacity 0.5s linear 0.2s; border-radius: inherit; width: 600px;" /></figure><p style="box-sizing: inherit;">If we are going to do it with ssh like in the example, we need to create a private and public key pair for the Jenkins user on the machine Jenkins is running on. The private key needs to stay on the Jenkins machine, and the public key needs to be copied to the remote machine.</p><p style="box-sizing: inherit;">With the scp command we simply copy our build to the remote machine. In this case, Jenkins does not have permission to put it anywhere but in the user folder. In the last step, we need to ssh into the remote machine and move our files (in this case to /var/www/html).</p><p style="box-sizing: inherit;"><em style="box-sizing: inherit;">Voila,</em>&nbsp;our app is deployed to the production server when the merge request is accepted via Jenkins.</p><p style="box-sizing: inherit;"><span style="box-sizing: inherit; font-weight: bolder;">Angular: Karma Unit Test Runner Configuration</span></p><p style="box-sizing: inherit;">To run Angular tests on Jenkins, we need to configure some parts of the karma.conf file. Below is the configuration that adds a custom launcher that runs ChromeHeadles.</p><pre eplus-id4erx=""  eplus-styles-uid-56ed2c"="" style="box-sizing: inherit; font-family: monospace, monospace; font-size: 1em; z-index: 0;"><code style="box-sizing: inherit; font-family: monospace, monospace; font-size: 1em; display: block; white-space: pre-wrap; overflow-wrap: break-word;">module.exports&nbsp;=&nbsp;function(config)&nbsp;{ &nbsp;&nbsp;config.set({ &nbsp;&nbsp;&nbsp;&nbsp;basePath:&nbsp;"", &nbsp;&nbsp;&nbsp;&nbsp;frameworks:&nbsp;["jasmine",&nbsp;"@angular-devkit/build-angular"], &nbsp;&nbsp;&nbsp;&nbsp;plugins:&nbsp;[ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;require("karma-jasmine"), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;require("karma-chrome-launcher"), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;require("karma-jasmine-html-reporter"), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;require("karma-coverage-istanbul-reporter"), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;require("@angular-devkit/build-angular/plugins/karma") &nbsp;&nbsp;&nbsp;&nbsp;], &nbsp;&nbsp;&nbsp;&nbsp;client:&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clearContext:&nbsp;false&nbsp;//&nbsp;leave&nbsp;Jasmine&nbsp;Spec&nbsp;Runner&nbsp;output&nbsp;visible&nbsp;in&nbsp;browser &nbsp;&nbsp;&nbsp;&nbsp;}, &nbsp;&nbsp;&nbsp;&nbsp;coverageIstanbulReporter:&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dir:&nbsp;require("path").join(__dirname,&nbsp;"../coverage/jenkins-test-app"), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reports:&nbsp;["html",&nbsp;"lcovonly",&nbsp;"text-summary"], &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fixWebpackSourcePaths:&nbsp;true &nbsp;&nbsp;&nbsp;&nbsp;}, &nbsp;&nbsp;&nbsp;&nbsp;reporters:&nbsp;["progress",&nbsp;"kjhtml"], &nbsp;&nbsp;&nbsp;&nbsp;port:&nbsp;9876, &nbsp;&nbsp;&nbsp;&nbsp;colors:&nbsp;true, &nbsp;&nbsp;&nbsp;&nbsp;logLevel:&nbsp;config.LOG_INFO, &nbsp;&nbsp;&nbsp;&nbsp;autoWatch:&nbsp;true, &nbsp;&nbsp;&nbsp;&nbsp;browsers:&nbsp;["Chrome",&nbsp;"ChromeHeadless"], &nbsp;&nbsp;&nbsp;&nbsp;singleRun:&nbsp;false, &nbsp;&nbsp;&nbsp;&nbsp;restartOnFileChange:&nbsp;true, &nbsp;&nbsp;&nbsp;&nbsp;customLaunchers:&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ChromeHeadless:&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;base:&nbsp;"Chrome", &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flags:&nbsp;[ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"--headless", &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"--disable-gpu", &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"--no-sandbox", &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"--remote-debugging-port=9222" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;], &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}, &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;}); };</code></pre><p style="box-sizing: inherit;">We can then simply store our command in the package.json scripts property.</p><p style="box-sizing: inherit;">On Jenkins, we would now run our tests with&nbsp;<em style="box-sizing: inherit;">npm run test:ci</em>.</p><pre eplus-urekni"="" style="box-sizing: inherit; font-family: monospace, monospace; font-size: 1em;"><code style="box-sizing: inherit; font-family: monospace, monospace; font-size: 1em; display: block; white-space: pre-wrap; overflow-wrap: break-word;">&nbsp;"scripts":&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;"ng":&nbsp;"ng", &nbsp;&nbsp;&nbsp;&nbsp;"start":&nbsp;"ng&nbsp;serve", &nbsp;&nbsp;&nbsp;&nbsp;"build":&nbsp;"ng&nbsp;build", &nbsp;&nbsp;&nbsp;&nbsp;"test":&nbsp;"ng&nbsp;test", &nbsp;&nbsp;&nbsp;&nbsp;"test:ci":&nbsp;"ng&nbsp;test&nbsp;--browsers=ChromeHeadless&nbsp;--watch=false", &nbsp;&nbsp;&nbsp;&nbsp;"lint":&nbsp;"ng&nbsp;lint", &nbsp;&nbsp;&nbsp;&nbsp;"e2e":&nbsp;"ng&nbsp;e2e" &nbsp;&nbsp;},</code></pre><p style="box-sizing: inherit;">I hope you enjoyed this article and that it was helpful in your quest for automating angular deployment and testing.</p></span></div></div><img src ="http://www.blogjava.net/paulwong/aggbug/439385.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2022-01-25 11:02 <a href="http://www.blogjava.net/paulwong/archive/2022/01/25/439385.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jenkins environment variables</title><link>http://www.blogjava.net/paulwong/archive/2021/08/16/435944.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Mon, 16 Aug 2021 07:46:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2021/08/16/435944.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/435944.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2021/08/16/435944.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/435944.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/435944.html</trackback:ping><description><![CDATA[<a href="https://medium.com/@mukeshsingal/access-jenkins-global-environment-variables-using-groovy-or-java-b5c1e6b53685" target="_blank">https://medium.com/@mukeshsingal/access-jenkins-global-environment-variables-using-groovy-or-java-b5c1e6b53685</a><br /><br /><img src ="http://www.blogjava.net/paulwong/aggbug/435944.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2021-08-16 15:46 <a href="http://www.blogjava.net/paulwong/archive/2021/08/16/435944.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【DevOps】Jenkins任务基于Tag进行构建</title><link>http://www.blogjava.net/paulwong/archive/2021/04/22/435862.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Thu, 22 Apr 2021 03:00:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2021/04/22/435862.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/435862.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2021/04/22/435862.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/435862.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/435862.html</trackback:ping><description><![CDATA[手动触发:<br />
<a href="https://blog.csdn.net/justyman/article/details/89857577" target="_blank">https://blog.csdn.net/justyman/article/details/89857577</a><br />
<br />
如果是自动触发BUILD时，则可以以最新建立的TAG为基础进行BUILD，而无需人手选TAG进行BUILD。<br />
配置，注意应取消参数化配置工程：<br />
<ol>
     <li>Add the following refspec to the Git plugin:<br />
     <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
     <br />
     Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
     http://www.CodeHighlighter.com/<br />
     <br />
     -->+refs/tags/*:refs/remotes/origin/tags/*</div>
     </li>
     <li>Add the following branch specifier:<br />
     <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
     <br />
     Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
     http://www.CodeHighlighter.com/<br />
     <br />
     -->*/tags/*</div>
     </li><li>Enable SCM polling, so that the job detects new tags.
</li></ol><img src ="http://www.blogjava.net/paulwong/aggbug/435862.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2021-04-22 11:00 <a href="http://www.blogjava.net/paulwong/archive/2021/04/22/435862.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何在JENKINS中使用HTTP下载 NEXUS上的ZIP</title><link>http://www.blogjava.net/paulwong/archive/2020/07/31/435624.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Fri, 31 Jul 2020 12:18:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2020/07/31/435624.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/435624.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2020/07/31/435624.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/435624.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/435624.html</trackback:ping><description><![CDATA[需添加如下PLUGIN：<a href="https://plugins.jenkins.io/file-operations/" target="_blank">File Operations<br /><br /></a>添加如下STEP：File Download Operation<br /><br />NEXUS上的下载地址按如下模式：http://localhost:8081/service/rest/v1/search/assets/download?group=org.osgi&amp;name=org.osgi.core&amp;version=4.3.1&amp;maven.extension=jar&amp;maven.classifier<br /><br /><img src ="http://www.blogjava.net/paulwong/aggbug/435624.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2020-07-31 20:18 <a href="http://www.blogjava.net/paulwong/archive/2020/07/31/435624.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JENKINS TOURIAL</title><link>http://www.blogjava.net/paulwong/archive/2020/04/07/435324.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Tue, 07 Apr 2020 02:29:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2020/04/07/435324.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/435324.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2020/04/07/435324.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/435324.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/435324.html</trackback:ping><description><![CDATA[<a href="https://huongdanjava.com/jenkins-2" target="_blank">https://huongdanjava.com/jenkins-2</a><br /><br /><img src ="http://www.blogjava.net/paulwong/aggbug/435324.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2020-04-07 10:29 <a href="http://www.blogjava.net/paulwong/archive/2020/04/07/435324.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>windows下jenkins提示文件名太长</title><link>http://www.blogjava.net/paulwong/archive/2020/02/14/435104.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Fri, 14 Feb 2020 06:37:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2020/02/14/435104.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/435104.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2020/02/14/435104.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/435104.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/435104.html</trackback:ping><description><![CDATA[<div>由于jenkins是调用windows的git取代码，因此是git的问题，进行如下配置即可：<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->git&nbsp;config&nbsp;--global&nbsp;core.longpaths&nbsp;true</div><br /></div><img src ="http://www.blogjava.net/paulwong/aggbug/435104.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2020-02-14 14:37 <a href="http://www.blogjava.net/paulwong/archive/2020/02/14/435104.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用 Jenkins 部署 Spring Boot</title><link>http://www.blogjava.net/paulwong/archive/2019/09/19/434675.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Thu, 19 Sep 2019 09:44:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2019/09/19/434675.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/434675.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2019/09/19/434675.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/434675.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/434675.html</trackback:ping><description><![CDATA[<a href="https://mp.weixin.qq.com/s?__biz=MzI4NDY5Mjc1Mg==&amp;mid=2247489278&amp;idx=2&amp;sn=a48342d706bfd1651e277e1c24e81e3e&amp;chksm=ebf6ce81dc81479764d1e6ff7b207257a78d52bed5ef8c2f16c76f70660d1da9609167ed7bbb&amp;mpshare=1&amp;scene=1&amp;srcid=&amp;sharer_sharetime=1568861026830&amp;sharer_shareid=24856bf403968a883e437b859be0a9b5&amp;pass_ticket=qB9yWQbj%2FGo7PDZNogjBwishDCx5Suu%2BvBWnS1TpKmY%3D#rd" target="_blank">https://mp.weixin.qq.com/s?__biz=MzI4NDY5Mjc1Mg==&amp;mid=2247489278&amp;idx=2&amp;sn=a48342d706bfd1651e277e1c24e81e3e&amp;chksm=ebf6ce81dc81479764d1e6ff7b207257a78d52bed5ef8c2f16c76f70660d1da9609167ed7bbb&amp;mpshare=1&amp;scene=1&amp;srcid=&amp;sharer_sharetime=1568861026830&amp;sharer_shareid=24856bf403968a883e437b859be0a9b5&amp;pass_ticket=qB9yWQbj%2FGo7PDZNogjBwishDCx5Suu%2BvBWnS1TpKmY%3D#rd</a><img src ="http://www.blogjava.net/paulwong/aggbug/434675.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2019-09-19 17:44 <a href="http://www.blogjava.net/paulwong/archive/2019/09/19/434675.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>publish over ssh 实现 Jenkins 远程部署</title><link>http://www.blogjava.net/paulwong/archive/2019/07/25/434296.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Thu, 25 Jul 2019 01:33:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2019/07/25/434296.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/434296.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2019/07/25/434296.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/434296.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/434296.html</trackback:ping><description><![CDATA[<div>Jenkins远程部署，一开始没有任何头绪，想了很多方案. 因为两台机器都是windows系统，所以想到publish over cifs, 但是这个网上资料太少，貌似只能内网使用。又想到了Jenkins 分布式构建，但是Jenkins构建的代码和产物最后自动拷贝到主节点。而远程机器其实是客户方的机器，所以这个分布式构建并不适用。最后还是选定publish over ssh来实现远程部署。&nbsp;</div><div>请注意：在进行远程部署操作前，先要确保客户机能ssh 登录到远程机器。如果不知道SSH怎么登陆，请参考http://blog.csdn.net/flyingshuai/article/details/72897692&nbsp;</div><div>1. 安装publish over ssh 插件，安装很简单，在此不表。&nbsp;</div><div>2. 在Jenkins系统设置里找到Publish over SSH模块&nbsp;</div><div>3. 用户名/密码方式登录的，系统设置里设置如下：&nbsp;</div><div></div><div>4. 如果是证书登录的，系统设置里设置如下：&nbsp;</div><div></div><div>5. Job设置，点击增加构建后操作步骤，选择send build artifacts over ssh, 设置如下：&nbsp;</div><div></div><div>6. 文件上传到远程服务器后，还有一些后续操作，比如，替换数据库配置文件。可以把bat命令写到一个批处理文件中，存到服务器上。Exec command填写批处理文件的绝对路径。如上图所示。</div><div></div><div>关于bat脚本：&nbsp;</div><div>如果每次都需要替换同样的文件，用copy /y 是无条件覆盖，不会询问。而xcopy可以实现批量拷贝文件和文件夹。如果文件较多可用此命令&nbsp;</div><div>注意脚本运行失败，构建也会显示蓝色成功图标，所以一定要打开控制台输出，看是否真的成功。</div><div>---------------------&nbsp;</div><div>作者：flyingshuai&nbsp;</div><div>来源：CSDN&nbsp;</div><div>原文：<a href="https://blog.csdn.net/flyingshuai/article/details/72898665 " target="_blank">https://blog.csdn.net/flyingshuai/article/details/72898665&nbsp;</a></div><div>版权声明：本文为博主原创文章，转载请附上博文链接！</div><img src ="http://www.blogjava.net/paulwong/aggbug/434296.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2019-07-25 09:33 <a href="http://www.blogjava.net/paulwong/archive/2019/07/25/434296.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>How do I clear my Jenkins/Hudson build history?</title><link>http://www.blogjava.net/paulwong/archive/2019/07/24/434289.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Wed, 24 Jul 2019 08:18:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2019/07/24/434289.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/434289.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2019/07/24/434289.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/434289.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/434289.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 问题:I recently updated the configuration of one of my hudson builds. The build history is out of sync. Is there a way to clear my build history?Please and thank you回答1:If you click Manage Hudson / Relo...&nbsp;&nbsp;<a href='http://www.blogjava.net/paulwong/archive/2019/07/24/434289.html'>阅读全文</a><img src ="http://www.blogjava.net/paulwong/aggbug/434289.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2019-07-24 16:18 <a href="http://www.blogjava.net/paulwong/archive/2019/07/24/434289.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>持续部署，并不简单！</title><link>http://www.blogjava.net/paulwong/archive/2015/05/14/425082.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Thu, 14 May 2015 12:38:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2015/05/14/425082.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/425082.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2015/05/14/425082.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/425082.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/425082.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 这几年，持续集成随着敏捷在国内的推广而持续走热，与之相伴的持续部署也一直备受关注。自前两年，持续交付这个延续性概念又闯进了国内IT圈，慢慢开始在社区和会议中展露头角。许多不明真相的群众跟风哭着喊着要“上”，而许多前CI的半吊子玩家换件衣服就接着干，有的甚至衣服都来不及换……国内的这些土财主如果不巧请了某些所谓的战略家，除了建了一堆持续集成环境，以及每天嚷嚷着要这个要那个，混乱的状况在根本上没有得到改善。本文无意费力探讨持续集成和持续交付的概念，而是打算谈谈对于大型软件企业，以持续集成为基础实现持续部署（交付）时，所要面对的问题以及可行的解决方案。地主老财们，夜黑风正猛，山高路又远，注意脚下……&nbsp;&nbsp;<a href='http://www.blogjava.net/paulwong/archive/2015/05/14/425082.html'>阅读全文</a><img src ="http://www.blogjava.net/paulwong/aggbug/425082.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2015-05-14 20:38 <a href="http://www.blogjava.net/paulwong/archive/2015/05/14/425082.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PMD for Jenkins</title><link>http://www.blogjava.net/paulwong/archive/2014/07/12/415727.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Sat, 12 Jul 2014 07:04:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2014/07/12/415727.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/415727.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2014/07/12/415727.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/415727.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/415727.html</trackback:ping><description><![CDATA[PMD jenkins plugin is only displaying the PMD check results. You need to run PMD using Maven as part of your build triggered by Jenkins. For example this could look like that in your pom.xml<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">reporting</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">plugins</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">plugin</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span>org.apache.maven.plugins<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">groupId</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span>maven-pmd-plugin<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">artifactId</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span>2.7.1<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">version</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">configuration</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">linkXRef</span><span style="color: #0000FF; ">&gt;</span>false<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">linkXRef</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">targetJdk</span><span style="color: #0000FF; ">&gt;</span>1.6<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">targetJdk</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">rulesets</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">ruleset</span><span style="color: #0000FF; ">&gt;</span>/rulesets/basic.xml<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">ruleset</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">rulesets</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">configuration</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">plugin</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">plugins</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">reporting</span><span style="color: #0000FF; ">&gt;</span></div><br />Then PMD-jenkins will know where to pick up the results and publish them for you.<br /><br />To get the results you will need to add this code to your pom.xml and execute the according target in Jenkins, yes.<br /><br />Note that this is not related to PMD-plugin in Eclipse. The Eclipse PMD plugin just shows the result of the local analysis, not related to Jenkins.<img src ="http://www.blogjava.net/paulwong/aggbug/415727.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2014-07-12 15:04 <a href="http://www.blogjava.net/paulwong/archive/2014/07/12/415727.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>搭建基于Jenkins+SVN+Maven持续集成环境(CI)</title><link>http://www.blogjava.net/paulwong/archive/2014/07/12/415716.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Fri, 11 Jul 2014 16:11:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2014/07/12/415716.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/415716.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2014/07/12/415716.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/415716.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/415716.html</trackback:ping><description><![CDATA[<p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">一、准备工作</p>
<p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">1. 下载jenkins.war，也可以使用特定环境的安装包。将其拷贝到c:\Dev\Jenkins目录</p>
<p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">2. SVN, Maven</p>
<p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">二、启动Jenkins</p>
<p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">在命令行启动Jenkins</p>
<p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">java -jar jenkins.war --httpPort=8080， --httpPort 用来指定端口号。</p>
<p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">在地址栏输入http://localhost:8080, 看到Jenkins主界面，就说明安装成功了。</p>
<p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;"><img alt="搭建基于Jenkins+SVN+Maven持续集成环境(CI)" src="http://www.linuxidc.com/upload/2012_07/120702061814612.png" width="581" vspace="5" style="border: 0px; cursor: pointer; display: block;" /></p>
<p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">三、Jenkins插件</p>
<p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">确保SVN和Maven插件都已经安装好了，可以到Jenkins配置里面去查看，如果没有可以装上。</p>
<p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">Manage Jenkins-&gt;Manage Plugins-&gt;Installed</p>
<p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">默认情况下，SVN和Maven插件都是安装好的，如果你需要安装其他的插件可以在Available中查找。</p>
<p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;"><img alt="搭建基于Jenkins+SVN+Maven持续集成环境(CI)" src="http://www.linuxidc.com/upload/2012_07/120702061814613.png" width="581" vspace="5" style="border: 0px; cursor: pointer; display: block;" /></p>
<p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">四、配置Jenkins</p>
<p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">新安装的Jenkins需要配置一些环境，例如JAVA_HOME,MAVEN_HOME等</p>
<p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">Manage Jenkins-&gt;Configure System</p>
<p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;"><img alt="搭建基于Jenkins+SVN+Maven持续集成环境(CI)" src="http://www.linuxidc.com/upload/2012_07/120702061814611.png" width="581" vspace="5" style="border: 0px; cursor: pointer; display: block;" /></p>
<p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;"># of executors 用来指定同一时间最多能跑的job数量。</p>
<p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">SCM checkout retry count 如果从版本库签出代码失败，jenkins会按照这个次数重试。</p>
<p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">JDK 配置Java环境, Maven 配置Maven环境。</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">五、创建Maven任务</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">New Job-&gt; 新建任务</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">Job name-&gt;home-ci，ci指代commit阶段，说明这个job是用来不断集成我们的代码的。</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">Build a maven2/3 project-&gt;我们的项目是用maven来管理的，所以我们选择maven job</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;"><img alt="搭建基于Jenkins+SVN+Maven持续集成环境(CI)" src="http://www.linuxidc.com/upload/2012_07/120702061854772.png" width="581" vspace="5" style="border: 0px; cursor: pointer; display: block;" /></p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">1. 首先我们配置SVN，选择Subversion,填上项目的Repository URL,然后可以指定从这个地址签出的代码保存的位置。其他默认选择。</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">2. Build Trigger</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">该选项是用来配置自动构建的，比如我们想让项目每天中午一点和晚上一点自动构建，只需要在Build periodically中写出0 13,1 * * *.在这里我们使用Poll SCM，"Poll SCM"用来定期检查版本库是否有更新，如果有更新，触发构建。我们就让它每分钟检查一次，输入* * * * *。</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;"><img alt="搭建基于Jenkins+SVN+Maven持续集成环境(CI)" src="http://www.linuxidc.com/upload/2012_07/120702061854773.png" width="581" vspace="5" style="border: 0px; cursor: pointer; display: block;" /></p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">3. 配置Maven</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">pom.xml文件，jenkins会去寻找需要执行的maven pom文件，需要给定。</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">我们需要运行maven 的 clean install 命令，在Goals and options中指定。</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">4. 生成打包文件</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">Post-build Actions 这里我们可以使用一些分析工具，比如checkstyle, 代码测试覆盖率等等。</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">这里我们只指定需要生产的最终文件War或者Jar，在Archive the artifacts 中输入你想要的打包方式。</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">/trunk/home/home-ci/*.war;/trunk/home/test-report/*.html</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">六、运行构建</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">点击左侧的Build Now按钮，点击Build History中的数字就可以看到本次构建的详细。</p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;"><img alt="搭建基于Jenkins+SVN+Maven持续集成环境(CI)" src="http://www.linuxidc.com/upload/2012_07/120702061854771.png" border="0" width="581" vspace="5" style="border: 0px; cursor: pointer; display: block;" /></p><p style="color: #333333; font-family: tahoma, 宋体; line-height: 22.399999618530273px; background-color: #efefef;">每次构建可以点击Changes查看是否有更改， Console output可以看到本次构建的详细输出。</p><img src ="http://www.blogjava.net/paulwong/aggbug/415716.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2014-07-12 00:11 <a href="http://www.blogjava.net/paulwong/archive/2014/07/12/415716.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jenkins+Maven+SVN快速搭建持续集成环境(转)</title><link>http://www.blogjava.net/paulwong/archive/2014/07/11/415715.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Fri, 11 Jul 2014 14:55:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2014/07/11/415715.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/415715.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2014/07/11/415715.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/415715.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/415715.html</trackback:ping><description><![CDATA[<p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">Jenkins是一个可扩展的持续集成引擎，Jenkins非常易于安装和配置，简单易用，下面看看我们是如何几分钟就快速搭建一个持续集成环境吧。</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">假设我们目前已经有2个maven项目：entities(JAVA类库)，web(Web应用，依赖entities)。</p><h4>一、安装Jenkins</h4><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">地址<span style="line-height: 1.5; text-decoration: underline;"><a href="http://mirrors.jenkins-ci.org/" style="color: #1a8bc8; text-decoration: none;">http://mirrors.jenkins-ci.org/</a></span>下载适合的Jenkins版本。</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">Windows最新稳定版的Jenkins地址为：<span style="line-height: 1.5; text-decoration: underline;"><a href="http://mirrors.jenkins-ci.org/windows-stable/jenkins-1.409.1.zip" style="color: #1a8bc8; text-decoration: none;">http://mirrors.jenkins-ci.org/windows-stable/jenkins-1.409.1.zip</a></span></p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;"><a title="https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+as+a+Windows+service" href="https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+as+a+Windows+service" style="color: #1a8bc8; text-decoration: none;">https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+as+a+Windows+service</a></p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">把Jenkins 1.409.1版解压，把得到的war包直接扔到tomcat下，启动tomcat，Jenkins就安装完毕，是不是很简单啊。</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">redhat系统下安装流程：<a title="https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Red+Hat+distributions" href="https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Red+Hat+distributions" style="color: #1a8bc8; text-decoration: none;">https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Red+Hat+distributions</a></p><h4>二、配置Jenkins</h4><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">1、打开<span style="line-height: 1.5; text-decoration: underline;">http://10.3.15.78:8080/jenkins/</span>，第一次进入里面没有数据，我们需要创建job，我们这有2个项目，需要创建2个job。<span style="line-height: 1.5; text-decoration: underline;">http://10.3.34.163:9890/jenkins/</span></p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">2、点击左上角的new job，在new job页面需要选择job的类型，Jenkins支持几种类型，我们选择&#8220;构建一个maven2/3项目&#8221;，Job名为：guan_caijing，如图所示：</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;"><a href="http://images.cnitblog.com/blog/330894/201301/30165738-06a48bdaab3741c49b464f00ceb3af09.png" style="color: #1a8bc8; text-decoration: none;"><img title="image" src="http://images.cnitblog.com/blog/330894/201301/30165740-1e4269baa1e64d4f90d5c0dfa52c9bdb.png" alt="image" width="532" height="184" border="0" style="border: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; background-image: none;" /></a></p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">3、点击OK按钮后，进会进入详细配置界面，详细配置界面的配置项很多，不过不用怕，大部分使用默认配置就可以了，下面就说说我们需要修改的几个地方：</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">3.1）Source Code Management</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">因为我们使用SVN管理源码，所以这里选择Subversion，并在Repository URL中输入我们的SVN地址：</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;"><a href="http://10.3.34.163:9880/guan_caijing/trunk/" style="color: #1a8bc8; text-decoration: none;">http://10.3.34.163:9880/guan_caijing/trunk/</a></p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">输入SVN库的URL地址后，Jenkins会自动验证地址，并给予提示。</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;"><a href="http://images.cnitblog.com/blog/330894/201301/30164329-1da91fb2bc6844d3b3ccd5d8ffe1c26c.gif" style="color: #1a8bc8; text-decoration: none;"><img title="clip_image004" src="http://images.cnitblog.com/blog/330894/201301/30164330-8b92e2ba8f3041d188a0a2bc1ca7c00e.gif" alt="clip_image004" width="580" height="141" border="0" style="border: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; background-image: none;" /></a></p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">点击红色字体部分的enter credential链接，进入如下页面：</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;"><a href="http://images.cnitblog.com/blog/330894/201301/30164331-05c813c484964cea8930917dffc420ae.gif" style="color: #1a8bc8; text-decoration: none;"><img title="clip_image006" src="http://images.cnitblog.com/blog/330894/201301/30164332-54fbc27dc67647b99eca31705b15513f.gif" alt="clip_image006" width="524" height="186" border="0" style="border: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; background-image: none;" /></a></p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">设置好访问SVN库的用户名和密码后，点击OK按钮，显示：</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;"><a href="http://images.cnitblog.com/blog/330894/201301/30164332-22bb9eeccbd74fbf9b768c312925f4d5.gif" style="color: #1a8bc8; text-decoration: none;"><img title="clip_image008" src="http://images.cnitblog.com/blog/330894/201301/30164332-c00bf1da13ac405da622f47e9c6fe4af.gif" alt="clip_image008" width="647" height="111" border="0" style="border: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; background-image: none;" /></a></p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">说明设置成功。点击Close按钮，返回之前的Source Code Management页面。此时不再有红色警告信息了。</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;"><a href="http://images.cnitblog.com/blog/330894/201301/30164333-b5a8ead890684c09bebf7164eac544d3.gif" style="color: #1a8bc8; text-decoration: none;"><img title="clip_image010" src="http://images.cnitblog.com/blog/330894/201301/30164333-fd6fb3d8cd7b47658d8e1b81eea36d7a.gif" alt="clip_image010" width="539" height="156" border="0" style="border: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; background-image: none;" /></a></p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">3.2）配置自动构建的计划，假设我们想让项目中每天12点和晚上8点自动构建一次，只需要在Build Triggers中选择<strong>Build periodically</strong><strong>，并在Schedule</strong><strong>中输入 0 12,20 * * *</strong><strong>。</strong></p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;"><strong>我配置的是每晚8</strong><strong>点自动构建</strong></p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;"><a href="http://images.cnitblog.com/blog/330894/201301/30164334-db7467f4e2314133b2cc03420d9310a9.gif" style="color: #1a8bc8; text-decoration: none;"><img title="clip_image012" src="http://images.cnitblog.com/blog/330894/201301/30164335-cf7d9d6347e5417fb4d1c49b01b8b23c.gif" alt="clip_image012" width="522" height="175" border="0" style="border: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; background-image: none;" /></a></p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;"><strong>注：Schedule</strong><strong>的配置规则是有5</strong><strong>个空格隔开的字符组成，从左到右分别代表：分&nbsp;</strong><strong>时&nbsp;</strong><strong>天&nbsp;</strong><strong>月&nbsp;</strong><strong>年。*</strong><strong>代表所有，0 12,20 * * *&nbsp;</strong><strong>表示&#8220;在任何年任何月任何天的12</strong><strong>和20</strong><strong>点0</strong><strong>分&#8221;进行构建。</strong></p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">3.3）配置到这里，可能有人发现在Build配置节点，有红色错误信息，提示</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">Jenkins needs to know where your Maven2 is installed.&nbsp;<br />Please do so from the system configuration.</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">如图所示：</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;"><a href="http://images.cnitblog.com/blog/330894/201301/30164335-d664d1a41920431ca11e5ef57a397d6c.gif" style="color: #1a8bc8; text-decoration: none;"><img title="clip_image014" src="http://images.cnitblog.com/blog/330894/201301/30164335-ca18305343c540e38b2c30392ababec5.gif" alt="clip_image014" width="523" height="112" border="0" style="border: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; background-image: none;" /></a></p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">这是因为Jenkins找不到maven的原因，点击"system configuration"，是system configuration的maven配置中添加maven目录就OK，如下图：</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;"><a href="http://images.cnitblog.com/blog/330894/201301/30164336-e5ad87d93e5c427ebfc8c59fcf75fbd0.gif" style="color: #1a8bc8; text-decoration: none;"><img title="clip_image016" src="http://images.cnitblog.com/blog/330894/201301/30164337-ace82be98ded467c97ea486e9cad27c4.gif" alt="clip_image016" width="503" height="352" border="0" style="border: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; background-image: none;" /></a></p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">我设置了JRE 6和MAVEN 3的安装目录。</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">点击左下角的SAVE按钮，保存设置。</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">3.4）保存好所有配置后，我们第1个job就算是完成了。</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">3.5）创建第2个job，配置和上面的配置相同。只需把svn地址改成：<span style="line-height: 1.5; text-decoration: underline;"><a href="http://localhost/svn/Web" style="color: #1a8bc8; text-decoration: none;">http://localhost/svn/Web</a></span></p><h4>三、手动构建</h4><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">在经过上面的配置后，回到Jenkins首页，在首页可以看到刚才添加的2个job，如下图：</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;"><a href="http://images.cnitblog.com/blog/330894/201301/30164337-aaa2f69bbfae48b7855b70c4968e8ed6.jpg" style="color: #1a8bc8; text-decoration: none;"><img title="clip_image018" src="http://images.cnitblog.com/blog/330894/201301/30164338-515da6b887204e859b1a0ed8d26efb1a.jpg" alt="clip_image018" width="553" height="107" border="0" style="border: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; background-image: none;" /></a></p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">点击某1个job后后面的"Schedule a build"图片手动构建，点击完后，会在左边的Build Queue或者<span style="line-height: 1.5; text-decoration: underline;"><a href="http://localhost:8080/hudson/computer/" style="color: #1a8bc8; text-decoration: none;">Build Executor Status</a></span>&nbsp;显示正在构建的任务，在自动构建完后，刷新页面，就可以看到构建结果了，如何某个项目构建失败，点击项目后面的构建数字(从1开始递增)进入项目的"<span style="line-height: 1.5; text-decoration: underline;"><a href="http://localhost:8080/hudson/job/Entities/lastSuccessfulBuild/console" style="color: #1a8bc8; text-decoration: none;">Console Output</a></span>&nbsp;"可以查看项目构建失败的原因。当然我们也可以配置把构建失败的结果发到邮箱。</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">到目前为止，1个简单的自动构建环境就搭建好了，很简单吧。</p><h4>四、自动部署</h4><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">看完上面发现Jenkins配置真的很简单，几分钟就搭建好自动构建环境，但环境搭建好后发现1个问题，现在是能自动构建了，但是构建好的web.war都还是在Jenkins目录下，并没有发布到tomcat中，还需要手动copy过去？</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">这是个问题，不过别急，要达到自动部署的目的，需要安装1个Jenkins的部署插件。选择&#8220;系统管理&#8221;菜单的&#8220;管理插件&#8221;：</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;"><a href="http://images.cnitblog.com/blog/330894/201301/30164338-90efac2565684524bb49616232626405.gif" style="color: #1a8bc8; text-decoration: none;"><img title="clip_image020" src="http://images.cnitblog.com/blog/330894/201301/30164338-5b4cd2ab4043497a80099802c305a707.gif" alt="clip_image020" width="633" height="227" border="0" style="border: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; background-image: none;" /></a></p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">选择&#8220;可选插件&#8221;，找到Deploy Plugin 1.8插件，选择它。</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;"><a href="http://images.cnitblog.com/blog/330894/201301/30164340-97c02ecf76ad45459b93468da863e9dc.gif" style="color: #1a8bc8; text-decoration: none;"><img title="clip_image022" src="http://images.cnitblog.com/blog/330894/201301/30164340-3c063e2874bd4fd7aaba8a549f7f2a70.gif" alt="clip_image022" width="648" height="178" border="0" style="border: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; background-image: none;" /></a></p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">注：Deploy Plugin 1.8插件支持Tomcat 4.x/5.x/6.x/7.x ，JBoss 3.x/4.x ，Glassfish 2.x/3.x</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">点击底部的&#8220;安装&#8221;按钮，显示：</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;"><a href="http://images.cnitblog.com/blog/330894/201301/30164341-cfb32bae939d430b8f1f8bc5bf15544f.gif" style="color: #1a8bc8; text-decoration: none;"><img title="clip_image024" src="http://images.cnitblog.com/blog/330894/201301/30164341-ef740898953c424d92ff85ae77dde28e.gif" alt="clip_image024" width="494" height="157" border="0" style="border: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; background-image: none;" /></a></p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">耐心等待：</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;"><a href="http://images.cnitblog.com/blog/330894/201301/30164342-7db4f209a8f3419c987f8a6935bef1f0.gif" style="color: #1a8bc8; text-decoration: none;"><img title="clip_image026" src="http://images.cnitblog.com/blog/330894/201301/30164342-fa8378b5448943e7b75454234101d287.gif" alt="clip_image026" width="456" height="153" border="0" style="border: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; background-image: none;" /></a></p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">直到Deploy Plugin完成，显示Success：</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;"><a href="http://images.cnitblog.com/blog/330894/201301/30164343-7f6817b1f7964439afa5152fdd1e4be8.gif" style="color: #1a8bc8; text-decoration: none;"><img title="clip_image028" src="http://images.cnitblog.com/blog/330894/201301/30164344-ad2be63115094cd6b7cdebd1e4ad202a.gif" alt="clip_image028" width="544" height="170" border="0" style="border: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; background-image: none;" /></a></p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">选择框打钩，Jenkins会自动重启：</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;"><a href="http://images.cnitblog.com/blog/330894/201301/30164344-aaa02e8b35f5484c9bd6ccba056c0541.gif" style="color: #1a8bc8; text-decoration: none;"><img title="clip_image030" src="http://images.cnitblog.com/blog/330894/201301/30164344-3608b3bf65634531b3f748b2b19c8e8a.gif" alt="clip_image030" width="585" height="120" border="0" style="border: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; background-image: none;" /></a></p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">此时，在插件管理的&#8220;已安装&#8221;Tab页，可以看到部署插件已安装完毕。</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;"><a href="http://images.cnitblog.com/blog/330894/201301/30164345-b288a39c2eb746839224dd43c6891206.gif" style="color: #1a8bc8; text-decoration: none;"><img title="clip_image032" src="http://images.cnitblog.com/blog/330894/201301/30164345-d166ac2231674686ac7503c455405385.gif" alt="clip_image032" width="539" height="156" border="0" style="border: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; background-image: none;" /></a></p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">重新进入web的configure 配置界面，在最下面会发现多处1个配置项，我们配置如下：</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;"><a href="http://images.cnitblog.com/blog/330894/201301/30164346-95aa1e89536e4ae69890d9295f015b96.jpg" style="color: #1a8bc8; text-decoration: none;"><img title="clip_image034" src="http://images.cnitblog.com/blog/330894/201301/30164347-279be68bb1764dc48a84c7c57f071fb7.jpg" alt="clip_image034" width="535" height="97" border="0" style="border: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; background-image: none;" /></a></p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">注：war file使用的是Jenkinsworkspace的相对目录，hudon默认的目录在：</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">C:\Documents and Settings\用户名\.Jenkins\</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">workspace目录：C:\Documents and Settings\用户名\.Jenkins\ jobs\web\workspace\</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">最终产生的war在：C:\Documents and Settings\用户名\.Jenkins\ jobs\web\workspace\Web\target\web.war</p><p style="line-height: 19.5px; margin-top: 10px; margin-bottom: 10px; color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">保存配置再重新构建一次，打开tomcat的webapps目录，发现web.war终于过来了，大功告成。</p><img src ="http://www.blogjava.net/paulwong/aggbug/415715.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2014-07-11 22:55 <a href="http://www.blogjava.net/paulwong/archive/2014/07/11/415715.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hudson+maven+sonar+svn 快速搭建持续集成服务</title><link>http://www.blogjava.net/paulwong/archive/2012/09/26/388642.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Wed, 26 Sep 2012 15:15:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2012/09/26/388642.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/388642.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2012/09/26/388642.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/388642.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/388642.html</trackback:ping><description><![CDATA[<a href="http://www.blogjava.net/Nirvana/archive/2012/09/10/387404.html" target="_blank">http://www.blogjava.net/Nirvana/archive/2012/09/10/387404.html<br /><br /></a><a href="http://www.blogjava.net/Nirvana/archive/2012/09/10/387408.html" target="_blank">http://www.blogjava.net/Nirvana/archive/2012/09/10/387408.html</a><img src ="http://www.blogjava.net/paulwong/aggbug/388642.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2012-09-26 23:15 <a href="http://www.blogjava.net/paulwong/archive/2012/09/26/388642.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个完整的JENKINS下的ANT BUILD.XML文件</title><link>http://www.blogjava.net/paulwong/archive/2012/02/08/369617.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Wed, 08 Feb 2012 10:40:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2012/02/08/369617.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/369617.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2012/02/08/369617.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/369617.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/369617.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->&lt;?xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"?&gt;&lt;project&nbsp;name="genwar"&nbsp;default="all...&nbsp;&nbsp;<a href='http://www.blogjava.net/paulwong/archive/2012/02/08/369617.html'>阅读全文</a><img src ="http://www.blogjava.net/paulwong/aggbug/369617.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2012-02-08 18:40 <a href="http://www.blogjava.net/paulwong/archive/2012/02/08/369617.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JENKINS使用步骤</title><link>http://www.blogjava.net/paulwong/archive/2012/01/31/369103.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Tue, 31 Jan 2012 10:19:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2012/01/31/369103.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/369103.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2012/01/31/369103.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/369103.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/369103.html</trackback:ping><description><![CDATA[从代码仓库获取代码用SVN，做单元测试用JUNIT，做代码检查用PMD、FINDBUGS，代码编译、打包用ANT，拷贝文件到部署服务器上用SHELL，出现BUG了通知开发人员要发EMAIL，工具一多了，整合起来用时，不断切换界面，输入命令的复杂性可想而知，有没有一站式的工具可以代劳呢？ <br />
<br />
有，这就是JENKINS，有了她，你就可以：通过统一的WEB界面做各种配置工作、查看工具的LOG输出、即使是历史的日志查看也没问题；通知配置排程，可以自动的获取代码、编译、打包和部署，发邮件，无须人工干预。
<ol>
     <li>安装JENKINS，其实就是把一个WAR包放到容器中</li>
     <li>安装插件：发邮件插件<a href="http://wiki.jenkins-ci.org/display/JENKINS/Email-ext+plugin">Jenkins Email Extension Plugin</a>和部署插件<a href="http://wiki.jenkins-ci.org/display/JENKINS/Deploy+Plugin">Deploy to container Plugin</a></li>
     <li>配置JDK和邮件服务器地址</li>
     <li>新建任务：配置SVN地址/配置构建排程@hourly/配置构建步骤，如先用ANT编译打包再传到服务器/配置成功或失败后发邮件通知的地址</li>
     <li>手动执行任务或等待时间到了后执行任务<br />
     </li>
</ol>
各种插件的安装
<ol>
     <li>ANT：如果在JENKINS中使用了ANT-JUNIT，由于JENKINS是直接调用操作系统的ANT命令的，所以要在LINUX下安装ANT，配置ANT_HOME，并将BIN加入到PATH中：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">ANT_HOME</span><span style="color: #000000; ">=</span><span style="color: #000000; ">/opt/ant/apache-ant-</span><span style="color: #000000; ">1.8.2</span><span style="color: #000000; "><br />JAVA_HOME</span><span style="color: #000000; ">=</span><span style="color: #000000; ">/usr/java/jdk1</span><span style="color: #000000; ">.6</span><span style="color: #000000; ">.0_</span><span style="color: #000000; ">29</span><span style="color: #000000; "><br />JRE_HOME</span><span style="color: #000000; ">=</span><span style="color: #000000; ">/usr/java/jdk1</span><span style="color: #000000; ">.6</span><span style="color: #000000; ">.0_</span><span style="color: #000000; ">29</span><span style="color: #000000; ">/jre<br />PATH</span><span style="color: #000000; ">=</span><span style="color: #000000; ">$ANT_HOME/bin:$JAVA_HOME/bin:JRE_HOME/bin:$PATH&nbsp;<br />CLASSPATH</span><span style="color: #000000; ">=</span><span style="color: #000000; ">.:$JAVA_HOME/lib/jt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib</span><span style="color: #000000; "></span><span style="color: #000000; "> <br />export&nbsp;ANT_HOME&nbsp;JAVA_HOME&nbsp;JRE_HOME&nbsp;PATH&nbsp;CLASSPATH <br /></span></div><br />
     </li>
</ol>
<p><a href="http://hanqunfeng.iteye.com/category/138233">http://hanqunfeng.iteye.com/category/138233</a></p><img src ="http://www.blogjava.net/paulwong/aggbug/369103.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2012-01-31 18:19 <a href="http://www.blogjava.net/paulwong/archive/2012/01/31/369103.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>