Jenkins安装及部署脚本配置教程

环境版本:

jenkins:jenkins-2.60.3-1.1.noarch

JDK:jdk1.7

maven:3.3.9

 

什么是jenkins:

解决开发中的人为编译操作会影响项目个模块。

 

安装JDK、Maven、Tomcat环境:

参考链接:https://blog.csdn.net/qq_28666081/article/details/81629764

 

安装jenkins:

下载jenkins:

$ sudo wget http://pkg.jenkins-ci.org/redhat/jenkins-2.60-1.1.noarch.rpm

如果当前部署用户报 xxxis not in the sudoers file.  This incident will be reported.添加方法如下:

$ su -  //切换到超级用户

$ vim /etc/sudoers

"root ALL=(ALL) ALL"在起下面添加"xxx ALL=(ALL) ALL"(这里的xxx是你的用户名)

rpm安装jenkins:

sudo rpm -ih jenkins-2.60-1.1.noarch.rpm

安装完后会出现以下四种目录:

war包

配置文件

JENKINS_HOME目录

jenkins日志文件

/usr/lib/jenkins/jenkins.war

/etc/sysconfig/jenkins

/var/lib/jenkins

/var/log/jenkins/jenkins.log

启动jenkins:

sudo service jenkins start

启动成功后,打开网页,输入localhost:8080  后按着步骤安装即可安装成功。

 

安装jenkins插件:

经过上面步骤我们部署成功了,接下来打开localhost:8080,然后安装如下插件:

1 安装maven插件:

在插件管理->可选安装  中选择Maven Integration 并安装

2 安装Console Coulumn Plugin插件

在插件管理->可选安装  中选择 并安装Console Coulumn Plugin,安装完后会出现如下按钮:

3 ssh远程执行shell脚本插件:

系统管理 -> 管理插件 -> 可用插件,搜索:SSH Plugin,然后安装

 

项目创建配置讲解:

1 前提说明:

下面凡是以下格式:

  • xxxx - xxx

表示项目配置的对应选项,如果填勾选/取消勾选 代表的是这个配置项是否勾选,其他内容知识表示这个输入框就填写这样的的内容,如:

  • Goals and options - -Dmaven.test.skip=true clean deploy

真实的形式为:

 

2 简单的把项目分为common、facade、service、timer、trigger、web,其中common、facade作为依赖可用maven直接添加到其他项目中,比如在pom.xml中添加如下:

<dependency>

    <groupId>com.gw.facade</groupId>

    <artifactId>gw-facade-xxx</artifactId>

    <version>${gw-facade-xxx.version}</version>

</dependency>

首先新建一个项目,选择建构一个Maven项目:

进入选择配置如下:

General:

  • 丢弃旧的构建 - 勾选

  • 保持构建的最大个数 - 3

源码管理:

  • Subversion - 勾选        ---其配置如下:

如果Credentials为空,需先点击Add添加一个如下(这里的username、password就对应你的svn张账号密码):

  • Quiet check-out - 取消勾选     //这个取消勾选的作用是为了svn代码改变的地方在Console Coulumn Plugin插件能显示出来

Build:

  • Root POM - pom.xml

  • Goals and options - -Dmaven.test.skip=true clean deploy

 

3 service、timer、web则作为项目启动,其中service、timer以jar形式打包,取一个service作为例子讲解:

service的构建与facade基本一致,区别有以下几点:

Build:

  • Goals and options - -Dmaven.test.skip=true -Dlog4j.leve=INFO clean package

Post Steps(本地和远程指令执行的地方):

点击 Add post-build step按钮,然后按顺序创建Execute shell、Execute shell script onremote host using ssh(执行顺序跟创建顺序有关,所以必须按顺序)如下:

然后往这两个填充内容如下:

注:Execute  shell是服务器执行本地脚本,第二个是ssh执行远程服务器脚本。

第一个脚本在本地(即jenkins服务器,假设是192.168.0.100)内容如下:

#!/bin/bash

 

export BUILD_ID=$JOB_NAME

 

/home/normal/scripts/service.sh $JOB_NAME $JENKINS_HOME

其中在192.168.0.100对应存在一个/home/normal/scripts/service.sh 脚本内容如下:

