Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

时间:2021-10-22 03:14:37

安装Hudson

IP:192.168.4.221 8G 内存(Hudson 多个工程在同时构建的情况下比较耗内存)

环境:CentOS 6.6、JDK7

Hudson 不需要用到数据库,Hudson 只是一个持续集成服务器(持续集成工具),要想搭建一套完整的持续集成管理平台, 还需要用到前面课程中所讲到的 SVN、Maven、Sonar 等工具,按需求整合则可。

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

上图可以看出hudson对项目进行构建,构建完成了之后需要装载到本地maven库,并发布到私有库所以需要在这里安装maven

1、 安装 JDK 并配置环境变量(略) JAVA_HOME=/usr/local/java/jdk1.7.0_72

2、 Maven 本地仓库的安装(使用 Maven 作为项目构建与管理工具):

(1)下载 maven-3.0.5

(注意:建议不要下载 3.1 或更高版本的 Maven,因为与 Hudson 进行集成时会有问题, 之前有遇到过):

# wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.0.5/binaries/apache-maven- 3.0.5-bin.tar.gz

(2)解压:

# tar -zxvf apache-maven-3.0.5-bin.tar.gz # mv apache-maven-3.0.5 maven-3.0.5

(3)配置 Maven 环境变量:

# vi /etc/profile
## maven env
export MAVEN_HOME=/root/maven-3.0.5 export PATH=$PATH:$MAVEN_HOME/bin
# source /etc/profile

(4)Maven 本地库配置:settings.xml

<?xml version="1.0" encoding="UTF-8"?>

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
   //配置本地库的路径
	<localRepository>/root/maven-3.0.5/.m2/repository</localRepository>
	<interactiveMode>true</interactiveMode>
    <offline>false</offline>
    <pluginGroups>
        <pluginGroup>org.mortbay.jetty</pluginGroup>
        <pluginGroup>org.jenkins-ci.tools</pluginGroup>
    </pluginGroups>

	<!--配置权限,使用默认用户-->
	<servers>
		<server>
			<id>nexus-releases</id>
			<username>deployment</username>
			<password>deployment123</password>
		</server>
		<server>
			<id>nexus-snapshots</id>
			<username>deployment</username>
			<password>deployment123</password>
		</server>
	</servers>

    <mirrors>

    </mirrors>

	<profiles>
		<profile>
			<id>edu</id>
			<activation>
				<activeByDefault>false</activeByDefault>
				<jdk>1.6</jdk>
			</activation>
			<repositories>
				<!-- 私有库地址-->
				//因为私有库也在这个机器所以修改路径为localhost
				//当然视实际情况而定
				<repository>
					<id>nexus</id>
					<url>http://localhost:8081/nexus/content/groups/public/</url>
					<releases>
						<enabled>true</enabled>
					</releases>
					<snapshots>
						<enabled>true</enabled>
					</snapshots>
				</repository>
			</repositories>
			<pluginRepositories>
				<!--插件库地址-->
				<pluginRepository>
					<id>nexus</id>
					<url>http://localhost:8081/nexus/content/groups/public/</url>
					<releases>
						<enabled>true</enabled>
					</releases>
					<snapshots>
						<enabled>true</enabled>
				   </snapshots>
				</pluginRepository>
			</pluginRepositories>
		</profile>

		//因为sonar也在本机,所以修改为localhost,当然视实际情况而定。
		//这里可以不用配置其实,因为hudson对sonar有一个插件
		//如果不用插件就打开配置
		<!--
		<profile>
			<id>sonar</id>
			<activation>
				<activeByDefault>true</activeByDefault>
			</activation>
			<properties>
				<!-- Example for MySQL-->
				<sonar.jdbc.url>
					jdbc:mysql://localhost:3306/sonarqube?useUnicode=true&amp;characterEncoding=utf8
				</sonar.jdbc.url>
				<sonar.jdbc.username>root</sonar.jdbc.username>
				<sonar.jdbc.password>wusc.123</sonar.jdbc.password>

				<!-- Optional URL to server. Default value is http://localhost:9000 -->
				<sonar.host.url>
					http://localhost:9090/sonarqube
				</sonar.host.url>
			</properties>
		</profile>
		-->
	</profiles>

	<!--激活profile-->
	<activeProfiles>
		<activeProfile>edu</activeProfile>
	</activeProfiles>

</settings>

将settings.xml上传上去,将原来的文件覆盖掉。

3、 配置 HudsonHome,在/root 目录下创建 HudsonHome 目录,并配置到环境变量

# mkdir HudsonHome
切换到 root 用户,在/etc/profile 中配置全局环境变量
# vi /etc/profile ## hudson env
export HUDSON_HOME=/root/HudsonHome
# source /etc/profile

4、 下载最新版 Tomcat7,当前最新版为 7.0.59:

# wget http://apache.fayea.com/tomcat/tomcat-7/v7.0.59/bin/apache-tomcat- 7.0.59.tar.gz

5、 解压安装 Tomcat:

