使用docker安装jenkins并实现自动发布springboot+maven多模块war包(码云)

1.安装docker

按照菜鸟教程装就行了:https://www.runoob.com/docker/centos-docker-install.html,

还有docker镜像加速也要配上,否则下载镜像速度会很慢

使用docker安装jenkins并实现自动发布springboot+maven多模块war包(码云)_第1张图片

2.安装jenkins镜像并启动容器

2.1 进入docker hub搜索jenkins,选择第一个镜像,但是这个镜像其实是已经过时的jenkins镜像,我们需要点击jenkins/jenkins:lts

使用docker安装jenkins并实现自动发布springboot+maven多模块war包(码云)_第2张图片

2.2 拉取镜像,这两个镜像都可以,但是文档里面是用的第一种,所以我们就用docker pull jenkins/jenkins:lts拉取镜像

使用docker安装jenkins并实现自动发布springboot+maven多模块war包(码云)_第3张图片

2.3 启动容器

点击上图的documentation进入文档说明:

使用docker安装jenkins并实现自动发布springboot+maven多模块war包(码云)_第4张图片

会发现这里有3条启动语句,如果你图方便,直接使用第一个就行,第二个多了-v参数,即挂载目录到本地,第三个又比第二个多了-d参数,即可后台运行。我选择的是第三种,那这里会有两个问题:

第一就像NOTE写的,如果你挂载了目录,但是容器里面的用户并没有权限去访问你的主机,那么这时候启动就会报错,所以需要使用给予你挂载的目录权限,我挂载的本机目录是:/usr/local/jenkins/jenkins_home

chown -R 1000  /usr/local/jenkins/jenkins_home

第二个是端口映射,8080端口一般是会被tomcat占用,所以最好映射主机的其他端口,别忘了映射后还要打开端口

那我的整个命令就是:

docker run -d -v /usr/local/jenkins/jenkins_home:/var/jenkins_home -p 9000:8080 -p 50000:50000 jenkins/jenkins:lts

注意,你一开始run的时候最好不要加-d参数,否则启动报错了你都不知道。

3.访问jenkins

3.1 当你启动容器,并打开对应端口后,就可以直接访问了,访问方式http://ip+端口

3.2 访问成功后,会让你输一次密码,获取密码:

sudo docker exec 2b0f45f1c634 cat /var/jenkins_home/secrets/initialAdminPassword

 

2b0f45f1c634是指容器id,可以通过docker ps查看到。

3.3 配置插件,选择推荐的就行了,如果有实例关闭的问题,就先不安装插件,之后再安装

3.4 插件装完后,就会让你登录admin账号,密码是jenkins的默认密码

4. 下载必要插件

4.1 maven插件

系统管理 -> 插件管理 -> 点击 “可选插件”,找到如下maven插件的版本,直接安装即可。该插件作用是可以在创建新项目时选择创建maven项目

 

 4.2 gitee插件

因为我用的码云托管代码,所以需要下载gitee插件

使用docker安装jenkins并实现自动发布springboot+maven多模块war包(码云)_第5张图片

 4.3 Publish Over SSH

该插件可以将war包项目发送至服务器

5. 安装全局工具

5.1 安装maven工具

5.1.1 手动安装,自定义maven位置

1. 先去官网手动下载maven(含有bin的tar.gz的压缩包),然后解压,将解压后的文件夹放在你指定的主机挂载目录:

冒号前面的是主机地址,冒号后面的是容器里面的地址,所以这里就是放在/usr/local/jenkins/jenkins_home目录下。

如果你用的官网的命令,即:

-v jenkins_home:/var/jenkins_home

那么他映射的主机地址是 /var/lib/docker/volumes/jenkins_home/_data

如果你直接就没使用-v映射,那你就需要自己进jenkins容器里面去搞了。

2.配置mavne:进入系统管理-> 全局工具配置

使用docker安装jenkins并实现自动发布springboot+maven多模块war包(码云)_第6张图片

使用docker安装jenkins并实现自动发布springboot+maven多模块war包(码云)_第7张图片

这两个地方的地址都是使用容器中的地址。

5.1.2 自动安装maven

使用docker安装jenkins并实现自动发布springboot+maven多模块war包(码云)_第8张图片

然后保存

5.2 安装jdk,自动安装即可

使用docker安装jenkins并实现自动发布springboot+maven多模块war包(码云)_第9张图片

6.添加凭据 

使用docker安装jenkins并实现自动发布springboot+maven多模块war包(码云)_第10张图片

6.1 登录码云的凭据(username with password类型)

使用docker安装jenkins并实现自动发布springboot+maven多模块war包(码云)_第11张图片

6.2 gitee的api令牌

使用docker安装jenkins并实现自动发布springboot+maven多模块war包(码云)_第12张图片

当你安装了gitee插件,应该就会有这个类型的凭据选项了,然后令牌的获取地址也标出来了,自己获取就可以了

7. 系统配置

使用docker安装jenkins并实现自动发布springboot+maven多模块war包(码云)_第13张图片

7.1 gitee的配置

使用docker安装jenkins并实现自动发布springboot+maven多模块war包(码云)_第14张图片

