您的位置:首页 > 其它

持续集成-maven git jenkins与自动化部署

2017-04-16 00:00 393 查看

1. maven安装

1、下载和解压maven

下载网址 https://archive.apache.org/dist/maven/maven-3/ ,根据官方发布历史的说明,3.2版本需要jdk 1.6及以上版本、3.3和3.5需要 jdk 1.7及以上版本。

这里把maven解压到 /usr/local/maven目录下。

tar -zxvf apache-maven-3.3.9-bin.tar.gz /usr/local/maven


2、配置Maven

添加环境变量

#maven
export MAVEN_HOME=/usr/local/maven
export PATH=$PATH:$MAVEN_HOME/bin


激活环境变量

source /etc/profile


验证是否安装成功

mvn -v

如果出现maven的版本信息,证明安装成功

私服配置

配置私服地址后,maven以后都从私服上下载jar包和插件。如果没搭建私服,可以参考文章 https://my.oschina.net/thinwonton/blog/879685 搭建,或者不搭建私服直接使用原maven中心仓库也可以,但在团队上传私有jar包到私服后,maven找不到jar包发生编译不过的问题。编辑/usr/local/maven/conf/setting.xml

<profiles>
<profile>
<id>nexus</id>
<activation>
<activeByDefault>false</activeByDefault>
<jdk>1.6</jdk>
</activation>
<repositories>
<!-- 私有库地址-->
<repository>
<id>nexus</id>
<url>http://192.168.88.16:8081/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<!--插件库地址-->
<pluginRepository>
<id>nexus</id>
<url>http://192.168.88.16:8081/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>

</profiles>

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


发布配置

项目中的jar包如果需要发布到私服,需要在setting.xml中添加私服的访问账号密码。如果不配置,在deploy发布到私服的时候,会报401未授权的错误。

<servers>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>

</servers>

** 注意 **
配置的id要和maven 工程中pom.xml里远程deploy的地址对应一致,本测试工程的pom.xml配置如下:

<!-- 配置发布地址 -->
<distributionManagement>
<repository>
<id>nexus-releases</id>
<name>Nexus Release Repository</name>
<url>http://192.168.88.16:8081/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>http://192.168.88.16:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>

2. git安装

1、安装依赖

yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker

2、下载和解压
下载地址:https://github.com/git/git/releases。 下载 tar.gz 压缩包的git源码。

上传到服务器后,将源码解压到/usr/local/git/source

3、安装和配置git
编译源码和安装到/usr/local/git目录

make prefix=/usr/local/git all
make prefix=/usr/local/git install

修改配置文件

vim /etc/profile

配置环境变量

#git
export MAVEN_HOME=/usr/local/git
export PATH=$PATH:$MAVEN_HOME/bin

激活环境变量

source /etc/profile

验证是否安装成功

git --version

3. jenkins

3.1 下载和部署

下载地址:https://jenkins.io/download/ ,这里下载war包。

部署WAR包到 tomcat前,先把tomcat的url解码后的编码格式修改为UTF-8。修改tomcat的server.xml文件,在connector节点加上URIEncoding编码。

<Connector port="8080" URIEncoding="UTF-8"  protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />

添加环境变量,jenkins将根据home的路径添加工作空间

#JENKINS
export JENKINS_HOME=/data/jenkins

将war包部署在tomcat里,启动tomcat后即可通过 http://192.168.88.16:8080/jenkins/ 访问。第一次进入首页后,会出现下面画面。



这是告诉我们需要去给定路径获取初始密码,查看该文件的密码并在上述页面输入就可以进入jenkins了。

安装推荐的插件后(好不容易用翻墙全部安装成功了,5555),点击continue as admin 就可以进入jenkins主页面。

** 修改管理员密码 **

点击右上角的admin,在打开的页面里点击右边的“设置”,找到密码那里输入需要修改的密码。

3.2 配置安全策略

打开设置里面的Configure Global Security。



