您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 订阅
  捐助
CICD搭建准备——Jenkins实现自动部署
 
作者:黔水小欣
  2412  次浏览      18
2020-1-19
 
编辑推荐:
本文主要详细介绍了什么叫做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上面所写的目录,得到密码,输入进去:

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

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项目):

然后开始配置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

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

   
2412 次浏览       18
相关文章

为什么要做持续部署?
剖析“持续交付”:五个核心实践
集成与构建指南
持续集成工具的选择-装载
相关文档

持续集成介绍
使用Hudson持续集成
持续集成之-依赖管理
IPD集成产品开发管理
相关课程

配置管理、日构建与持续集成
软件架构设计方法、案例与实践
单元测试、重构及持续集成
基于Android的单元、性能测试