# tar -zxvf apache-tomcat-7.0.59.tar.gz # mv apache-tomcat-7.0.59 hudson-tomcat

移除/root/hudson-tomcat/webapps 目录下的所有文件:

# rm -rf /root/hudson-tomcat/webapps/*

将 Tomcat 容器的编码设为 UTF-8:

# vi /root/hudson-tomcat/conf/server.xml <Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />

如果不把 Tomcat 容器的编码设为 UTF-8,在以后配置 Hudson 是有下面的提示:

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

设置 hudson-tomcat 的内存,因为hudson是比较消耗内存的

# vi /root/hudson-tomcat/bin/catalina.sh
#!/bin/sh 下面增加: JAVA_OPTS='-Xms512m -Xmx2048m'

6、 下载最新版的 Hudson(这里是 3.2.2 版)包:

# wget http://mirror.bit.edu.cn/eclipse/hudson/war/hudson-3.2.2.war

将 war 包拷贝到 hudson-tomcat/weapps 目录,并重命名为 hudson.war

# cp /root/hudson-3.2.2.war /root/hudson-tomcat/webapps/hudson.war

7、 防火墙开启 8080 端口,用 root 用户修改/etc/sysconfig/iptables,

 # vi /etc/sysconfig/iptables
增加:
## hudson-tomcat port:8080
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT

重启防火墙:

# service iptables restart

8、 设置 hudson-tomcat 开机启动: 在虚拟主机中编辑/etc/rc.local 文件,

# vi /etc/rc.local

加入: /root/hudson-tomcat/bin/startup.sh

9、 启动 hudson-tomcat

# /root/hudson-tomcat/bin/startup.sh

10、 配置 Hudson:

(1)浏览器输入:http://192.168.4.221:8080/hudson/

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

初始化安装需要安装 3 个默认勾选中的插件(如上图红色部分),其它插件可以等初始 化安装完成之后再选择安装。

点击“Install”安装按钮后,需要等待一会时间才能安装完成。安装完成后按“Finish”按钮。

安装的插件保存在 /root/HudsonHome/plugins 目录。

(2)初始化完成后就会进行 Hudson 的配置管理界面:

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

安全配置

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

使用项目矩阵授权策略

因为可能注册新的用户,所以在允许用户注册前面打钩

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

注册成功后,在进入刚才的安全配置,发现刚才分配的admin用户前面的红线没有了,说明用户添加成功了

系统设置

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

配置系统信息、JDK、Maven

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

注意在hudson中右边的 问号 “?” 点击展开有关于配置的详细介绍的配置指南等

Instantce Tag:给这个管理平台命名

系统消息:想用户发布一些系统泛微内的通知或公告。

执行者数量:这个项目允许同时构建的数量,并发数量

生成前等待时间:构建之前需要等待的时间

SCM签出重试次数:如果从版本库签出代码失败,hudson会按照这个指定的次数进行重试之后再放弃。

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

上图是配置邮箱

SMTP服务器:配置为自己的邮箱

Hudson Url :自己这个Hunson客户端在浏览器的路径(截止到项目名)

SMTP验证:自己邮箱的用户名,密码

端口:默认25

最后保存

保存后的效果

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

结合我们想要实现的持续集成功能,需要安装如下几个插件。如想集成更多功能,自行 添加插件并配置则可。(注意:现在我们使用了 SonarQube 质量管理不台,则不再需要在 Hudson 中单独去安装 CheckStyle、Findbugs、PMD、Cobertura 等 Sonar 中已有的插件) 逐个搜索你想要安装的插件并点击安装,安装完之后重启 Hudson。

如下图所示:

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

需要安装的插件

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

安装完之后点击右上角的restart重启,重启才会生效

installed就是已经安装好的插件,

这些插件安装完之后,上面配置过的系统配置信息中会多出这些插件的配置选项

在 Hudson 中配置 SonarQube 链接

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

Server Url:之前sonar客户端首页的地址,因为是在本机安装的,所以可以是localhost

login:用户

password:密码

Server Public URL:也是sonar客户端的地址,但是不论局域网还是公网都能访问的ip,所以应该是真正的ip

Database URL:数据库连接

Database login:数据库用户

Database password:数据库密码

Database Driver:数据库驱动

以上就是 Hudson 的基本安装和配置,更多其它配置和功能可自行扩展。

使用Hudson

Hudson 的使用(使用 Hudson 来自动化编译、分析、打包、发布、部署项目)

添加项目

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

创建svn连接,创建连接的时候可能出现报错,点击”enter credential“>选择 name/password进行授权,输入admin xxxx>保存之后,回到如下刚才的页面,还报错==>点击空白处,报错消失

poll SCM :每过一段时间自动检测svn的代码时候有变动,有变动的话就自动进行构建,比如这里的设置就是每一分钟进行自动化构建。

Build peroidically:每天进行检测的策略。

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

项目的pom:pom.xml

Goals and options : clean install deploy

