资讯专栏INFORMATION COLUMN

基于Jenkins实现项目自动化部署

IT那活儿 / 2090人阅读
基于Jenkins实现项目自动化部署


背景



Jenkins是基于Java开发的一种持续集成工具,主要用于持续、自动构建/测试软件项目、监控外部任务的运行,功能包括:

  • 持续的软件版本发布/测试项目。

  • 监控外部调用执行的工作。


为什么使用Jenkins?


先来看看一般的后端项目发布流程:

1、本地或打包服务器利用maven打成war包

2、远程或者SSH连上项目服务器

3、停掉tomcat,删除旧包和缓存,将新打的包放进去

4、重启tomcat,完成

看似步骤简单,其实占用了大量开发和运维的时间。


使用Jenkins后:

1、点击立即构建,完成。


什么?点击个按钮就完成了?没错,就是个按钮。其实在你点击按钮后Jenkins已经帮你把上述该走的流程后台跑了一遍了。再搭配Gitlab的githooks可实现提交代码后自动构建发布,连按钮也不需要点了。


在开发项目的过程中会部署测试环境来验证产品功能,重复以上操作会显得很繁琐,浪费大量时间,所以使用Jenkins来实现持续集成,对整个开发项目的过程有着重要的意义。使用Jenkins后,可节省手动发布时间成本,避免人工打包出错,同时也能及时发现系统开发集成过程中产生的问题。


本文接下来介绍如何基于Jenkins+Maven+Git(GitLab)持续集成Java项目。




流程概览



上图为Java测试环境从代码提交到应用部署的自动化完整流程。

下面我们具体来看Jenkins的安装和配置。




环境准备



现场测试环境如下,两台Linux虚拟机,安装好以下软件:

名称

IP

安装软件

代码托管、持续集成

192.168.3.144

JDK1.8、Maven3.5.4、Git1.7.1、Gitlab、Jenkins

应用服务器

192.168.3.145

JDK1.8、Tomcat


分别检验上述软件的安装情况:


检验JDK环境


检验Maven


检验Git


检验Gitlab


添加访问Gitlab的ssh凭证

在192.168.3.144使用root用户生成公钥和私钥

执行ssh-keygen-t rsa,在/root/.ssh/目录生成公钥和私钥

id_rsa:私钥文件
id_rsa.pub:公钥文件


把生成的公钥放在Gitlab中

登录192.168.3.144->点击头像->Settings->SSHKeys


Jenkins提前安装完毕。以Tomcat的war包形式来安装,启Jenkins。

安装相关插件

发布插件Deploy to container Plugin

Maven插件Maven Integration plugin

Git插件Git plugin

SSH插件Publish Over SSH

Gitlab插件GitLab Plugin

Gitlab钩子插件Gitlab Hook Plugin


在Jenkins中配置SSHServers



创建一个Maven工程



构建Maven项目


源码管理

填写git地址信息,由于已配置ssh,无需配置认证凭据


构建触发器

Buildwhen a change is pushed to GitLab:检测到Gitlab项目代码提交后就触发


同时需要在Gitlab的Webhooks中配置上图圈出的地址,勾上Pushevents触发



打包前步骤

根据自己需求可以添加一些操作:如一些shell命令


Build打包构建

RootPOM:指定pom.xml的文件路径(这里是相对路径)

Goalsand options:mvn的选项,构件参数


构建后操作

把构建好的jar包推送至应用主机,并执行启停脚本拉起应用服务


stop.sh





#!/bin/sh

APP_NAME=amp_dev_server.jar


tpid=`ps-ef|grep $APP_NAME|grep -v grep|grep -v kill|awk {print $2}`

if [${tpid} ]; then

echoStop Process...

kill-15 $tpid

fi

sleep5

tpid=`ps-ef|grep $APP_NAME|grep -v grep|grep -v kill|awk {print $2}`

if [${tpid} ]; then

echoKill Process!

kill-9 $tpid

else

echoStop Success!

fi






向上滑动查看更多内容


start.sh





#!/bin/sh

source/etc/profile

APP_NAME=amp_dev_server.jar


tpid=`ps-ef|grep $APP_NAME|grep -v grep|grep -v kill|awk {print $2}`

if [${tpid} ]; then

echo App is running.

else

echo App is NOT running.

fi

#!/bin/sh

rm-f tpid

nohupjava -jar /home/gpadmin/soft/amp_dev_server/amp_dev_server.jar--spring.profiles.active=test>/home/gpadmin/soft/amp_dev_server/amp_dev_server.log 2>&1&

echo$! > tpid

echoStart Success!






向上滑动查看更多内容


到此配置完成,保存即可。




构建项目



Jenkins常用构建方式有三种:

  • 手动构建:用于测试环境或者预上线环境部署,只需要在Jenkins的界面点立即构建即可执行

  • 触发式构建:用于开发环境部署,开发人员可以push代码或者合并代码到Gitlab项目的开发分支上,Jenkins就自动部署代码到对应服务器

  • 定时构建:在参数化构建基础上添加,可以每天定时打包


验证项目是否构建成功



