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

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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

        
            nexus
            
                false
                1.6
            
            
                
                
                    nexus
                    http://192.168.88.16:8081/nexus/content/groups/public/
                    
                        true
                    
                    
                        false
                    
                
                  
            
                
                
                    nexus
                    http://192.168.88.16:8081/nexus/content/groups/public/
                    
                        true
                    
                    
                        false
                   
                
            
        

    

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

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

	
	
		
			nexus-releases
			Nexus Release Repository
			http://192.168.88.16:8081/nexus/content/repositories/releases/
		
		
			nexus-snapshots
			Nexus Snapshot Repository
			http://192.168.88.16:8081/nexus/content/repositories/snapshots/
		
	

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编码。

   

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

#JENKINS
export JENKINS_HOME=/data/jenkins

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

持续集成-maven git jenkins与自动化部署_第1张图片

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

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

** 修改管理员密码 **

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

3.2 配置安全策略

打开设置里面的Configure Global Security。

持续集成-maven git jenkins与自动化部署_第2张图片

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

持续集成-maven git jenkins与自动化部署_第3张图片

3.3 安装插件

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

1、安装安装Publish Over SSH插件
该插件支持通过SSH协议发布项目和执行远程shell脚本

2、安装Git Plugin 插件(前面推荐插件那里有可能已经安装了)
Git Plugin 插件支持拉取远端的代码。

3、Maven Integration plugin插件

3.4 系统和环境设置

(1)、全局系统设置
点击 系统管理--->系统设置。设置job并行执行数量、 持续集成-maven git jenkins与自动化部署_第4张图片

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

输入图片说明

持续集成-maven git jenkins与自动化部署_第5张图片

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

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

持续集成-maven git jenkins与自动化部署_第6张图片

持续集成-maven git jenkins与自动化部署_第7张图片

3.5 构建项目

3.5.1 新建job

在首页点击新建job
持续集成-maven git jenkins与自动化部署_第8张图片

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

3.5.2 general设置

  • 输入项目名和描述,这些可以在首页显示。
  • 勾选“丢弃旧的构建”,这项功能主要是为了节省服务器空间,这里设置为“保持2天”,超过的Jenkins会自动删除旧的构建。
    持续集成-maven git jenkins与自动化部署_第9张图片

3.5.3 源码管理

Jenkins支持常用的代码版本管理软件。通过此项设置,Jenkins会自动从代码版本管理的服务器下载源码,并自动构建。以下以git为例进行说明,源码托管在git.oschina.net。 持续集成-maven git jenkins与自动化部署_第10张图片

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):使用加密文件或者文本

持续集成-maven git jenkins与自动化部署_第11张图片

3.5.6 构建

配置pom的文件所在路径,以及需要运行mvn命令 持续集成-maven git jenkins与自动化部署_第12张图片

3.5.7 构建设置

指定构建失败后发送的邮箱。 持续集成-maven git jenkins与自动化部署_第13张图片

3.5.8 开始构建

构建可以等待触发器触发,也可以手动触发构建。在具体job的面板上有“立即构建按钮”,点击后触发构建,然后可以在下面的运行的任务中点击查看具体的任务。任务详情里面通过看控制台输出可以看到整个构建过程。 持续集成-maven git jenkins与自动化部署_第14张图片

构建完后,点击左边的“工作空间”可以看到构建后的文件。其实这些文件存放在前面设置的JENKINS_HOME环境变量所指向的路径。
持续集成-maven git jenkins与自动化部署_第15张图片

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

3.6.1 需求

现希望jenkins构建完项目后,可以把文件部署在远程的应用服务器,并重启服务。各服务器部署情况的示意图如下:
持续集成-maven git jenkins与自动化部署_第16张图片

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 标签

持续集成-maven git jenkins与自动化部署_第17张图片

  • 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脚本。

持续集成-maven git jenkins与自动化部署_第18张图片持续集成-maven git jenkins与自动化部署_第19张图片

/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

转载于:https://my.oschina.net/thinwonton/blog/880303

你可能感兴趣的:(持续集成-maven git jenkins与自动化部署)