使用Jenkins一键分布式部署springboot项目(Docker版)

7 篇文章 0 订阅
1 篇文章 0 订阅

目录

测试环境

测试效果

一、Ubuntu安装Docker

1.1卸载旧版本

1.2设置 Docker 仓库

1.3设置阿里云镜像加速器:

1.4安装 Docker Engine-Community

1.5测试docker是否安装成功

1.6使用 Shell 脚本进行安装

二、Docker基本使用及常用命令

2.1 docker 基本命令

2.2 docker容器自动启动设置

三、安装启动jenkers

3.1官网

3.2 docker安装jenkins

3 访问和解锁Jenkins

四、准备一个springboot项目

五、搭建服务器环境

5.1安装jdk

5.2安装maven

修改maven镜像地址方法

配置环境变量

5.3安装git

5.4关闭防火墙

5.5克隆两个副本服务器备用

六、使用jenkins发布springboot项目

6.1安装推荐的插件

Tips1:使用容器镜像加速器

Tips2:插件安装失败解决方法

6.2安装一个必备插件

6.3创建管理员

6.4全局工具配置

出现红色错误提示处理方法:

6.5系统配置

6.6新建一个任务

6.7构建

七、问题与解决

参考文献


测试环境

VMware® Workstation 12 Pro 12.1.1 build-3770994

Ubuntu16、docker 19.03.9

Jdk1.8 \Maven3.6.3\git2.17.1\OpenSSL 1.1.1\OpenSSH_7.6p1

Jenkins lts版 2.222.3.

工具putty、eclipse

github:https://github.com/leon2016/hello_word.git

 

测试效果

通过jenkins一键分布式部署github上springboot项目到两个服务器上,并支持定时构建。

 

 

 

一、Ubuntu安装Docker

1.1卸载旧版本

我使用的是putty连接本地虚拟机。

# apt-get remove docker docker-engine docker.io containerd runc

 

1.2设置 Docker 仓库

在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。之后,您可以从仓库安装和更新 Docker 。

# apt-get update

 

#  apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

1添加 Docker 的官方 GPG 密钥:

# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

29DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 通过搜索指纹的后8个字符,验证您现在是否拥有带有指纹的密钥:

#apt-key fingerprint 0EBFCD88

3)使用以下指令设置稳定版仓库

# add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu  $(lsb_release -cs) stable"

1.3设置阿里云镜像加速器:

    设置后下载速度会大幅提升。

# mkdir -p /etc/docker

# tee /etc/docker/daemon.json <<-'EOF'

{

  "registry-mirrors": ["https://lcu2fcdl.mirror.aliyuncs.com"]

}

EOF

# systemctl daemon-reload

# systemctl restart docker

 

镜像加速器获取地址:

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

 

1.4安装 Docker Engine-Community

方式一:执行下面命令可安装最新版本

# apt-get install docker-ce docker-ce-cli containerd.io (推荐)

 

方式二:执行下面命令安装特定稳定版本

# apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io

 

安装下载需要一点时间,了解了一下Docker Engine :

  • 社区版 ( CE, Community Edition )社区版 ( Docker Engine CE ) 主要提供了 Docker 中的容器管理等基础功能,主要针对开发者和小型团队进行开发和试验,社区版本是免费。
  • 企业版 ( EE, Enterprise Edition )则在社区版的基础上增加了诸如容器管理、镜像管理、插件、安全等额外服务与功能,为容器的稳定运行提供了支持,适合于中大型项目的线上运行,企业版是收费的。

 

1.5测试docker是否安装成功

# docker run hello-world

 

查看docker版本:

# docker --version

1.6使用 Shell 脚本进行安装

Docker 在 get.docker.com和 test.docker.com 上提供了方便脚本,用于将快速安装 Docker Engine-Community 的边缘版本和测试版本。脚本的源代码在 docker-install 仓库中。 不建议在生产环境中使用这些脚本。

$ curl -fsSL https://get.docker.com -o get-docker.sh

$ sudo sh get-docker.sh

Tips:

如果要用 Docker 作为非root用户,则应考虑使用类似以下方式将用户添加到 docker 组:

$ sudo usermod -aG docker your-user

 

二、Docker基本使用及常用命令

参考:https://www.runoob.com/docker/docker-hello-world.html

2.1 docker 基本命令

docker run -name 容器名  -v 挂载 镜像 // 启动容器

docker run --rm // 每次退出清理容器文件系统,适合调试

docker run --restart=always // 自动重启容器,与上面互斥

docker ps -a // 查看运行的容器,-a表示查看所有容器

docker exec -it 容器id /bin/bash   // 进入容器,exit退出

docker kill/stop 容器id  // 强行停止/停止容器

docker run -d // 启动容器,-d表示后台启动

docker start 容器id // 启动一个已停止的容器

docker restart 容器id // 重启容器

docker logs -f +容器名 // 打印日志

docker start `docker ps -a -q` // 启动所有运行过的容器

docker stop `docker ps -a -q` // 停止所有运行过的容器

docker rmi 镜像id

docker rm 容器id

2.2 docker容器自动启动设置

