构建java环境的自动化构建和部署系列三

 所有系列文章:

  <<构建java环境的自动化构建和部署系列一>>

  <<构建java环境的自动化构建和部署系列二>>

 <<构建java环境的自动化构建和部署系列三>>

 <<构建java环境的自动化构建和部署系列四>>

前面已经讲述了SVN、mavean 、nexus的安装;本章将继续介绍jenkins安装与使用

一、环境 2

二、准备工作 2

三、Jenkins环境部署: 2

四、Jenkins系统配置 3

五、构建邮件配置 3

六. 配置SSH服务器 7

七、 Jenkins Job 9

为了方便运维人员的部署,采用Jenkins实现多机远程自动化部署方案;

自动化部署原理图示:

image.png

 Jenkins 是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变得可能。现在软件开发追求的是效率以及质量,Jenkins使得自动化成为可能!

亮点

  采用shell自定义脚本,控制集成部署环境更加方便灵活

  精简war包中的lib包,常驻tomcat里,减少war包传输时间

  细粒度的用户权限管理,

  构建失败发邮件通知相关人员解决

  自动按天备份war包,Jenkins配置备份以及版本控制化

  可扩展性的插件管理

一、环境

  Linux(centos 7)、JDK8

二、准备工作

  SVN 版本控制服务器

  Tomcat发布服务器

  Jenkins服务器(提前安装好Maven,SVN,Jdk)

  Nexus 服务器

实验时可以在同一台机器配置,但是生产不建议,一台机器挂了,所有服务器都挂了。

机器

IP

Jenkins

192.168.0.144

SVN

192.168.1.110

Tomcat

192.168.0.146

Nexus

http://192.168.0.110:6161/nexus/

三、Jenkins环境部署:

1、wget https://pkg.jenkins.io/redhat-stable/jenkins-2.32.2-1.1.noarch.rpm

       rpm -ivh jenkins-2.32.2-1.1.noarch.rpm

安装完成之后: 

    /usr/lib/jenkins/jenkins.war    WAR包 

    /etc/sysconfig/jenkins       配置文件 

    /var/lib/jenkins/        默认的JENKINS_HOME目录 

    /var/log/jenkins/jenkins.log    Jenkins日志文件 

Jenkins 命令:

   service jenkins start –启动

   service jenkins restart –重启

   service jenkins stop –停止

2、配置Jenkins 的目录空间及端口

    vi /etc/sysconfig/jenkins

    JENKINS_HOME="/data/jenkins"

    JENKINS_PORT="6161"

3、访问链接: http://192.168.0.144:6161/

    第一次访问会初始化安装;

    在配置的时候需要注意用户权限问题:

    https://www.cnblogs.com/melody-emma/p/6026622.html


4、Jenkins 插件安装:

    Jenkins以其拥有大量的插件而著称,接下来需要安装常用的插件,本文需要确保已经安装了如下插件:

    Email Extension Plugin (邮件通知)

   Deploy to container Plugin (部署到Java容器中的插件)

   Publish Over SSH (远程Shell)

   Maven Integration plugin (Maven集成,否则新建的时候没有Maven Project)

   Monitoring (监控Jenkins所消耗的系统资源,如内存使用等)

    Docker Commons (运行docker 命令)

    MultiJob plugin(多项目构建的插件)


四、Jenkins系统配置

  1、配置JDK、Git、Maven、Ant:系统管理–Global Tool Configuration

image.png

 image.png

五、构建邮件配置

     1. 配置邮件服务器及邮件模板

     首先保证已经成功安装了Email Extension Plugin插件,然后依次点击左边的“Manage Jenkins” – “Configure System”,首先在Jenkins Location项目下面设置系统管理员的邮件地  址,这里填写的邮箱地址必须跟下面设置的发件人邮箱一致,否则不能成功发送邮件。

image.png

接下来在 Extended E-mail Notification 项下面设置SMTP服务器和邮件模板,这里推荐使用QQ邮箱:

image.png

image.png

Default Recipients填写默认的接收人邮箱地址,多个用英文逗号(,)进行分割,邮件模板可以使用下面参考资料里面提供的模板。

Default Content Type内容:

image.png

构建通知:$PROJECT_NAME – Build # $BUILD_NUMBER – $BUILD_STATUS!

Default Subject内容:

资料参考:

   http://blog.csdn.net/fullbug/article/details/53024562

   http://blog.csdn.net/songjiaping/article/details/51496977


. 配置SSH服务器

首先保证已经安装了Publish Over SSH插件,然后依次点击左边的“Manage Jenkins” – “Configure System”,在Publish over SSH项下面设置登录到远程服务器的配置信息,可以使用用户名/密码的方式,也可以使用证书的方式,这里建议使用后者。

 

