热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Jenkins+Gitlab+Maven+Tomcat持续集成,自动部署项目

持续集成:ContinuousIntegration,简称CI,意思是,在一个项目中,任何人对代码库的任何改动,都会触发CI服务器自动对项目进行构建,自动运行测试,甚至自动部署到测

持续集成:Continuous Integration,简称CI,意思是,在一个项目中,任何人对代码库的任何改动,都会触发CI服务器自动对项目进行构建,自动运行测试,甚至自动部署到测试环境。这样做的好处就是,随时发现问题,随时修复。因为修复问题的成本随着时间的推移而增长,越早发现,修复成本越低。当你想要更新你的项目,只要动手提交代码到你的代码仓库,剩余的更新部署操作就只管交由CI服务器来完成就好,这次使用的CI工具是JenKins。

《Jenkins+Gitlab+Maven+Tomcat 持续集成,自动部署项目》 Jenkins.jpg

  • 搭建Jenkins持续集成服务器可以分为两大步骤,一是在服务器安装好所需的软件,二是配置我们的持续集成项目

《Jenkins+Gitlab+Maven+Tomcat 持续集成,自动部署项目》 Jenkins拉取代码编译部署示意图.png

  • 安装所需的各种软件

    • 安装启动 Jenkins

      • 从Jenkins官方网站下载最新的rpm包

      执行命令 rpm -ivh xxx.rpm 安装Jenkins
      //启动JenKins
      /etc/init.d/jenkins start
      浏览器输入 http://xxx服务器地址:8080/
      //默认端口号是8080

    《Jenkins+Gitlab+Maven+Tomcat 持续集成,自动部署项目》 Jenkins启动1.png 《Jenkins+Gitlab+Maven+Tomcat 持续集成,自动部署项目》 JenKins启动.png

    • JenKins默认端口号是8080,这与Tomcat默认端口号冲突,所有我们可以把Jenkins的端口号改成我们自己定义的端口号 9090

      • 修改端口号的文件为 /etc/sysconfig/jenkins,字段为JENKINS_PORT

        执行命令进行修改,如果碰到无法启动Jnekins, 无法启动(如遇此Starting Jenkins bash: /usr/bin/java: No such file or directory错误 )修改 /etc/init.d/jenkins 加入 /opt/jdk1.8.0_181/bin/java原因
        是Java的环境变量没有找到,一般使用centos服务默认安装openjdk,如果自己卸载openJdk并重新安装sun的JDK,则也需要在该文件中加入路径,如图所示
        vim /etc/sysconfig/jenkins
        //添加Java地址
        vim /etc/init.d/jenkins

      《Jenkins+Gitlab+Maven+Tomcat 持续集成,自动部署项目》 修改Jenkins端口.png 《Jenkins+Gitlab+Maven+Tomcat 持续集成,自动部署项目》 添加Java地址.png

  • 修改端口无法启动的情况,有可能是服务器防火墙没有添加端口的监听,导致无法访问

    vim /etc/sysconfig/iptables
    查看是否监听端口(如果配置了自己定义的端口,需要先访问该端口一次才能看到监听)
    netstat -ntlp
    //重启防火墙配置(不重启端口还是无法生效)
    service iptables restart

《Jenkins+Gitlab+Maven+Tomcat 持续集成,自动部署项目》 添加新监听的端口.png

  • 只需要在访问jenkins服务器的网址url地址后加上exit。例如我jenkins的地址http://localhost:8080/,那么我只需要在浏览器地址栏上输入http://xxx:9090/exit 网址就能关闭jenkins服务.

  • 重启Jenkies

    //xxx:8080 是搭建Jenkins服务器地址
    http://xxx:8080/restart

  • 重新加载配置信息

```
http://localhost:8080/reload
```

  • 安装jdk