在运行docker容器时可以加如下参数来保证每次docker服务重启后容器也自动重启:

docker run --restart=always

如果已经启动了则可以使用如下命令:

docker update --restart=always 容器id

 

三、安装启动jenkers

3.1官网

https://www.jenkins.io/

3.2 docker安装jenkins

普通安装

# apt-get update

# apt-get install jenkins

Docker安装jenkers(推荐):

简单安装启动命令如下,后面会讲到更复杂的命令:

# docker run --name jenkins --user=root --restart=always -p 8080:8080 -p 50000:50000 -v /opt/data/jenkins_home:/var/jenkins_home -d jenkins/jenkins:lts
Docker run详解参考:https://www.cnblogs.com/yfalcon/p/9044246.html

3 访问和解锁Jenkins

http://192.168.79.130:8080/

Docker的可以直接日志查看密码

# docker logs jenkins // jenkins是所创建的容器的名字

比如我的密码:48d6ffe4f7354f85aef0c5135e40269b

正确输入密码后进入上面插件安装页面。现在,docker、jenkins都正常运行了,下面准备发布一个springboot的helloworld项目。

 

四、准备一个springboot项目

 

可以直接用我github上的一个demo:

https://github.com/leon2016/hello_word.git

自己也可以快速生成springboot项目,地址:https://start.spring.io/

 

五、搭建服务器环境

5.1安装jdk

# apt-get install openjdk-8-jdk

# java -version # 查看是否安装成功

安装目录在 /usr/lib/jvm/java-8-openjdk-amd64

 

5.2安装maven

官网下载最新安装包:http://maven.apache.org/download.cgi

https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

 

# mkdir /opt/maven

# cd /opt/maven

# wget <官网maven安装包下载地址>

# tar zvxf <安装包.gz>

修改maven镜像地址方法

在maven文件夹下的/conf/settings.xml的mirrors节点中添加(对所有的项目都有效)

 <mirror>
           <id>alimaven</id>
           <name>aliyun maven</name>
           <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
           <mirrorOf>central</mirrorOf>
</mirror>

命令:vi  settings.xml-> 可输入/mirrors快速定位mirrors节点位置->i插入->esc->:wd保存

配置环境变量

在/etc/profile 中最后面添加以下几行

MAVEN_HOME=<maven安装目录>
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin

执行source /etc/profile使环境变量生效

运行mvn -v验证maven是否安装成功

Tips:# whereis mvn也可查看安装目录

 

5.3安装git

# apt-get install git

设置提交用户名和邮箱

git config --global user.name "leon"

git config --global user.email "1754******53@qq.com"

 

5.4关闭防火墙

为了测试方便暂时关闭防火墙,暂时不讨论防火墙安全设置问题,后续总结。

sudo ufw status # 查看防火墙状态

sudo ufw disable  #关闭防火墙

5.5克隆两个副本服务器备用

 

六、使用jenkins发布springboot项目

前面都是铺垫,现在才是激动人心的时刻。。

现在将配置jenkins实现一键分布式部署springboot项目,jenkins将帮我们:

  1. 从git仓库中检出代码
  2. 执行maven的clean install编译命令
  3. 将编译后的jar包通过ssh分发到指定的服务器

剩下的需要应用服务器配置:

  1. 应用服务器环境搭建:应用服务器应安装好java运行环境。
  2. 启动脚本:jenkins只是将jar包分发到了服务器,需要编写启动脚本

6.1安装推荐的插件

安装推荐的插件,可能需要等很长一段时间,出现错误了也没关系,后面可以再安装。

Tips1:使用容器镜像加速器

使用jenkins默认插件下载地址很慢,提速方法如下:

# docker ps // 找到jenkins容器的id ,我的是487a96db6adf

# docker exec -it 487a96db6adf /bin/bash   // 使用docker exec命令进入容器命令行

执行下列修改/var/jenkins_home/updates/default.json文件,文件位于jenkins工作目录

# sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

# exit退出容器

修改完成后,jenkins将使用百度和下面地址下载和更新插件:

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

 

Tips2:插件安装失败解决方法

之前安装失败的插件可以在插件管理再次尝试安装:

 

6.2安装一个必备插件

同理安装Maven Release Plug-in、Publish Over SSH两个必备插件。

6.3创建管理员

 

 

 

 

6.4全局工具配置

 

出现红色错误提示处理方法:

方法一:通过-v参数挂载相应的目录 (推荐)

docker run --name=jenkins --restart=always \
  -u root \
  -d \
  -p 8080:8080 \
  -p 50000:50000 \
  -v /root/.m2:/root/.m2 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /usr/lib/jvm/java-8-openjdk-amd64/bin/java:/usr/lib/jvm/java-8-openjdk-amd64/bin/java \
  -v /usr/lib/jvm/java-8-openjdk-amd64:/usr/lib/jvm/java-8-openjdk-amd64 \
  -v /opt/maven/apache-maven-3.6.3:/opt/maven/apache-maven-3.6.3 \
  -v /opt/data/jenkins_home:/var/jenkins_home \
  jenkins/jenkins:lts

 

