Jenkins+Gitlab可持续部署

Jenkins是基于Java开发的一种持续集成工具,集成了一些测试和部署技术。常用于用于持续重复的测试、部署工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能, 大大简化了频繁的开发和部署工作,使自动部署成为可能。

由于之前已经介绍过gitlab,这里gitlab安装部署不再介绍,可参看https://blog.csdn.net/lzxlfly/article/category/7826362

角色模式如下图:

主机名 角色
node01 Jenkins所在服务器
node02 Gitlab所在服务器
node03 服务部署的服务器

一、配置基础工具

在Jenkins所在服务器(node01)配置maven和git,后边要用到。

1、配置maven

去http://mirror.bit.edu.cn/apache/maven/maven-3/下载apache-maven-3.5.4-bin.tar.gz

解压 $ tar zxvf apache-maven-3.5.4-bin.tar.gz

移动 $ mv apache-maven-3.5.4 /usr/local/maven

编辑$ vim /etc/profile环境变量

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

 生效$ source /etc/profile

2、配置git

yum安装git $ yum install -y git, yum安装的git版本较低,不过不影响使用。若想安装高版本可以参看之前的文章https://blog.csdn.net/lzxlfly/article/details/81160113或自行查找。

二、安装Jenkins

Jenkins由java语言开发,有rpm和war两种安装方式,war包安装不受平台限制,故选择war方式安装。

1、下载Jenkins

去https://jenkins.io/download/下载jenkins.war

2、启动Jenkins

  • 启动 $ nohup java -jar jenkins.war & ,默认8080端口

  • 指定端口启动 $ nohup java -jar jenkins.war & --httpPort=9090

3、安装插件

访问http://192.168.17.10:9090,首次访问须输入管理员密码

Jenkins+Gitlab可持续部署_第1张图片

也可以去启动控制台复制密码

Jenkins+Gitlab可持续部署_第2张图片

选择自定义安装,勾选Publish over SSH和Email Extension Template插件

Jenkins+Gitlab可持续部署_第3张图片

Jenkins+Gitlab可持续部署_第4张图片

勾选完成后点击右下方的“Install”进行插件安装,等待安装完成即可

Jenkins+Gitlab可持续部署_第5张图片

三、全局工具配置

依次点击“系统管理 》全局工具配置”进入全局工具配置页面。

1、配置maven的settings.xml和jdk路径

Jenkins+Gitlab可持续部署_第6张图片

2、 配置git和maven路径

Jenkins+Gitlab可持续部署_第7张图片

3、点击“Save”保存即可

Jenkins+Gitlab可持续部署_第8张图片

 

四、全局系统配置

依次点击“系统管理 》系统设置”进入全局系统设置页面。

1、在Jenkins机器与部署机器ssh免登录

在node01执行 $ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa,一路回车便可在/root/.ssh/生成公私钥,私钥:id_rsa 公钥:id_rsa.pub。把公钥id_rsa.pub写入到部署服务器(node03)的/root/.ssh/authorized_keys 路径下,可以手动粘贴过去,也可以命令复制$ ssh-copy-id node03便可直接写入node03的/root/.ssh/authorized_keys中

执行 $ ssh node03测试免登录,不用输入密码就可以登录到node02,表明免登录成功

2、找到Publish over SSH 进行配置

Jenkins+Gitlab可持续部署_第9张图片

Jenkins+Gitlab可持续部署_第10张图片

Publish over SSH 配置是用于Jenkins(node01)从Gitlab(node02)上拉代码打包后发送到项目所在服务器(node03)的指定路径下。这里我配置了但是没有用这样用,我是用Jenkins编译打包后,通过脚本复制到项目所在服务器(node03)的指定路径下

五、Jenkins配置发送邮件

依次点击“系统管理 》系统设置”进入全局系统设置页面,找到Jenkins Location,开始配置

1、 配置管理员邮箱

Jenkins+Gitlab可持续部署_第11张图片

2、配置Extended E-mail Notification