1、首先配置免SSH免密码登录:

  确认用户

  确认当前用户是你需要的用户!

 $ whoami

  root   #root用户,根据你自己的需求选择用户。我这儿用root用户演示。不建议使用root

 生成key

 $ cd ~ #回到用户目录,不回去也没有关系

 $ ssh-keygen    

  #可以使用-t选项选择加密方式,包括 RSA 和 DSA 两种密钥

  #例如:$ssh-keygen -t dsa 或者ssh-keygen -t rsa

  #加密方式不同,key的名称不同,其他没有区别

  #如果没有指定密钥,默认RSA

 Generating public/private rsa key pair.

 Enter file in which to save the key (/home/froad/.ssh/id_rsa): #私钥存放的位置,默认会存放在用户目录的.ssh文件夹,直接回车

 Enter passphrase (empty for no passphrase): #默认,回车

 Enter same passphrase again: #默认,回车

 Your identification has been saved in /home/froad/.ssh/id_rsa.#私钥路径

 Your public key has been saved in /home/froad/.ssh/id_rsa.pub.#公钥路径

 The key fingerprint is:

  e8:b6:e6:xxxxxxxxxxxxxxxxx:ec:b5:d8 root@192.168.0.144;

 将本地公钥上传到远程主机:

 scp ~/.ssh/id_rsa.pub tomcatuser1@192.168.0.146:.ssh/id_rsa.pub 在远程主机(tomcat所在主机,如192.168.0.146):1,生成密钥文件:   touch /home/tomcatuser1/.ssh/authorized_keys

6.再转到第二台机器的.ssh目录下,会发现刚刚传输过来的文件-authorized_keys,然后执行命令,将第二台计算机的公钥也加进来,如:cat id-     rsa.pub >> authorized_keys.

2,修改权限:  chmod 600 ~/.ssh/authorized_keys

3,将控制主机上传的公钥复制:  cat /home/tomcatuser1/.ssh/id_rsa.pub  >> /home/tomcatuser1/.ssh/authorized_keys   将authorized_keys文件拷贝到需要被管理的电脑上。注意:放在用户目录下.ssh文件夹中。Linux用户会限制你的访问权限

4.验证

  ssh tomcatuser1@192.168.0.146

5、其他

   如果添加指纹的时候提示添加失败,是因为你以前添加过了这个ip的指纹。

   解决办法:将.ssh目录的known_hosts文件删除掉(好粗暴啊( ⊙ o ⊙ )啊!),也可以打开这个文件把对于ip的那条记录删除(这个就精细多了O(∩_∩)O哈哈~)

   如果操作步骤都正确,但是依然要求输入密码。一般是因为权限的问题。命令如下

   chmod 755 ~/.ssh/

   chmod 600 ~/.ssh/id_rsa  ~/.ssh/id_rsa.pub

   chmod 644 ~/.ssh/authorized_keys

二、 接下来就可以在Publish over SSH项设置Passphrase和Key,分别是私钥的密码和id_rsa文件的内容,点击下面的Add按钮增加SSH Servers,如果不使用上面公共的密钥设置或者使用用户名密码可以将 Use password authenticatio, or use a different key 选项勾选。

image.png

      设置完成之后可以点击下面的Test Configuration按钮,如果无误的话会出现Success的提示。

      PS:如果对远程服务器进行了安全设置,需要将 /etc/ssh/sshd_config 文件中的 PermitRootLogin 项目设置为 without-password,这样root账号不能用密码直接远程登录,但可以使用密钥对进行登录。

      构建完上述的配置后,就可以构建JOB服务了,提前说明一下,Publish over SSH是基于插件的形式进行远程登录,您可以不用这种方式,可以就简单的采用SHELL方式进行免登陆。

3. 构建完成之后使用SSH发布到演示服务器上

  在项目的配置项中的Post Steps项中选中 Send files or execute commands over SSH:

   image.png

接下来就可以设置执行的任务内容了:

   image.png

七、Jenkins Job

   方式一:基于SSH插件

直接点击Jenkins首页的新建按钮,创建一个Maven项目,配置根据大家需要,实际配置,供参考:

   image.png

接下来就可以设置执行的任务内容了:

  image.png

八、自动化部署docker的脚本

#!/bin/bash
#Time
app_name="viemall-web"
deploy_war="$app_name.war"
deploy_path="/opt/program/servers/$app_name"
deploy_path_war="$deploy_path/$deploy_war"
if [ ! -f $deploy_path_war ]; then
    echo "!WARN: No build jar file found in $deploy_path_war."
    echo "!WARN: Deployment is skipped."
    exit 0
fi
#备份log日志
echo "*************备份log日志****************"
if [ ! -d "$deploy_path/logs" ];then
mkdir -p $deploy_path/logs
else
   mv $deploy_path/logs $deploy_path/logs-$(date '+%m-%d')
   rm -rf $deploy_path/logs/*
fi
echo "************* 启动docker镜像 ****************"
docker rm -f $app_name || true
docker run -d -p 8080:8080 --restart=always -e TZ=Asia/Shanghai  -v $deploy_path_war:/usr/local/tomcat/webapps/ROOT.war -v $deploy_path/logs:/usr/local/tomcat/logs --name $app_name harbor.dczou.com/benniu/tomcat8-session-redis-test:v1
echo "************* 启动docker镜像成功 ****************"