持续集成-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相关文章推荐
- Jenkins学习总结(3)——Jenkins+Maven+Git搭建持续集成和自动化部署的
- Jenkins+Maven+Git搭建持续集成和自动化部署
- Jenkins学习总结(3)——Jenkins+Maven+Git搭建持续集成和自动化部署的
- Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记
- Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记
- Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记
- Jenkins+Maven+Git搭建持续集成和自动化部署的配置
- Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记 - passover【毕成功的博客】 - 51CTO技术博客
- Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记
- Hudson + SVN + Maven 持续集成实现自动化编译、打包、部署(over SSH 和 Deploy war/ear to a container 两种部署方式)
- Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记(1)
- gitlab+jenkins+maven持续集成自动化部署平台
- Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记
- Java开发流程自动化(svn+maven+nexus+jenkins) --自动编译,持续集成,测试,打包,发布/部署
- Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记
- Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记
- Jenkins_Maven_Git 持续集成及自动化部署 GentOS版
- Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记
- Java开发流程自动化(svn+maven+nexus+jenkins) --自动编译,持续集成,测试,打包,发布/部署
- Jenkins持续集成案例之-自动化部署 推荐