专栏首页吴伟祥Docker安装Jenkins实现项目自动部署(Java Web项目) 顶

Docker安装Jenkins实现项目自动部署(Java Web项目) 顶

一、前言

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

二、部署流程

1、用户提交代码到Git仓库

2、Jenkins服务器从指定Git仓库拉去代码,使用maven编译打包。

3、Jenkins服务器ssh连接应用服务器,将打包好的war或者jar包传送到应用服务器指定位置,例如 tomcat/webapps

4、Jenkins服务器在应用服务器远程执行脚本文件 重启应用服务器tomcat 或者 在应用服务器执行 java -jar 启动当前项目。

三、Jenkins服务器的安装与配置工作

〇、Docker安装Jenkins

    安装环境

Ⅰ.下载最新的Jenkins LTS:   

docker pull jenkins/jenkins:lts

Ⅱ.启动Jenkins前准备

#创建jenkins文件夹,用于和容器内文件夹做磁盘挂载
mkdir /home/jenkins

注意:在安装jenkins时候,挂在文件夹/home/jenkins/的归属用户id必须是1000,否则会抛出无操作权限异常。异常如下:

需要修改文件夹的归属者和组

sudo chown -R 1000:1000 jenkins/

Ⅳ、启动jenkins

sudo docker run -itd -p 8080:8080 -p 50000:50000 --name jenkins --privileged=true -v /home/jenkins:/var/jenkins_home jenkins/jenkins:lts

-p 8080:8080 -p 50000:50000 进行端口映射 --privileged=true 在CentOS7中的安全模块selinux把权限禁掉了,参数给容器加特权。 -v /home/jenkins:/var/jenkins_home 磁盘挂载

Ⅴ、密码设置

首次启动会提示初始密码位置,找到初始密码:

[root@iZwz9aa0bof90ijp1bsncbZ globalEnvi]# sudo docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
9e3a37cf78264798878606621db632d3

Ⅵ、安装需要的插件

在jenkins页面“系统管理”-->“管理插件”-->"可选插件"中搜索:

Maven Integration 用来支持构建maven项目 Publish Over SSH 用来把构建好的部署包传送到指定服务器的指定位置 GitLab、Gitlab Authentication、Gitlab Hook来获取仓库源码

Ⅶ、配置Jenkins

Maven安装 #1.下载maven并解压 wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.tar.gz tar -zxvf apache-maven-3.6.0-bin.tar.gz #2.修改maven的远程镜像为阿里云镜像库 vim conf/setting.xml ... <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror> ... #3.在/etc/profile文件末尾增加以下配置 vim /etc/profile #注意这里是maven的安装路径 M2_HOME=/home/jenkins/globalEnvi/apache-maven-3.6.0 #4.重载/etc/profile这个文件 source /etc/profile export PATH=${M2_HOME}/bin:${PATH} JDK安装 #1.将下载完的jdk解压 tar -zxvf jdk-8u191-linux-x64.tar.gz #2.在/etc/profile文件末尾增加以下配置 vim /etc/profile export JAVA_HOME=/home/jenkins/globalEnvi/jdk1.8.0_191 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH #3.更新配置文件 source /etc/profile Git安装 #安装依赖 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidoc yum install gcc perl-ExtUtils-MakeMaker

在jenkins页面“系统管理”-->“管理插件”-->”全局工具配置”:

Ⅷ、添加SSH Servers(可使用密钥,也可以使用密码,这里我们使用密码)

在jenkins页面“系统管理”-->“系统设置”:

至此,Jenkins服务器环境如下 :

环境

版本

Jenkins

2.138.3

JDK

1.8.0_191

Maven

3.6.0

Git

1.8.3.1

四、部署应用服务器的安装与配置工作

Tomcat安装 #1.下载Tomcat并解压 wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v8.5.35/bin/apache-tomcat-8.5.35.tar.gz tar -zxvf apache-tomcat-8.5.35.tar.gz #2.修改Tomcat服务启动端口 JDK安装 #1.将下载完的jdk解压 tar -zxvf jdk-8u191-linux-x64.tar.gz #2.在/etc/profile文件末尾增加以下配置 vim /etc/profile export JAVA_HOME=/home/jenkins/globalEnvi/jdk1.8.0_191 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH #3.更新配置文件 source /etc/profile

至此,部署应用服务器环境如下:

环境

版本

JDK

1.8.0_191

Tomcat

8.5.35

五、实战演练

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

Ⅱ、配置源码管理:

Ⅲ、配置maven项目编译,maven 执行的命令:

clean package -Dmaven.test.skip=true

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

“增加构建后的操作步骤”-->“Send build artifacts over SSH”:

Ⅴ、部署应用服务器的自动化shell脚本

#针对 项目 放到 /home下,且指向/home/auto-deploy.sh脚本

#tomcat 路径
TOMCAT_HOME=/home/tomcat8
#tomcat 端口
TOMCAT_PORT=8080
#java项目名,不用写.war
PROJECT_NAME=im-server-1.0.0


check_port() {
        echo "正在检测Tomcat端口:"$1
        netstat -tlpn | grep "\b$1\b"
}
if check_port $TOMCAT_PORT
then
        echo $TOMCAT_PORT"端口存在,开始杀死对应PID"
        kill -9 `ps -ef | grep tomcat | awk 'NR==1 {print $2}'`
else
        echo $TOMCAT_PORT"端口空闲"    
fi


echo "强制删除tomcat下的项目"$TOMCAT_HOME"/webapps/"$PROJECT_NAME
rm -rf $TOMCAT_HOME"/webapps/"$PROJECT_NAME
echo "强制删除tomcat下的项目"$TOMCAT_HOME"/webapps/"$PROJECT_NAME".war"
rm -rf $TOMCAT_HOME"/webapps/"$PROJECT_NAME".war"
echo '删除完成'
cd $TOMCAT_HOME"/webapps"
echo "查看当前"$TOMCAT_HOME"/webapps目录下的文件"
ls -a
echo "将远程打包的war包放入到"$TOMCAT_HOME"/webapps/下"
mv /home/$PROJECT_NAME".war" $TOMCAT_HOME/webapps
cd $TOMCAT_HOME/bin
./startup.sh
DATE_N=`date "+%Y-%m-%d %H:%M:%S"`
echo $PROJECT_NAME"  最新构建部署时间:${DATE_N}" >> ../../check_port.log #记录启动日志
echo "####################"$PROJECT_NAME"启动成功####################"

Ⅵ、我们回到任务栏,点击任务最后面的“立即构建”按钮。

Ⅶ、构建成功

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL基准测试 转

    基准测试是  指通过设计科学的测试方法、测试工具和测试系统,实现对一类测试对象的某项性能指标进行定量的和可对比的测试。例如,对计算机CPU进行浮点运算、数据访问...

    wuweixiang
  • 了解Docker 原

    docker入门教程是由王春生翻译的docer官方的相应资料,旨在为大家提供docker的中文资料,方便大家了解学习docker。 菜鸟教程:http://...

    wuweixiang
  • 如何查看电脑核数和线程数 原

    右键计算机->设备管理器->处理器(如下图,处理器下有几个即为几核,按这种方式来看我的电脑为八核,其实并不是这样,下面我会解释)

    wuweixiang
  • AtomicStampedReference是怎样解决CAS的ABA问题

    但凡对Java有一点深入就会知道 CAS,即 compareAndSwap。在Java中使用 Unsafe 类提供的native方法可以直接操作内存,其中就有对...

    龟仙老人
  • ubuntu下迁移home目录至新的分区教程详解

    在用户home目录越来越大时,就可以考虑将home目录迁移至新的分区,怎么实现呢?下面给大家介绍下。

    砸漏
  • pytorch常用数据操作函数

    博主的研究方向是目标检测,深度学习框架使用Pytorch,在日常的使用过程中经常会碰到一些问题,因此整理一下pytorch的一些常用接口和使用技巧。

    苏十四
  • 家庭问题

    家庭问题 时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte 总提交 : 143  ...

    attack
  • 性能8倍提升,YRCloudFile Windows客户端破解SMB性能困局

    说起存储性能,我们就不得不说存储访问协议,Windows场景下的存储访问协议主要有:标准的SMB协议和私有客户端协议。SMB是Windows系统上主要的共享文件...

    焱融科技
  • Selenium自动化|爬取公众号全部文章,就是这么简单

    大家好,今天我们来讲点Selenium自动化,你是否有特别喜欢的公众号?你有思考过如何将一个公众号历史文章全部文章爬下来学习吗?现在我们以早起Python为例,...

    刘早起
  • Leetcode 第23场双周赛A 5360. 统计最大组的数目 (手速题,map)

    给你一个整数 n 。请你先求出从 1 到 n 的每个整数 10 进制表示下的数位和(每一位上的数字相加),然后把数位和相等的数字放到同一个组中。

    glm233

扫码关注云+社区

领取腾讯云代金券