这里允许注册用户,打开安全矩阵,给不同用户赋予不同的权限。添加admin用户,赋予所有的权限。匿名用户只给予read权限。



3.3 安装插件

在插件管理中可以在线安装各种插件。

1、安装安装Publish Over SSH插件

该插件支持通过SSH协议发布项目和执行远程shell脚本

2、安装Git Plugin 插件(前面推荐插件那里有可能已经安装了)

Git Plugin 插件支持拉取远端的代码。

3、Maven Integration plugin插件

3.4 系统和环境设置

(1)、全局系统设置

点击 系统管理--->系统设置。设置job并行执行数量、



设置管理员邮箱和邮件通知服务。需要注意的一点:管理员邮箱地址需要在admin用户中设置,邮件通知服务的发送地址必须和管理员的邮箱地址一致。





在Jenkins的使用中邮件提醒是一个常用功能,Jenkins默认安装了Mailer Plugin插件用于实现此功能,但Mailer Plugin功能简单不能满足一些复杂需求,如:自定义邮件标题、内容等。Extended E-mail Notification(ext mail)是一个功能更为齐全的插件,这个插件的使用请参考:http://blog.csdn.net/houyefeng/article/details/51344337

(2)、工具环境配置
打开 系统管理 --> Global Tool Configuration选项,进入全局工具配置。





3.5 构建项目

3.5.1 新建job

在首页点击新建job



输入项目名称,选择构建一个maven项目

3.5.2 general设置

输入项目名和描述,这些可以在首页显示。

勾选“丢弃旧的构建”,这项功能主要是为了节省服务器空间,这里设置为“保持2天”,超过的Jenkins会自动删除旧的构建。



3.5.3 源码管理

Jenkins支持常用的代码版本管理软件。通过此项设置,Jenkins会自动从代码版本管理的服务器下载源码,并自动构建。以下以git为例进行说明,源码托管在git.oschina.net。



3.5.4 构建触发器

这里有很多种触发器可以选择,它们用于在何时触发构建项目。至于用何种触发器,看需求。这里介绍几种。

Build after other projects are built:构建与其他项目构建后,用于上下游项目有关联的时候。

Build periodically:定时执行构建。与cron定时器表达式一致。一共由5位构成,下面是每位参数表达的意思。

日程表的参数
第一个参数代表的是分钟 minute,取值 0~59;
第二个参数代表的是小时 hour,取值 0~23;
第三个参数代表的是天 day,取值 1~31;
第四个参数代表的是月 month,取值 1~12;
最后一个参数代表的是星期 week,取值 0~7,0 和 7 都是表示星期天。


GitHub hook trigger for GITScm polling:github代码库有变更时,触发jenkins构建

Poll SCM:设置定时检查代码仓库是否有变更,有变更则构建

3.5.5 构建环境

用于对构建的环境的一些操作。

Delete workspace before build starts:在构建之前清空工作空间

Abort the build if it's stuck:如果构建出现问题则终止构建

Add timestamps to the Console Output:给控制台输出增加时间戳

Use secret text(s) or file(s):使用加密文件或者文本



3.5.6 构建

配置pom的文件所在路径,以及需要运行mvn命令



3.5.7 构建设置

指定构建失败后发送的邮箱。



3.5.8 开始构建

构建可以等待触发器触发,也可以手动触发构建。在具体job的面板上有“立即构建按钮”,点击后触发构建,然后可以在下面的运行的任务中点击查看具体的任务。任务详情里面通过看控制台输出可以看到整个构建过程。



构建完后,点击左边的“工作空间”可以看到构建后的文件。其实这些文件存放在前面设置的JENKINS_HOME环境变量所指向的路径。



3.6 自动部署项目到远端服务器

3.6.1 需求

现希望jenkins构建完项目后,可以把文件部署在远程的应用服务器,并重启服务。各服务器部署情况的示意图如下:



jenkins构建项目后,通过SSH协议发送到应用服务器,并执行应用服务器的脚本启动服务。文件和脚本的存放路径由图所示。

