编辑推荐: |
本文主要详细介绍了什么叫做Jenkins,搭建Jenkins的目的,Jenkins的特点, 产品发布的流程 希望对您的学习有所帮助。 本文来自于csdn,由火龙果软件Delores编辑推荐。 |
利用Git+Jenkins实现自动部署Spring Boot项目
一.什么叫做Jenkins
二.搭建Jenkins的目的
三.Jenkins的特点
四.产品发布的流程
六.git搭建
七.maven本地仓库搭建
八.自动部署demo
一.什么叫做Jenkins
Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台。这是一个免费的源代码,可以处理任何类型的构建或持续集成。集成Jenkins可以用于一些测试和部署技术。Jenkins是一种允许持续集成的软件。
二.搭建Jenkins的目的
持续、自动地构建/测试软件项目。
更好地实现整个CICD流程。
三.Jenkins的特点
开源的java语言开发持续集成工具,支持CI,CD。
易于安装部署配置:可通过yum安装,或下载war包以及通过docker容器等快速实现安装部署,可方便web界面配置管理。
消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知,生成JUnit/TestNG测试报告。
分布式构建:支持Jenkins能够让多台计算机一起构建/测试。
文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。
丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如git,svn,maven,docker等。
四.产品发布的流程
产品设计成型 -> 开发人员开发代码 -> 测试人员测试功能 -> 运维人员发布上线
其中,包括很重要的三点:
持续集成 (Continuous integration,简称CI)
重点是将各个开发人员的工作集合到一个代码仓库中。一般来说,每天都要进行几次,主要目的是尽早发现集成错误。
持续交付(Continuous delivery,简称CD)
目的是最小化部署或者释放过程中固有的摩擦。他的实现通常能够构建部署的每个步骤自动化,以便任何情况下都能安全地完成代码发布。
持续部署(continuous deployment)
无论何时对代码进行更改,都会自动进行构建/部署。
五.Jenkins的搭建(linux)
我在这里默认已经安装好了jdk。
所需安装包:
Jenkins下载地址:https://jenkins.io/,先下载war包;(我使用的是2.190.3版本的war包)
Tomcat下载地址: https://tomcat.apache.org/download-70.cgi(我使用的是7.0.96的tomcat)
2.将下载好的包上传到linux服务器上;
新建一个cicd的目录
mkdir -p /data/cicd
mkdir -p /data/cicd/git
mkdir -p /data/cicd/tomcat
将两个包上传到/data/cicd/tomcat目录下:先对tomcat的包进行解压,之后将war放到tomcat的webapps目录下,我这时将tomcat的启动端口改为8050了,避免默认的8080和别人的冲突了,指令如下:
cd /data/cicd/tomcat tar -zxvf apache-tomcat-7.0.96 cd apache-tomcat-7.0.96/webapps cp /data/cicd/tomcat/jenkins.war ./ #这里去修改conf目录下的server.xml, 修改端口号为8050即可,就省略不写了 cd ../bin sh start.sh
启动后在本地访问,ip+8050:/jenkins
即可进入页面:
之后cat上面所写的目录,得到密码,输入进去:
输入密码即可。
注:可能会出现访问不了的情况,这时候需要访问一下
ip:8050/jenkins/pluginManager/advanced
修改Update Site的url的协议为http即可。(即:去掉s )或者直接替换成清华大学所提供的地址
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
之后安装插件,选择“安装推荐的插件”,之后会自动安装。
注:这时可能会遇见一个问题:报一个“An error occurred during installation:
No such plugin: cloudbees-folder”的错误,意思是安装插件cloudbees-folder失败,是因为下载的Jenkins.war里没有cloudbees-folder插件。所以得下载一个。 在这个网址查看
下载结束以后,先shutdown Jenkins服务,cloudbees-folder.hpi放在tomcat目录下的
/webapps/jenkins/WEB-INF/detached-plugins下即可。然后重启tomcat即可。
六.git搭建
下载并安装git:一般网上比较常见的就是:
默认安装在/usr/local/git下,如果不知道在哪里,用
但是这个指令安装的git一般为1.8.3,但是官网上最新的为2.0以上了。这也是yum一直存在的问题,版本不好控制。
所以为了安装最新的git,我们先从github上下载最新的源码,自己进行编译安装。
自己安装制定版本的git:(我这里自定了2.17.0版本)
①下载安装包:
wget https://github.com/git/
git/archive/v2.17.0.tar.gz
②压缩包解压:
③安装编译源码所需依赖(遇见提示输入y即可)
yum install curl-devel expat-devel
gettext-devel openssl-devel
zlib-devel gcc perl-ExtUtils-MakeMaker
④如之前安装了老版本的git,则执行下面语句进行删除:(没有则跳过)
⑤进入解压后的文件夹,并执行编译:
cd git-2.17.0
make prefix=/data/cicd/git all
⑥安装git至/data/cicd/git路径
⑦打开环境变量配置文件,并进行git相关环境配置:
将下面语句放入文件当中
#git
PATH=$PATH:/usr/local/git/bin
export PATH
最后保存一下:
⑧查看安装git的版本:
七.maven本地仓库搭建
下载maven的jar包并解压
我下载的是:apache-maven-3.6.1
cd /usr/local mkdir maven cd maven wget http://mirror.bit.edu.cn /apache/maven/maven-3/3.6.1 /binaries/apache-maven-3.6.1-bin.tar.gz tar zvxf apache-maven-3.6.1-bin.tar.gz
2.配置环境变量,将下面内容copy到本地环境变量配置文件中,并保存:
export MAVEN_HOME=/usr/local
/maven/apache-maven-3.6.1
export PATH=$MAVEN_HOME/bin:$PATH
记得source一下,刷新环境变量:
最后检查一下版本,看能否正常显示:
一般来说会将maven配置文件中的镜像地址换为阿里的镜像仓库地址:
<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com /nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
八.自动部署demo
前提:Jenkins所在的服务器,已经配置好了git,maven环境以及下载好了Jenkins上的pipeline插件。
注:Jenkins默认工作目录:
里面有个jobs文件夹,所有建的Jenkins job都在里面。
在Jenkins上新建一个job,名叫:test-maven(因为要构建的是maven项目):
然后开始配置Jenkins,增加git地址,添加构建参数,最后加上maven构建指令(注意在maven指令部分千万不要加mvn)
来说一下最后的shell指令:
sshpass -f /data/.admuser.pw ssh -o StrictHostKeyChecking=no admin@$ {server_ip} "/data/lixin/demo/spring -boot-run.sh stop demo-0.0.1-SNAPSHOT" sshpass -f /data/.admuser.pw scp -r -o StrictHostKeyChecking=no ./target/ demo-0.0.1-SNAPSHOT.jar admin@${server_ip}:/data/lixin/demo/ sshpass -f /data/.admuser.pw ssh -o StrictHostKeyChecking=no admin@$ {server_ip} "/data/lixin/demo/spring -boot-run.sh restart demo-0.0.1-SNAPSHOT"
其中/data/.admuser.pw 为目标服务器的密码
spring-boot-run.sh为一个jar包启动脚本具体如下:
#!/bin/sh SERVICE_NAME=$2 HOME="/data/lixin/demo" JAVA_OPTS="" SERVICE_OPTS="" PATH_TO_JAR=$HOME/$ {SERVICE_NAME}.jar PID_PATH_NAME=$HOME/$ {SERVICE_NAME}.pid source /etc/profile echo "JAVA_HOME=$JAVA_HOME" function start(){ echo "Starting $SERVICE_NAME ..." if [ ! -f $PID_PATH_NAME ]; then cd $HOME/ nohup java $JAVA_OPTS -jar $PATH_TO_JAR $SERVICE_OPTS > server.log 2>&1 & echo $! > $PID_PATH_NAME echo "$SERVICE_NAME started ..." else echo "$SERVICE_NAME is already running ..." fi } function status(){ if [ -f $PID_PATH_NAME ]; then PID=$(cat $PID_PATH_NAME); echo "$SERVICE_NAME is running , pid is $PID ..." else echo "$SERVICE_NAME is not running ..." fi } function stop(){ if [ -f $PID_PATH_NAME ]; then PID=$(cat $PID_PATH_NAME); echo "$SERVICE_NAME stoping ..." kill -9 $PID; echo "$SERVICE_NAME stopped ..." rm $PID_PATH_NAME else echo "$SERVICE_NAME is not running ..." fi } function restart(){ if [ -f $PID_PATH_NAME ]; then PID=$(cat $PID_PATH_NAME); echo "$SERVICE_NAME stopping ..."; kill -9 $PID; echo "$SERVICE_NAME stopped ..."; rm $PID_PATH_NAME echo "$SERVICE_NAME starting ..." cd $HOME/ nohup java $JAVA_OPTS -jar $PATH_TO_JAR $SERVICE_OPTS >server.log 2>&1 & echo $! > $PID_PATH_NAME echo "$SERVICE_NAME started ..." else echo "$SERVICE_NAME starting ..." cd $HOME/ nohup java $JAVA_OPTS -jar $PATH_TO_JAR $SERVICE_OPTS >server.log 2>&1 & echo $! > $PID_PATH_NAME echo "$SERVICE_NAME started ..." fi } case $1 in start) start ;; status) status ;; stop) stop ;; restart) restart ;; esac
用一个流程图来概括一下整个流程: