之前已經記錄了maven和sonar的安裝以及使用:
本篇文章將hudson安裝使用說明一下,hudson 與 jenkins一樣是可擴展的持續集成引擎。
持續化集成環境
1.JDK:1.8.0_60
2.hudson-3.2.2
3.操作系統 win8 64位
4.tomcat版本apache-tomcat-8.0.24
5.環境變量配置的maven是3.3.9版本(版本有誤,所以最終沒有用到)
6.重新下載的maven版本3.1.1
運行war包和可執行jar的環境:
1.(dubbo服務)爲linux環境。(ip:192.168.103.228)
注意事項:由於處於兩個服務器,所以特別需要注意項目打包使用的jdk和最後jar/war包運行的環境中tomcat所使用的jdk要保持一致。
當時由於配置了使用3.3.9版本maven時執行hudson Job時報錯,所以重新又下載了maven 3.1.1,系統管理中配置的maven的maven_home是新的maven 3.1.1的安裝主目錄
hudson 的運行,將下載的hudson-3.2.2.war包改個名字爲hudson然後丟到tomcat的webapps下(D:\Program Files (x86)\apache-tomcat-8.0.24\webapps)
插件的安裝:
下載插件的網址:http://hudson-ci.org/download/plugins/
方法1. 系統管理-》管理插件 如果這種安裝方法出現了問題。可以換成第二種方法
方法2. 從http://hudson-ci.org/download/plugins/網址下下載好插件,複製到hudson的用戶目錄下:C:\Users\a\.hudson\plugins,然後重新啓動hudson即可自動安裝。
用到的插件名字:
deploy.hpi是將jar包或者war包部署到tomcat,使用tomcat自帶的部署方式,只要指定用戶名密碼和url即可。url:http://127.0.0.1:8180/ 通過tomcat自帶的項目管理髮布的
sonar.hpi爲sonar插件
scp.hpi是通過scp方式傳輸文件之類。(ssh協議)
ssh.hpi 默認端口22,遠程執行腳本
maven-plugin.hpi爲maven插件 但是我還是禁用了,使用自己單獨下載的。maven-plugin.hpi.disabled表示禁用吧,其實我猜的。
hudson用戶目錄
hudson主目錄下C:\Users\a\.hudson\jobs下是每個hudson的job運行時所用的工作區間,在每個job下的工作區間有一個workspace目錄,這個目錄是從svn上拉下來的代碼存放的位置。
新建一個job是在advanced job options中有一個選項Clean workspace before build可以clean workspace在每次build之前可以clean掉workspace。
操作步驟:
hudson系統配置
1.
2.
3.
4. 配置sonar-qube服務器,點擊advanced配置選項
5.這個一個新的job,負責是打包dubbo服務的成爲一個可執行的jar包。
6. clean deploy 並且 刪除遠程服務器上之前的上傳的jar和lib包
Build Triggers部分配置的是觸發構建的方式。可選的三種方式分別爲:
□Build after other project are built:在其他項目構建完成之後構建本項目。
□Build periodically:週期性地構建本項目。
□Poll SCM:週期性地輪詢源碼倉庫,發現有更新的時候構建本項目。
7. 配置build完之後接着執行job(pubDobboService)以及通過scp插件上傳hudson用戶目錄下job目錄下workspace下執行完deploy之後最新的jar到遠程服務器上
當前目錄是workspace目錄,必須使用相對路徑。配置中source爲hudson所在的目錄,destination爲hudson系統配置下scp repository hosts(SCP sites)配置的遠程服務器。
此處上傳了一個可執行jar包和該jar包執行時所需要的jar包(放在lib文件夾下)。
<plugins>
<!-- 打包jar文件時,配置manifest文件,加入lib包的jar依賴 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<classesDirectory>target/classes/</classesDirectory>
<archive>
<manifest>
<mainClass>com.alibaba.dubbo.container.Main</mainClass>
<!-- 打包時 MANIFEST.MF文件不記錄的時間戳版本 -->
<useUniqueVersions>false</useUniqueVersions>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<type>jar</type>
<includeTypes>jar</includeTypes>
<useUniqueVersions>false</useUniqueVersions>
<outputDirectory>
${project.build.directory}/lib
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
8.這個是在上個job(負責打包可執行jardubbo服務上傳到遠程服務器)之後執行的。所以Build Triggers中Build after other jobs are built選項勾上,jobs names 爲efp-service-core
#!/bin/sh
## java env
export JAVA_HOME=/usr/java/jdk1.7.0_80
export JRE_HOME=$JAVA_HOME/jre
## service name
APP_NAME=dubboService
SERVICE_DIR=/efp/service/$APP_NAME
SERVICE_NAME=efpDubboService
JAR_NAME=$SERVICE_NAME\.jar
PID=$SERVICE_NAME\.pid
cd $SERVICE_DIR
case "$1" in
start)
nohup $JRE_HOME/bin/java -Xms256m -Xmx512m -jar $JAR_NAME >/dev/null 2>&1 &
echo $! > $SERVICE_DIR/$PID
echo "=== start $SERVICE_NAME"
;;
stop)
if [ -f $SERVICE_DIR/$PID ]; then
txtP_ID=`cat $SERVICE_DIR/$PID`
kill -9 $txtP_ID
rm -rf $SERVICE_DIR/$PID
fi
echo "=== stop $SERVICE_NAME"
sleep 5
P_ID=`ps -ef | grep -w $JAR_NAME | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "=== $SERVICE_NAME process not exists or stop success"
else
echo "=== $SERVICE_NAME process pid is:$P_ID"
echo "=== begin kill $SERVICE_NAME process, pid is:$P_ID"
kill -9 $P_ID
fi
;;
restart)
$0 stop
sleep 2
$0 start
echo "=== restart $SERVICE_NAME"
;;
*)
## restart
$0 stop
sleep 2
$0 start
;;
esac
exit 0
10.11. build Environment中勾選Execute shell script on remote host using ssh
SSH site 是在系統配置中配置的SSH remote sites配置的
SSH sites。
此處寫了停止tomcat(在build之前執行)和運行tomcat的腳本並且刪除之前的efp war包(在build之後執行)
build執行的是maven指令 clean deploy -Dmaven.test.skip=true 表示clean 打包 發佈但是跳過執行單元測試
12. build完成之後通過scp插件將生成的war包上傳到遠程服務器上。
13. 這是一個新的job 負責執行sonar代碼檢查。
多個模塊,我就在一個父文件夾下建立一個sonar-project.properties文件
sonar-project.properties內容
# Root project information
sonar.projectKey=efp
sonar.projectName=efp
sonar.projectVersion=1.0.0
# Some properties that will be inherited by the modules
sonar.sources=src/main/java
# List of the module identifiers
sonar.modules=efp-common-config,efp-facade-core,efp-common-web,efp-common-util,efp-service-core,efp-web-fore
# Properties can obviously be overriden for
# each module - just prefix them with the module ID
#efp-common-config module
efp-common-config.sonar.projectName=efp-common-config
efp-common-config.sonar.sources=src
#efp-facade-core
efp-facade-core.sonar.projectName=efp-facade-core
#efp-common-web
efp-common-web.sonar.projectName=efp-common-web
efp-common-web.sonar.exclusions=/src/main/java/com/zbiti/platform/web/filter/**, src/main/java/com/zbiti/platform/core/**
#efp-common-util
efp-common-util.sonar.projectName=efp-common-util
#efp-service-core
efp-service-core.sonar.projectName=efp-service-core
#efp-web-fore
efp-web-fore.sonar.projectName=efp-web-fore
14. 之前安裝了sonar插件,所以在這裏add build step有一個選項Invoke standalone sonar analysis,增加一個 這個選項,jdk選擇系統配置中配置的。就好了。
由於sonar和sonar runner在之前hudson系統配置中已經配置,所以就可以調用了。
參考網址:
http://www.cnblogs.com/AlanLee/p/5372283.html