3.6.2 准备

既然使用SSH协议,那么我们就必须生成rsa公钥和秘钥,然后把公钥写入应用服务器的授权文件中。之后,jenkins服务器就可以不输入密码和应用服务器进行通信了。本文将采用无密码 的公钥/私钥对进行RSA加密。

配置公钥秘钥

(1)、在jenkins服务器通过命令生成无密码的公钥/私钥

ssh-keygen -t rsa -P ''

此时出现 Enter file in which to save the key (/root/.ssh/id_rsa) 直接回车。

(2)、查看公钥是否已经成功生成

cat ~/.ssh/id_rsa.pub

(3)、公钥拷贝的远端的服务器192.168.88.17

ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.88.17

(4)、到远端服务器查看是否已经存在授权的公钥。如果存在,将显示一堆字母

cat ~/.ssh/authorized_keys

(5)、尝试通过jenkins服务器连接远端服务器,验证是否可以通过无密码SSH操作远端服务器

ssh 192.168.88.17

如果连接成功会出现登录提示。记得退出ssh登录。这时,ssh的配置已经完成。

jenkins配置Publish Over SSH

在页面“系统管理”-->"系统设置"中找到 Publish Over SSH 标签



Passphrase:密码(key的密码,如果你设置了)

Path to key:key文件(私钥)的路径

SSH Server Name:标识的名字

Hostname:需要连接ssh的主机名或ip地址,此处填写应用服务器IP(建议ip)

Username:用户名

Remote Directory:远程目录(根据需要填写文件传到此目录下)

配置完成后可点击“Test Configuration”测试到目标主机的连接,出现”success“则成功连接。如果有多台应用服务器,可以点击”增加“,配置多个“SSH Servers”。

3.6.3 开始部署

设置需要自动化部署的工程,找到“构建后操作”,点“增加构建后操作步骤”,选择“Send build artifacts over SSH”。

回顾下前面所定的需求,我们需要把工作控件中 dubbo-ci-web模块的war包发布到应用服务器中的/home/deploy/tmp/tomcat目录,然后执行/home/script/deploy_tomcat.sh脚本;另一个模块dubbo-ci-service 的dubbo-ci-service.jar和lib包下的所有文件,发布到应用服务器的/home/deploy/tmp/dubbo目录,然后执行/home/script/deploy_dubbo.sh脚本。





/home/script/deploy_tomcat.sh脚本,完成停止tomcat服务,删除原有的war,拷贝war文件到tomcat的webapp目录,然后启动tomcat服务。

/home/script/deploy_dubbo.sh脚本,停止dubbo服务,删除原有的jar和lib,拷贝jar和lib到指定的目录。执行脚本启动dubbo服务。

遇到的问题

1、部署jenkins的tomcat内存溢出
jenkins经常在运行过程中没有反应,查看tomcat日志后发现,频繁出现永久代内存溢出的错误

java.lang.OutOfMemoryError: PermGen space
...
Exception in thread "http-bio-8080-exec-38" java.lang.OutOfMemoryError: PermGen space
OpenJDK 64-Bit Server VM warning: Exception java.lang.OutOfMemoryError occurred dispatching signal SIGTERM to handler- the VM may need to be forcibly terminated

出现此问题的原因是tomcat默认配置的堆和非堆内存都太小了,需要调整如下JVM内存配置参数。

编辑tomcat的catalina.sh文件,增加tomcat的永久代内存

vim /usr/local/tomcat/tomcat-ci/bin/catalina.sh

在#!/bin/sh下面添加。

#jvm
JAVA_OPTS='-Xms512m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=256M'


Xms:初始堆内存大小

Xmx:最大堆内存大,一般设置-Xms与-Xmx一样大小,根据应用类型和物理内存大小来决定二者的大小

XX:PermSize:永久代内存的初始大小

XX:MaxPermSize 永久代内存的最大值

相关资料

配套代码:http://git.oschina.net/thinwonton/dubbo-ci
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