E-mail 记得勾选Send a e-mial for every unstable build,每次构建失败发邮件提醒。

一般还要勾选sonar,文章给出的图片没有勾选是因为,示例中要提交的项目是父项目,没有java文件,只有一个pom文件,不需要sonar

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

上图中点击Dubbo视频教程–持续集成下方的Hudson,如果在上面进行了设置的话,每过一段时间会自动构建,这里可以点击图中右边箭头素质的图标进行主动构建,从图中箭头左面所示可以看到正在构建。

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

点击左边箭头区域的项目名字,之后会出现一个黑点(长得有点像终端)>点击黑点>命令行输出==>看到从配置的私服maven中下载需要的依赖,直到build success说明构建成功了。

再构建一个项目,注意这里有点技巧

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

因为刚才已经构建过一次了,这里只需要”复制现有任务“,选中刚才的任务即可。

进去之后只需要修改project name、 description、svn的url就行修改(当然还需要授权一次)

注意:上面的项目因为是父项目,没有java代码,所以没有勾选sonar,但是本次构建的项目中是有java代码的,所以这里需要勾选sonar,因为在上面的系统配置中已经配置了连接我们的sonarQube,所以这里不需要配置任何东西,

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

保存后发现多了sonar的图标。

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

接着按照第一个项目的步骤进行构建

上面的项目中没有用到sonar,所以构建完成就没有了,这里继承了sonar,从下图可以看到,构建完成之后,自动对代码进行了分析。

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

这个时候进入sonar的客户端

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

发现刚刚更新的项目

按照前面的方式将所有的项目构建进来(次省略)。

在构建service-user的时候注意

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

因为service-user是服务的实现,依赖于facade-user这个接口项目,所以希望,facede-user构建之后希望触发service-user也自动构建,也只有这样才能引入最新的facade-user

设置如图

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

上图中的Goals and options注意,改为clean install,因为这个项目是一个调用的接口,不需要被别人引用,所以不需要发布到私有maven库。

tips:自动化部署

如何部署服务到其他的机器上?

首先在系统配置中增加ssh配置,如下图

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

username是ssh 的时候需要填写的用户

remote directory:远程存放项目的根目录

上面添加了一个provider的ssh,再添加一个client的ssh

对provider进行自动化部署

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

到Hudson部署的机器了解目录结构

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

name:是项目的名字(在项目的ssh中配置过的名字)

source files:Hudson的工作空间下的项目,即每次修改后的代码都自动构架到hudson的目录下面,通过上面聊姐hudson的工作目录,这里以上图中红色区域(即到workspace目录)为根目录开始,将下面target目录中的edu-service-user.jar 和依赖的lib目录(jar包)自动化部署到远端。

remote directory:这里因为之前在provider的项目配置中配置过了根目录(/Home/Wusc),所以这里只需要在后面的目录中进行填写,填写希望部署的目录

Exec command:自动化部署的脚本。

自己看一下自动化部署的效果,将远程机器中(部署provider的机器)的jar包删除掉。

自己手动构建一次providr看一下效果==>点击进入项目==>点击左侧的立即构建,去部署provider的机器中查看jar包是否出现,并通过dubbo的图形工具,查看项目是否已经部署完成。

同理设置自动华部署web项目(client)

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

通过类似provider的方式自行测试client的自动化构建过程

测试项目自动化构建:

进入自己的项目中修改某处代码==>点击项目右键team==>更新==>填写一点备注(比如”测试自动糊构建“)>等待>进入hudson查看是否正在自动构建(因为我们上面设置了每一分钟自动化构建一次,如果检测到代码变化的话。)

测试自己配置的如果依赖的父目录构建了的话,自己也会自动构建

Dubbo入门到精通学习笔记(六):持续集成管理平台之Hudson 持续集成服务器的安装配置与使用

上图中的facede-user我们手动构建一次,之后service-user就自己开始构建了,这样就保证了自己依赖的项目永远是最新的。

附录:两个脚本

restart.sh (client脚本)

## java env
export JAVA_HOME=/usr/local/java/jdk1.7.0_72
export JRE_HOME=$JAVA_HOME/jre

## restart tomcat
/home/wusc/edu/web/boss-tomcat/bin/shutdown.sh
sleep 3
rm -rf /home/wusc/edu/web/boss-tomcat/webapps/edu-web-boss
/home/wusc/edu/web/boss-tomcat/bin/startup.sh

service-user.sh(provider脚本)

#!/bin/sh

## java env
export JAVA_HOME=/usr/local/java/jdk1.7.0_72
export JRE_HOME=$JAVA_HOME/jre

## service name
APP_NAME=user

SERVICE_DIR=/home/wusc/edu/service/$APP_NAME
SERVICE_NAME=edu-service-$APP_NAME
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)
        kill `cat $SERVICE_DIR/$PID`
        rm -rf $SERVICE_DIR/$PID
        echo "=== stop $SERVICE_NAME"

        sleep 5
        P_ID=`ps -ef | grep -w "$SERVICE_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