方法二:docker exec命令进入docker安装相应的环境

如图,按照方法一挂载后,就没有报错了,可以正常设置jdk,git,maven,并保存成功了。

 

6.5系统配置

系统配置主要需要配置:git ,ssh应用服务器(后续springboot项目将部署到其上面)

最后点击保存就ok了,接下来,新建一个一键分布式部署springboot的任务。

6.6新建一个任务

(1)新建一个maven构建任务。

(2)配置git仓库和构建触发器

(3)配置构建命令及构建成功后分发SSH服务器

Tips:如果不知道Source files怎么配,可以配置好git后,执行一下构建,然后查看工作空间。

继续添加第2台服务器,配置方式同服务器1一样即可。

配置完后,保存就好了,下面我们开始构建。

Tips:Server.sh脚本代码如下,需要提前放置到应用服务器上,并给予执行权限,命令:chmod +x sh文件名。

#!/bin/bash
function killproject()
{
  project_pid=$(netstat -lnp | grep 8090|awk '{print $7}'|cut -d/ -f1)
  if [  $project_pid > 0 ];then
        echo "项目已经启动了,开始关闭项目,项目pid为: $project_pid "
        kill -9 $(netstat -lnp | grep 8090|awk '{print $7}'|cut -d/ -f1)
        echo '项目关闭成功,开始重启项目。。。'
  else
        echo "项目未启动,直接启动"
  fi
}
function start_project()
{
        source /etc/profile
        echo '正在启动项目。。。'
        cd /usr/local/jenkins-target/
        nohup java -jar demo-0.0.1-SNAPSHOT.jar >publish.log &2>1 &

}
function check_project()
{
  check_pid=$(netstat -lnp | grep 8090|awk '{print $7}'|cut -d/ -f1)
  if [ $check_pid  > 0 ];then
        echo "project is start and  pid = : $check_pid  "
  else
        echo "project are not start"
  fi

}
killproject
start_project
sleep 15
check_project

 

6.7构建

(1)点击立即构建,双击进度条,选择控制台输出,可以查看日志

(2)构建成功标识

(3)验证

访问服务器1,服务器2的springboot项目接口,接口正常访问代表部署成功。

(4)版本回退(TODO)

上面构建成功了,只是一个比较好的开始。有时候,新发版本会出现问题,通过jenkins执行shell的能力,我们也可以构建一个任务专门用于版本回退,还有邮件通知、通过构建docker容器发布应用等等。(未完待续)

    jenkins配置qq邮件通知已更新:https://blog.csdn.net/doctorvian/article/details/106297950

 

七、问题与解决

     参考了许多资料,失败了多次才最终构建成功,这只是第一步,jenkins的功能十分强大,后续还可以添加很多实用的定制功能,如邮件提醒等。最后再总结一下,实践中遇到的一些问题和解决方法。

1.报错:Could not transfer artifact ... sun.security.validator.ValidatorException: No trusted certificate found

解决方式:

maven命令加-X获取更多保存日志。

docker run 添加maven本地仓库挂载,同时检查一下jdk,maven配置或挂载。

  -v /root/.m2:/root/.m2 \

 

2.报错:ERROR: Aborted Maven execution for InterruptedIOException

这个错误偶尔会出现,重新构建即可,更多参考:

https://issues.jenkins-ci.org/browse/JENKINS-3273

3.报错:ssh分发jar包时出现No such file or dirctory

   在应用服务器上创建相应目录,如果是在root用户下创建的,需要chmod 777 目标文件夹。

4.报错:permission denied

   (1)如下图:这个是权限问题,是sh没有执行权限,可以通过chmod +x server.sh赋予执行权限。

(2)如下图:这个是推送jar到目标目录jenkins-target时,ssh登录用户leon没有jenkins-target目录的操作权限导致的,可以通过chmod 777 jenkins-target赋权解决。

参考文献

https://www.jenkins.io/doc/

https://www.runoob.com/docker/ubuntu-docker-install.html

https://www.runoob.com/docker/docker-hello-world.html

https://www.jianshu.com/p/41f2def6ec59

https://spring.io/quickstart

https://www.cnblogs.com/dengfaheng/p/10959120.html

https://blog.csdn.net/wwd0501/article/details/78470534

https://blog.csdn.net/niuzaiwenjie/article/details/80747709

https://blog.csdn.net/qq_38270106/article/details/97764483

https://www.cnblogs.com/jiefu/p/10968296.html

https://www.jianshu.com/p/72d05e43a8f3

https://github.com/jenkinsci/docker

https://www.cnblogs.com/sxdcgaq8080/p/10489326.html

https://www.cnblogs.com/zsh-blogs/p/10508656.html

https://www.cnblogs.com/yyxianren/p/10904518.html

https://blog.csdn.net/zjh_746140129/article/details/80904876

https://www.cnblogs.com/ztxd/p/12346806.html

https://blog.csdn.net/weixin_33743661/article/details/92550013

https://www.cnblogs.com/zsh-blogs/p/10508656.html

https://www.jianshu.com/p/8b47631ae374

 

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值