转载

CICD搭建—Jenkins实现自动部署

编辑推荐:

本文主要详细介绍了什么叫做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

即可进入页面:

CICD搭建—Jenkins实现自动部署

之后cat上面所写的目录,得到密码,输入进去:

cat + 页面上的路径

输入密码即可。

注:可能会出现访问不了的情况,这时候需要访问一下

ip:8050/jenkins/pluginManager/advanced

CICD搭建—Jenkins实现自动部署

修改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:一般网上比较常见的就是:

yum install git

默认安装在/usr/local/git下,如果不知道在哪里,用

which 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

②压缩包解压:

tar -zxvf v2.17.0.tar.gz

③安装编译源码所需依赖(遇见提示输入y即可)

yum install curl-devel expat-devel

gettext-devel openssl-devel

zlib-devel gcc perl-ExtUtils-MakeMaker

④如之前安装了老版本的git,则执行下面语句进行删除:(没有则跳过)

yum remove git

⑤进入解压后的文件夹,并执行编译:

cd git-2.17.0

make prefix=/data/cicd/git all

⑥安装git至/data/cicd/git路径

make prefix=/data/cicd/git install

⑦打开环境变量配置文件,并进行git相关环境配置:

vim /etc/profile

将下面语句放入文件当中

#git

PATH=$PATH:/usr/local/git/bin

export PATH

最后保存一下:

source /etc/profile

⑧查看安装git的版本:

git --version

七.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一下,刷新环境变量:

source /etc/profile

最后检查一下版本,看能否正常显示:

mvn -version

一般来说会将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默认工作目录:

用户名/.jenkins

里面有个jobs文件夹,所有建的Jenkins job都在里面。

在Jenkins上新建一个job,名叫:test-maven(因为要构建的是maven项目):

CICD搭建—Jenkins实现自动部署

然后开始配置Jenkins,增加git地址,添加构建参数,最后加上maven构建指令(注意在maven指令部分千万不要加mvn)

CICD搭建—Jenkins实现自动部署

CICD搭建—Jenkins实现自动部署

CICD搭建—Jenkins实现自动部署

CICD搭建—Jenkins实现自动部署

CICD搭建—Jenkins实现自动部署

来说一下最后的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

用一个流程图来概括一下整个流程:

CICD搭建—Jenkins实现自动部署

原文  http://www.uml.org.cn/jchgj/202001194.asp?artid=22893
正文到此结束
Loading...