7.2 Publish over SSH的配置

使用docker安装jenkins并实现自动发布springboot+maven多模块war包(码云)_第15张图片上面的都不用填,直接点击新增ssh servers.

使用docker安装jenkins并实现自动发布springboot+maven多模块war包(码云)_第16张图片你会发现没有输密码的地方,所以你需要点击高级,然后就会出现,打上勾,输服务器登录密码即可。最后保存

8. 新建自动发布的项目

使用docker安装jenkins并实现自动发布springboot+maven多模块war包(码云)_第17张图片

使用docker安装jenkins并实现自动发布springboot+maven多模块war包(码云)_第18张图片

8.1 general

使用docker安装jenkins并实现自动发布springboot+maven多模块war包(码云)_第19张图片

8.2 源码管理

使用docker安装jenkins并实现自动发布springboot+maven多模块war包(码云)_第20张图片

8.3 构建触发器和环境,根据自己需求搞,我不需要,所以我没弄触发器

使用docker安装jenkins并实现自动发布springboot+maven多模块war包(码云)_第21张图片

8.4 build

使用docker安装jenkins并实现自动发布springboot+maven多模块war包(码云)_第22张图片

1.这里的结构是这样的,首先你在jenkins里面创建了的这个项目,我假设他的名字是test,那么在你挂载的主机目录下的workspace下就会自动创建一个test文件夹,那由于我的主机挂载目录是:/usr/local/jenkins/jenkins_home,那么在/usr/local/jenkins/jenkins_home/workspace 目录下就会存在一个test文件夹,用来存放他从码云上下载的代码。那么这里的root pom的路径就是/usr/local/jenkins/jenkins_home/workspace/test,由于我码云上代码的目录结构pom文件就是在最上级,所以我这里root pom就可以直接写pom.xml.

我存放在码云上的项目的目录结构如下:

使用docker安装jenkins并实现自动发布springboot+maven多模块war包(码云)_第23张图片

2.clean install 就是针对root pom所需要执行的maven命令

8.5 发送war包至服务器

通过8.4,我们已经可以自动打包了,那么打包后的war包就存放在/usr/local/jenkins/jenkins_home/workspace/test。现在我们需要将war包发送到我们服务器。

使用docker安装jenkins并实现自动发布springboot+maven多模块war包(码云)_第24张图片

 Name属性就是我们在全局配置里面配置的那个ssh

source files: 他指向的绝对路径就是/usr/local/jenkins/jenkins_home/workspace/test,由于我的项目是maven多模块的项目,我的api模块才是web项目,所以打包也是打包api模块。即我项目打包完成后,war包是在api/target下的

remove prefix:是指除去除去前面没用的层级,使得发送war包时可以直接发送文件,而不是连着前面没用的api/target层级一起创建

remote directory: 是指要把source files文件发送到服务器的哪个目录。

exec command: 表示在发送source files 文件完成后需要在服务器执行的操作

使用docker安装jenkins并实现自动发布springboot+maven多模块war包(码云)_第25张图片

源码:

#!/bin/bash
BUILD_ID=DONTKILLME

export JAVA_HOME=/usr/java/jdk1.8.0_231
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib
export PATH=$JAVA_HOME/bin:/usr/local/nginx/sbin:/usr/local/mysql/bin:$PATH

tomcatPid=$(lsof -i:8080|tail -1|awk '"$1"!=""{print $2}')
if [ -n "$tomcatPid" ]
then
echo "kill tomcat"
kill -9 "$tomcatPid"
fi
echo "kill tomcat success"

# 将war包放到指定位置

cd /usr/local/tomcat/bin
echo "start tomcat"
./startup.sh
echo "start tomcat success"

 然后保存。返回首页,进行构建

使用docker安装jenkins并实现自动发布springboot+maven多模块war包(码云)_第26张图片

9 会遇到的问题

当你构建一个maven多模块项目,第一次是不会成功的。即你第一次构建test项目会失败,并且报错应该是什么pom文件找不到。第一次install 父pom文件并不会成功。这个你可以在本地自己测试。原因就是你的maven仓库中还没有父pom的结构。当然有些人自己本地测试时发现是可以成功install父pom文件的,那你把你的maven仓库中该项目的所有子模块的打的包全部删除再试下。由于我们jenkins的maven都是刚刚创建的,maven仓库更是啥都没有,所以第一次构建项目肯定会失败的。

本地操作时正确的操作应该是这样的:

1.先去父pom文件中将modules全部注释掉,然后使用maven工具的clean install,这时你会发现install成功了

2.再将modules的注释全部去掉,再执行一次clean install,你就会发现install 成功了

那在jenkins上面是一样的:

1.先去父pom文件中将modules全部注释掉,然后提交到码云上,然后立即构建项目,构建成功后,我们的maven仓库就会有我们项目的父pom结构了。

2.再将modules的注释全部去掉,再提交代码到码云上,然后立即构建项目,这次就会成功了,之后就可以正常的提交代码,然后构建了。

 

 

 

 

你可能感兴趣的:(使用docker安装jenkins并实现自动发布springboot+maven多模块war包(码云))