Jenkins+Gitlab可持续部署_第12张图片  

 Jenkins+Gitlab可持续部署_第13张图片

Jenkins+Gitlab可持续部署_第14张图片

3、配置Jenkins自带的E-mail Notification

Jenkins+Gitlab可持续部署_第15张图片

4、在构建的job中配置发送邮件

Jenkins+Gitlab可持续部署_第16张图片

Jenkins+Gitlab可持续部署_第17张图片

这里需要注意的是Recipient List 是空的,没有值,需要写上默认值,不写在执行job构建时候会报错

An attempt to send an e-mail to empty list of recipients, ignored.不能发送邮件

Jenkins+Gitlab可持续部署_第18张图片

 六、构建job

1、点击“新建任务”,去构建页面

Jenkins+Gitlab可持续部署_第19张图片

2、选中第一项,并在框中填写job名 

Jenkins+Gitlab可持续部署_第20张图片

3、点击下方“OK”,来到构建页,配置General

Jenkins+Gitlab可持续部署_第21张图片

勾选参数化构建,用于动态传参

Jenkins+Gitlab可持续部署_第22张图片

4、源代码管理配置Source Code Management

Jenkins+Gitlab可持续部署_第23张图片

填写gitlab的用户和密码,用于拉取代码

Jenkins+Gitlab可持续部署_第24张图片

5、触发构建Build Triggers

配置后可以通过url访问触发构建,但我更习惯于手动触发构建

 Jenkins+Gitlab可持续部署_第25张图片

6、构建Build

Jenkins+Gitlab可持续部署_第26张图片

执行部署项目的脚本,后边可以传入一个参数,需要部署多个服务时候,多个服务用逗号分隔如

$ sh exxcute.sh  user-service,order-service,pay-service;把传入的多个服务用分隔为数组,遍历部署即可

# !/bin/sh
#杀死重新,启动
function startService () {
        host=$1
        serviceName=$2
        installPath=$3
        deployPath=$4
        pid=$5

        if [ "$pid" == "" ]
        then
                echo "----$serviceName 处于关闭----"
        else
                echo "$serviceName 进程号 :$pid"
                ssh root@$host "kill -9 $pid"
                echo "$serviceName $pid is killed"
                sleep 2
        fi

        echo "copying $serviceName to $host:$deployPath"
        scp $installPath$serviceName  root@$host:$deployPath #远程复制到部署机器的指定目录下
        ssh root@$host "cd $deployPath;nohup java -jar -Duser.timezone=GMT+08 $serviceName >/dev/null 2>&1 &"
        echo "$serviceName is starting......,please Wait a moment!"
}
str=$1 #$1接收输入的第一个参数
#//与/之间与分割的字符 ,另外/后有一个空格不可省略
arr=${str//,/ };
#遍历数组
for s in ${arr[*]}
do
  echo "=====$serviceName====="
  if [ $s == "uws-data" ]
  then
        host="node03" #部署的主机名或ip
        serviceName="$s-1.0.0.jar" #服务名
        installPath="/root/.jenkins/workspace/uws-data/uws-bussiness/target/" #项目包路径
        deployPath="/opt/project/" #部署路径
        pid=`ssh root@$host "ps -ef | grep $serviceName | grep -v "grep" | awk '{print $2}'"| awk '{print $2}'` #服务正在运行的进程号
        #调用上方函数部署
        startService $host $serviceName $installPath $deployPath $pid
  fi
done

七、进行构建 

回到首页,进行构建 操作

 Jenkins+Gitlab可持续部署_第27张图片

 输入要拉取的分支名,部署的服务,“Build”一键部署便可完成

Jenkins+Gitlab可持续部署_第28张图片

 查看控制台输出Console Output

Jenkins+Gitlab可持续部署_第29张图片

参考:https://www.cnblogs.com/zz0412/p/jenkins_jj_01.html

参考:https://jenkins.io/zh/doc/

参考:https://wiki.jenkins.io/display/JENKINS/Publish+Over+SSH+Plugin

你可能感兴趣的:(Jenkins)