鋪墊: html
在原來公司,技術總監是一個很是有能力的人,能夠說是搞技術的人的一個風向標、一個標杆。他在公司內部搭建了一套持續集成(Continuous integration,簡稱CI,原理的話,網上不少,再也不累述)的架子,使用的jinkens+maven/ant,還在jinkens上集成了一些其餘的插件,如sonar等。 java
技術總監對代碼質量要求很是高,固然,這也是把一個產品作好的必要一步。 web
實際上,在他的這一套東西下,公司的項目一每天變好,代碼質量愈來愈高,體系更健全,流程更清晰,開發人員的自覺性和編碼能力都有所提升。 apache
如今從原來公司出來了,仔細想一想,尚未本身掌握這一套東西。好的東西,就應該被傳承下去,因此最近開始本身學習CI一套的東西。 windows
說明: tomcat
我本身學習東西的時候,自制力不強,因此通常沒有很體系地去學習,文章可能也寫得沒什麼條理(典型的理科生,想到什麼說什麼),因此在文章結構上但願你們體諒下。 app
廢話很少了,開工: eclipse
首先搭建一個簡單的CI基礎:一個maven項目,自動部署到tomcat webapp
我在作這個DEMO的時候,其實已經集成到了jinkens上,可是一直在自動部署的這一塊出問題,後來我就單獨用命令在驗證了,因此和jinkens繼承的內容放到後面(可能下一章)來說。之因此單獨一章來說自動部署這一塊,是因爲我發現網上不少的文章都說得很是含糊(主要參考StackOverflow),好了,廢話很少說了。 maven
準備材料:
一、maven project(不詳細講解如何創建project,請參考個人其餘博客)
二、tomcat(6或者7均可以,有一點小差異,後面講到)
三、maven3.0.5
開發環境:jdk7+tomcat7+windows7 x64 +eclipse
第一步:配置tomcat
不管你是tomcat7或者tomcat6,修改%TOMCAT_HOME%/conf/tomcat-users.xml,在裏面添加用戶。
高能警告:下面的<role></role>標籤,在tomcat的原來默認配置裏面,只有<role rolename="tomcat" />和<role rolename="role1" />,若是隻使用這兩種配置的話,是沒法再http://localhost:8080/manager下登陸的,會出現403錯誤(因爲沒有manager-gui角色權限),若是沒有配置<role rolename="manager-script" /><role rolename="manager-jmx" />,而且在roles裏面添加進去,會在自動部署的時候,出現Cannot invoke Tomcat manager: Connection reset by peer錯誤(這個問題我搞了一天,在StackOverflow上不少相似的問題,可是都沒提別提醒是這個地方出的問題)
<role rolename="tomcat" /> <role rolename="role1" /> <!-- tomcat的默認註釋掉的代碼裏面沒有下面四中角色,必定要加上,否則會出現不少錯誤 --> <role rolename="admin" /> <role rolename="manager-gui" /> <role rolename="manager-script" /> <role rolename="manager-jmx" /> <user username="admin" password="admin" roles="tomcat,manager-gui" /> <user username="both" password="tomcat" roles="tomcat,role1,manager-gui" /> <!-- 這個是我用到的用戶,roles裏面的角色名很重要 --> <user username="tomcat" password="tomcat" roles="role1,manager-gui,tomcat,admin,manager-script,manager-jmx" />
個人settings.xml在%MAVEN_HOME%/conf下,在<servers>節點內,添加以下代碼
<server> <id>tomcatServer</id> <!-- server login name --> <username>tomcat</username> <!-- server login password --> <password>tomcat</password> </server>
第三步:配置pom.xml
在<plugins>節點內,添加以下代碼,
高能警告:tomcat7-maven-plugin插件裏的<url>裏是http://localhost:8080/manager/text,不是http://localhost:8080/manager/html,
<build> <finalName>myweb</finalName> <defaultGoal>install</defaultGoal> <sourceDirectory>src/main/java</sourceDirectory> <resources> <resource> <directory>src/main/java</directory> <excludes> <exclude>**/*.java</exclude> </excludes> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> </resource> </resources> <plugins> <!-- 打包插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.5.1</version> <configuration> <source>1.7</source> <target>1.7</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>2.2</version> <configuration> <warSourceDirectory>${basedir}/src/main/webapp</warSourceDirectory> <version>3.0</version> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.12.4</version> <configuration> <skipTests>true</skipTests> <testFailureIgnore>true</testFailureIgnore> </configuration> </plugin> <!-- 自動部署到tomcat --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <!-- tomcat7 --> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.1</version> <!-- 若是是tomcat6,則使用tomcat-maven-plugin 1.1版本 <artifactId>tomcat-maven-plugin</artifactId> <version>1.1</version> --> <configuration> <url>http://localhost:8080/manager/text</url> <server>tomcatServer</server> <path>/myweb</path> </configuration> </plugin> </plugins> </build>
第四步:運行maven命令,自動編譯-打包-部署
首先啓動tomcat。
使用CMD命令,進入項目的根目錄,而後運行命令:mvn -U clean package tomcat7:deploy(若是是tomcat的插件,那麼使用mvn -U clean package tomcat:deploy命令),若是是從新部署,則把deploy改爲redeploy。
最後看到BUILD SUCCESS則表示部署成功了
在%TOMCAT_HOME%/webapps下,可以看到咱們部署的系統
補充:
這也是我剛纔實驗發現的,當使用CMD命令運行了maven命令自動部署後,驚奇地發現,沒有重啓tomcat,新部署的myweb項目也啓動了,而且能夠訪問。下圖是運行命令時,tomcat的日誌