```
查看Java相关的包信息:
rpm -qa|grep java (或rpm -qa|grep jdk,rpm安装后,包名里没有Java)
卸载
yum -y remove java [包名]
例如
yum –y remove java java-1.8.0-openjdk-1.8.0.131-3.b12.el7_3.x86_64
jdk 卸载方法 https://blog.csdn.net/xyj0808xyj/article/details/52444694
//解压到指定目录
tar -zxvf jdk-8u181-linux-x64.tar.gz -C /opt/
//编辑配置文件
vim /etc/profile
export JAVA_HOME=/opt/jdk1.8.0_181
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
//更新配置文件
source /etc/profile
```

  • 安装Tomcat

    • 官网下载 Tomcat8.5

    • 直接解压到服务器(注意这里指的服务器是项目部署的服务器,应该是和部署JenKins的服务器不同)

    • 强制关闭 tomcat 命令

      //强制关闭
      ps -ef|grep tomcat
      //杀掉无法关闭进程
      kill -9 XXXX

  • 安装 git (安装在部署JenKins服务器上)

    安装依赖
    yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidoc
    yum install gcc perl-ExtUtils-MakeMaker
    如果已经安装了git,但是版本太老,可以先卸载
    yum remove git
    下载git包解压
    tar -vxf git-2.15.1.tar.gz -C /opt
    进入git 目录
    cd /opt/git-2.18.0/
    执行以下命令
    make prefix=/usr/local/git all
    make prefix=/usr/local/git install
    echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/profile //配置环境变量
    source /etc/profile //跟新配置文件
    git --version 查看git版本

《Jenkins+Gitlab+Maven+Tomcat 持续集成,自动部署项目》 安装git版本.png