Jenkins使用各种颜色表示任务当前的状态:

蓝色:任务最近一次构建是成功的

红色:任务最后一次构建是失败的

黄色:任务最后一次构建表示成功了,但不稳定(主要是因为有失败的测试)

灰色:任务从未被执行过或被禁用了


Jenkins使用一组天气图标表示任务长期的一个状态,他们分别是:

  • 万里晴空,任务80%以上的集成都是成功的

  • 稍有乌云,任务有60%~80%的集成是成功的

  • 乌云密布,任务只有40%~60%的集成是成功的

  • 阴雨绵绵,任务的集成成功率只有20%~40%

  • 电闪雷鸣,任务的集成成功率不到20%




总结



实际上,产品在从需求到部署的过程中,会经历若干种不同环境,例如各种自动化测试运行环境、仿真环境、生产环境等。这些环境的搭建、配置、管理过程中,产品对应也需要在不同环境中进行部署,状况也会比较复杂,从头到尾地全自动持续部署的确困难。但如果能克服困难,做到持续交付,保证代码在整个上线流程环境没问题,整个团队就能做到有的放矢,也更加有力的保证了代码上线质量。所以,持续集成、持续部署持续交付提供了一个优秀的DevOps环境,对于整个团队来说,好处与挑战并行。无论如何,频繁部署、快速交付以及开发测试流程自动化都将成为未来软件工程的重要组成部分。未来已经改变,不变者终将被淘汰。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/130189.html

相关文章

  • 使用 Jenkins 自动部署 Docker 服务(二、构建部署篇)

    摘要:如果还没有搭建好可以使用的,请先移步到这篇文章进行搭建使用自动部署服务一搭建篇目标通过实现推送代码后自动部署基于的服务准备工作获取示例项目或者直接复制以下文件内容获取示例项目项目文件页面文件镜像文件部署文件部署脚本文件页面文件项目很简单, 如果还没有搭建好可以使用 Docker 的 Jenkins,请先移步到这篇文章进行搭建 使用 Jenkins 自动部署 Docker 服务(一、Je...

    denson 评论0 收藏0
  • Jenkins实现前端项目动化集成打包部署

    摘要:原博客地址实现前端项目自动化集成打包部署掘金地址前言以前写前端项目打包部署,都是手动运行命令,打包完,然后压缩,再上传到服务器解压。验证提交代码,成功自动打包部署提交代码,观察界面,出现构建任务,构建完成之后收到邮件通知。 原博客地址:https://yezihaohao.github.io/2017/09/09/Jenkins实现前端项目自动化集成打包部署/掘金地址:https://...

    Guakin_Huang 评论0 收藏0
  • 在Kubernetes上部署和伸缩Jenkins

    摘要:在本教程中,我们将使用在上部署和伸缩。它主要用来帮助操作人员部署伸缩更新和维护服务,以及提供服务发现机制来管理节点集群上的容器化应用程序。代理则使用,网络启动协议启动,因此容器能够在启动和运行之后自动连接到。账户我们将在上部署集群。 在本教程中,我们将使用Rancher在Kubernetes上部署和伸缩Jenkins。按照本文的步骤一步步来,你将会使用到我们用来测试实际构建作业的mas...

    Pines_Cheng 评论0 收藏0
  • Docker容器系列教程(三):jenkins环境搭建与插件安装

    摘要:本文将使用这些命令搭建一个持续集环境,解决不能联网的问题来安装各种常用插件。总结通过本章学习,你已经知道了基于如何在环境下搭建环境,并创建一个项目。以为基础框架,为数据访问层,为权限授权层,对常用数据进行缓存,基于构建的作为前端框架。 回顾:上一文对Docker常用的命令以罗列的方式做了一个详尽的介绍。本文将使用这些命令搭建一个jenkins持续集环境,解决jenkins不能联网的问题...

    vvpvvp 评论0 收藏0
  • 一些小团队的动化运维实践经验

    摘要:行业内各巨头的自动化运维架构都各种功能各种酷炫,如下图,让人可望不可及。面对这么多问题,我就想啊,如何在低成本情况下实现自动化运维。自动扩缩容通过配置告警规则,调用相应就可以实现实战以上就是笔者关于自动化运维的一些实践。 行业内各巨头的自动化运维架构都各种功能各种酷炫,如下图,让人可望不可及。现在最终的样子大家都知道了,但问题是如何根据自己团队当前的情况一步步向那个目标演进?笔者所在团队,三...

    princekin 评论0 收藏0
  • Docker在开发、测试中的应用

    摘要:对测试的影响让单元测试运行的更顺畅单元测试驱动开发是一个很好的应用程序开发方式,单元测试往往也是和代码一起被提交到代码仓库中。但是很多单元测试通常依赖于很多其他服务,而这些服务的标准化配置往往是一个难点,如数据库的搭建防火墙的配置等。 传统的软件开发、测试、运维需要三个团队在三个不同的环境中进行,而三个环境的不同引发了很多的问题。如:工作内容的重复;开发环境中可运行的程序在测试和运维环...

    mating 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<