if [ $# -eq 2 ]; then

    # 项目名称

    project_name=$1

    # 工作目录

    jenkins_home=$2

    # 提示信息

    echo '[INFO] ------------------------------------------------------------------------'

    echo '[INFO] 正在部署应用,请稍后 . . .'

    echo '[INFO] ------------------------------------------------------------------------'

    # 拷贝文件到应用服务器的目录

    scp $jenkins_home/workspace/$project_name/target/${project_name}.jar normal@10.10.10.129:/home/normal/services/${project_name}/source

else

    echo '[ERROR] ------------------------------------------------------------------------'

    echo '[ERROR] 参数不正确!语法:service.sh arg1(注:项目名称) arg2(注:工作目录)'

    echo '[ERROR] ------------------------------------------------------------------------'

fi

第二个脚本是ssh连接远程服务器,首先到Credentials –> global –> Add Credentials去添加一个全局凭证,参考链接为:https://fanlychie.github.io/post/jenkins-remote-ssh.html

因为192.168.0.100需要拷贝文件到192.168.0.101上,所以需要设置免密登陆如下:

1. 192.168.0.100中停掉jenkins:service jenkins stop

2. 192.168.0.100中: vim /etc/sysconfig/jenkins    //修改JENKINS_USER="jenkins" 为 JENKINS_USER="root"

3. 192.168.0.100中:su normal && cd  //切换回部署用户账号,并cd回用户目录      

4. 192.168.0.100中:ssh-keygen -t rsa   //一直回车,生成的密钥会存在当前用户目录 .ssh中

5. 192.168.0.100中:cd .sssh

6. 192.168.0.100中:scp id_rsa.pub normal@192.168.0.101:/home/fanlychie/.ssh/authorized_keys

以上免密登录就设置成功了。

然后在192.168.0.101中编写startup.sh(这个文件是将编译好的service发布到远程服务器,并且运行起来--所以对应远程服务器也需要java环境配置),如下:

$ vim /home/normal/scripts/services/startup.sh  //内容如下:

if [ $# -eq 1 ]; then

    # 项目名称

    project_name=$1

    # 环境变量

    JAVA_HOME=/usr/java/jdk1.7.0

    CLASSPATH=.:$JAVA_HOME/lib

    PATH=$PATH:$JAVA_HOME/bin

    export JAVA_HOME CLASSPATH PATH

    # 应用路径

    application_path=/home/normal/services/${project_name}

    # 应用的进程ID

    application_pid=`ps -ef | grep java | grep ${project_name} | grep -v grep | awk '{print $2}'`

    # 如果应用的进程存在, 杀死该进程

    if [ -n "$application_pid" ]; then

        kill -9 $application_pid

    fi

    # 替换为最新的应用包

    mv -f ${application_path}/source/${project_name}.jar ${application_path}

    # 启动应用服务

    nohup java -jar -Xms256m -Xmx512m -XX:PermSize=32m -XX:MaxPermSize=128m -Ddubbo.shutdown.hook=true -Ddubbo.registry.file=${application_path}/dubbo.registry.properties ${application_path}/${project_name}.jar >/dev/null 2>&1 &

else

    echo '[ERROR] ------------------------------------------------------------------------'

    echo '[ERROR] 参数不正确!语法:startup.sh arg1(注:项目名称)'

    echo '[ERROR] ------------------------------------------------------------------------'

fi

 

总结:

其他的timer和web也是差不多,都是先在jenkins的服务器对其编译打包好,再执行本地脚本scp远程拷贝到部署服务器,然后通过ssh远程执行部署服务器的脚本来跑程序。当然timer比较特殊,只需执行本地编译打包,并远程拷贝到部署服务器,如何运行是通过Trigger来定时跑timer这个定时任务的,大致的trigger例子配置如下:

注:每天凌晨12点10分运行该配置的项目一次

然后再Build中添加如下就会每天定时执行这个脚本,然后这个脚本就回去跑,对应的脚本如下:

if [ $# -eq 2 ]; then

    # 项目名称

    project_name=$1

    # 工作目录

    jenkins_home=$2

    # 提示信息

    echo '[INFO] ------------------------------------------------------------------------'

    echo '[INFO] 正在部署应用,请稍后 . . .'

    echo '[INFO] ------------------------------------------------------------------------'

    # 拷贝文件到应用服务器的目录

    scp $jenkins_home/workspace/$project_name/target/${project_name}.jar normal@10.10.10.129:/home/normal/timers/${project_name}

    #scp -r $jenkins_home/workspace/$project_name/target/lib normal@10.10.10.129:/home/normal/timers/${project_name}

else

    echo '[ERROR] ------------------------------------------------------------------------'

    echo '[ERROR] 参数不正确!语法:timer.sh arg1(注:项目名称) arg2(注:工作目录)'

    echo '[ERROR] ------------------------------------------------------------------------'

fi

 

 

参考资料:

jenkins安装源:https://pkg.jenkins.io/redhat/

jenkins安装方法:https://www.cnblogs.com/qixing/p/5896512.html

jdk安装(默认选择方法三,并且jdk版本要求1.7):https://blog.csdn.net/qq_32786873/article/details/78749384

maven环境变量:https://www.cnblogs.com/debiao/p/6230053.html

安装maven(教程:https://www.cnblogs.com/bincoding/p/6156236.html)

配置MAVEN_HOME(教程:https://www.cnblogs.com/ycyzharry/p/6653905.html)

找不到jdk安装目录解决;https://blog.csdn.net/hooloo/article/details/55667666

jenkins卸载教程:https://blog.csdn.net/chunlongyuan/article/details/79243143

jenkins创建用户及设置:https://blog.csdn.net/liyasong666888/article/details/50353812

maven 40x错误解决:http://www.cnblogs.com/fengpingfan/p/5197608.html

javac全局配置:https://blog.csdn.net/ningxiaopeng08/article/details/52251352

 

 

 

 

 

 

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页