- 安装 maven(安装在部署JenKins服务器上)
-
- 后台项目为spring-boot搭建,需要安装maven
- 下载 [maven 3.5.4](http://maven.apache.org/download.cgi)
```
执行以下命令
tar -zxvf apache-maven-3.3.9-bin.tar.gz -C /opt
在/etc/profile文件末尾增加以下配置
M2_HOME=/opt/tyrone/maven (注意这里是maven的安装路径)
export PATH=${M2_HOME}/bin:${PATH}
重载/etc/profile这个文件
source /etc/profile
```
[图片上传失败...(image-ae6fb0-1535116185320)]
- GitLab服务器配置
-
- 由于公司已经搭建好Gitlab服务器,所以我也没有配置过Gitlab,不过Gitlab配置网上已经有很多资料,可以自行百度。

  • Jenkins配置新建项目配置

    • Jenkins配置

      • 第一次进入Jnekins,首先根据提示找到安装服务器的密码

      • 如果服务器可以联网,则选择他推荐的插件直接安装,如果服务器无法连接外网,只是在公司内网环境,则可以离线下载插件再上传到我们服务器的Jenkin中,离线插件下载地址,这种方式需要耐心,因为需要安装的插件可不止一两个,如果你的服务器不能上网,我这有一份下载好的插件,可以自行去下载(下载地址)

      • 在Jenkins系统管理模块的系统配置中配置我们的Gitlab,需要登录到Gitlab中获取APIToken

        《Jenkins+Gitlab+Maven+Tomcat 持续集成,自动部署项目》 系统配置GitLab.png 《Jenkins+Gitlab+Maven+Tomcat 持续集成,自动部署项目》 获取API Token.png 《Jenkins+Gitlab+Maven+Tomcat 持续集成,自动部署项目》 GitLab API Token配置 .png

      • 生成ssh key(在部署Jenkins服务器上生成)

        • 配置SSH KEY ,用于后续项目可以通过Jenkins部署到应用服务器

          输入命令,一路回车
          ssh-keygen -t rsa
          现在你的私钥被放在了~/.ssh/id_rsa 这个文件里,而公钥被放在了 ~/.ssh/id_rsa.pub 这个文件里
          可以将私钥配置到JneKins的系统设置中,配置框选项是需要Jenkins安装SSH插件的,如下图所示
          公钥则配置到各个应用服务器的这个目录下/root/.ssh/authorized_keys,没有authorized_keys则创建这个文件,如下图所示
          最后测试应用服务器是否都能成功连接,如下图所示

        《Jenkins+Gitlab+Maven+Tomcat 持续集成,自动部署项目》 ssh私钥配置.png 《Jenkins+Gitlab+Maven+Tomcat 持续集成,自动部署项目》 公钥复制到应用服务器authorized_keys.png 《Jenkins+Gitlab+Maven+Tomcat 持续集成,自动部署项目》 测试配置公钥的应用服务器是否连接成功.png

        • 接下来还是系统管理模块中的全局工具配置 Jenkins的 JDK、git和maven。前面我们已经把这些工具都给安装了,现在配置到Jenkins中,如下图所示

          《Jenkins+Gitlab+Maven+Tomcat 持续集成,自动部署项目》 配置Jenkins jdk git.png 《Jenkins+Gitlab+Maven+Tomcat 持续集成,自动部署项目》 配置Jenkins maven.png

    • 新建项目配置

      • 新建一个maven项目(没有maven项目选项则需要下载对应插件)

      《Jenkins+Gitlab+Maven+Tomcat 持续集成,自动部署项目》 新建maven项目.png

      • 首先配置源码管理,如图

        《Jenkins+Gitlab+Maven+Tomcat 持续集成,自动部署项目》 新建项目源码管理配置.png

      • 配置项目构建触发器

        《Jenkins+Gitlab+Maven+Tomcat 持续集成,自动部署项目》 配置项目构建触发器.png

      • 配置maven项目编译

        《Jenkins+Gitlab+Maven+Tomcat 持续集成,自动部署项目》 配置maven项目编译.png

      • 项目构建成功后部署应用服务器的配置

      《Jenkins+Gitlab+Maven+Tomcat 持续集成,自动部署项目》 项目构建成功后部署应用服务器的配置.png

      • Tomcat重启脚本(应当放在与Tomcat目录同路径下)

        #! /bin/sh
        echo '####################开始自动部署####################'
        export JAVA_HOME=/usr/local/jdk1.8.0_181
        path=`pwd` #当前路径
        tomcatPath=/data/XXXX/tomcat_gxxmt_8080 #指定tomcat文件目录名称
        cd ../$tomcatPath/bin #进入tomcat的bin目录
        PID=$(ps -fu `whoami`|grep tomcat|grep -v grep|awk '{print $2}')
        if [ -z "$PID" ];then
        echo "no tomcat process"
        else
        ./shutdown.sh #停止tomcat服务
        fi
        cd ../webapps #进入tomcat的webapps目录
        rm -rf XXXX-api
        echo '####################删除完成####################'
        #rm -fr gxxmt-api.war #删除test文件目录
        #mv gxxmt-api.war gxxmt-api.war.$(date +%Y%m%d) #备份webapps下的test16 cp $path/test.war ./ #复制test.war到webapps路径下
        #cd /var/lib/jenkins/workspace/gxxmt-api/gxxmt-api/target/
        #cp gxxmt-api.war /data/gxxmt/tomcat_gxxmt_8080/webapps/
        cd ../bin
        ./startup.sh #启动tomcat服务
        echo '####################部署结束####################'

      • 项目构建成功并发布到了对应服务器执行对应脚本,这里就可以看到JenKins的灵活性,可以配置多台发布的应用服务器的多个Tomcat,灵活自动部署应用服务器配置

      • 项目构建编译部署成功

        《Jenkins+Gitlab+Maven+Tomcat 持续集成,自动部署项目》 项目构建编译部署成功.png

  • 集成部署遇到的问题

    • ERROR: Exception when publishing, exception message [Exec timed out or was interrupted after 120,000 ms](执行脚本没有正常退出,导致部署超时)

      《Jenkins+Gitlab+Maven+Tomcat 持续集成,自动部署项目》 错误1.png

```
nohup sh /data/gxxmt-api/restart.sh
//当我们使用nohup命令的的时候,日志会被打印到nohup.out文件中去。
//如果我们不做任何处理,会随着每次的重新启动,nohup.out会越来越大
//。所以我在我执行的脚本中添加了
cp /dev/null nohup.out
```

  • 在jenkins项目配置SSH Publishers勾选了Exec in pty,表示执行完脚本立即退出

    《Jenkins+Gitlab+Maven+Tomcat 持续集成,自动部署项目》 错误1解决勾选Exec in pty.png

  • jenkins主目录迁移,jenkins默认主目录一般都是安装在系统盘,运行一段时间后项目部署的历史版本,日志文件,工作控件都会占用大量的系统空间,这样就会引发系统盘磁盘空间不足,首先我们可以修改jenkins主目录

    //更改主目录
    vim /etc/sysconfig/jenkins
    JENKINS_HOME="/data/jenkins"
    复制 /var/lib/jenkins/ 目录到 /data目录下
    修改目录用户权限
    chown -R jenkins:jenkins /data/jenkins
    重启 /etc/sysconfig/jenkins restart

    《Jenkins+Gitlab+Maven+Tomcat 持续集成,自动部署项目》 主目录修改成功.png

  • 其次我们还可以在项目配置中设置丢弃历史构建

    《Jenkins+Gitlab+Maven+Tomcat 持续集成,自动部署项目》 设置丢弃历史构建.png

  • 错误信息:Url is blocked: Requests to the local network are not allowed,意思为Gitlab 设置Jenkins的webhook地址无法设置

    《Jenkins+Gitlab+Maven+Tomcat 持续集成,自动部署项目》 WebHook地址无法设置.png

  • 升级新版Gitlab,要允许WebHook,需要在在Gitlab的Admin账户中,在settings标签下面,找到OutBound Request,勾选上Allow requests to the local network from hooks and services ,保存更改即可解决问题(如下图所示)

    《Jenkins+Gitlab+Maven+Tomcat 持续集成,自动部署项目》 Gitlab 允许WebHook.png

  • Gradle 编译Android 项目 /lib64/libc.so.6: version `GLIBC_2.14’ not found,系统是CentOS 6.9,最高支持glibc的版本为2.12,而研发程序要2.14版本,所以需要升级。

《Jenkins+Gitlab+Maven+Tomcat 持续集成,自动部署项目》 glibc_2.14库无法找到.png

```
//查看系统版本
cat /etc/redhat-release
//查看glibc库版本
strings /lib64/libc.so.6 |grep GLIBC_
//下载glibc库 并安装
#下载
wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz
wget http://ftp.gnu.org/gnu/glibc/glibc-ports-2.14.tar.gz
#解压
tar -xvf glibc-2.14.tar.gz
tar -xvf glibc-ports-2.14.tar.gz
#创建相关目录
mv glibc-ports-2.14 glibc-2.14/ports
mkdir glibc-build-2.14
cd glibc-build-2.14/
#生成C编译的环境
yum -y install gcc
#编译C
../glibc-2.14/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
make
# 安装刚才编译好的 libc.so
makeinstall
# 查看glibc库版本
strings /lib64/libc.so.6 |grep GLIBC_
```

最后

  • 到此,我们的持续集成服务器已经搭建完成,这时候你只要动手提交一下代码到你前面构建触发器设置的分支(一般为主分支),剩余的项目构建,部署等一系列重复繁琐的工作就交由Jenkins帮我们自动完成就可以了,省时又方便。文章中如果有错误,请大家给我提出来,大家一起学习进步,如果觉得我的文章给予你帮助,也请给我一个喜欢或者关注。

  • 参考链接:

    • jenkins的安装与使用(基于 centos 7)

    • jenkins maven Spring Boot git Linux持续集成环境搭建教程

    • 解决SDK升级到27.0.3遇到的GLIBC_2.14 not found

    • 掘金同步地址


推荐阅读
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的步骤和方法
    本文介绍了在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的详细步骤和方法。首先需要下载最新的Java SE Development Kit 9发行版,然后按照给出的Shell命令行方式进行安装。详细的步骤和方法请参考正文内容。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • Centos7搭建ELK(Elasticsearch、Logstash、Kibana)教程及注意事项
    本文介绍了在Centos7上搭建ELK(Elasticsearch、Logstash、Kibana)的详细步骤,包括下载安装包、安装Elasticsearch、创建用户、修改配置文件等。同时提供了使用华为镜像站下载安装包的方法,并强调了保证版本一致的重要性。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
author-avatar
中医鸣芳
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有