Back
Featured image of post Jenkins + docker + springboot 完美配合全流程教程

Jenkins + docker + springboot 完美配合全流程教程

DevOps现在非常流行,CI/CD持续集成、持续部署也大火,而Jenkins就是自动化部署主要的工具之一。

这篇博客就来详细介绍用jenkins来实现自动化部署springboot项目的docker容器,堪称保姆级教学了。

用docker拉取jenkins镜像,启动Jenkins容器

这里采用的jenkins本身也是用docker容器部署的,不得不说docker确实好用,当然也可以直接运行在主机上

首先拉取Jenkins镜像

docker pull jenkins/jenkins

⚠️注意:切勿docker pull jenkins,已经废弃

启动Jenkins容器

docker run -u root -itd --name jenkins \
-p 6001:8080 \
-v $(which docker):/usr/bin/docker \
-v /var/run/docker.sock:/var/run/docker.sock -e TZ="Asia/Shanghai" \
-v /etc/localtime:/etc/localtime:ro \
-v /volume1/docker/jenkins:/var/jenkins_home \
jenkins/jenkins
  • -p 6001:8080Jenkins默认网页访问端口为8080,将端口映射到外部主机6001端口
  • -v $(which docker):/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock使Jenkins内部可以使用docker命令
  • -e TZ="Asia/Shanghai" -v /etc/localtime:/etc/localtime:ro配置Jenkins容器的时区
  • -v /volume1/docker/jenkins:/var/jenkins_home 将Jenkins的配置映射到外部主机卷,容器删除仍可保留配置

测试Jenkins容器内部

# 进入Jenkins的容器内部
docker exec -it jenkins bash

# 判断docker命令是否正常执行
docker info

访问Jenkins网页端

http://主机IP:6001 就可以访问Jenkins的网页端了

Jenkins初始化

访问页面后需要输入初始密码,用cat 命令查看一下页面上给出的路径就可以获得初始密码,复制进去后就可以成功进入

到插件这里就选择安装推荐插件即可,等待安装完毕,速度稍慢。如果很多插件一直安装失败可以等下一步配置国内源之后再安装

然后按提示创建一个自己的管理员账户

如果想重启Jenkins:

在jenkins主页网址后加上/restart 后回车,点击确定即可

安装插件和必要配置

修改插件国内源并安装其它插件

点击侧边栏系统管理插件管理高级

将图中所示URL的输入中的链接改为阿里的:

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

安装一些插件

插件管理中选择可选插件

安装Maven IntegrationDocker的插件,安装完重启

全局工具配置

点击系统管理全局工具配置

JDK

docker inspect jenkins 查看JAVA_HOME 路径后填入即可,这是个openjdk1.8,刚好用于项目,因为jenkins就是Java开发的

Git

用默认即可

Maven

可以用外部安装的,这里因为下了插件就用Jenkins里的插件就行,点击自动安装

Docker

都好了之后点应用在点保存

Jenkins容器内使用vim

进入Jenkins容器内部后想使用vim的话还需要额外安装,后面需要用到vim

# 更新一下软件源
apt-get update

# 安装vim
apt-get install vim

这里可能比较慢,就等一下,但只需用一次就不额外换源了

修改maven插件的镜像源

因为jenkins在容器内,所以要进入容器内

cd到目录~/.m2 下,ls 一下发现只有一个repository 目录,这个就是默认的maven仓库目录,然后就vim settings.xml 新建一个配置文件

在命令模式下用:set paste 开启粘贴模式,然后把下面内容粘贴进去,记得检查一下内容和编码是不是utf-8

<?xml version="1.0" encoding="UTF-8"?>

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

  <localRepository>~/.m2/repository</localRepository>
  
  <pluginGroups>
    
  </pluginGroups>

  <proxies>

  </proxies>

  <servers>
    
  </servers>

  
  <mirrors>
     <mirror>
      <id>nexus-aliyun</id>
      <mirrorOf>*</mirrorOf>
      <name>Nexus aliyun</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
  </mirrors>

  <profiles>
    
  </profiles>

</settings>

重启jenkins,之后下载包时发现已经更改为阿里源了

创建项目准备自动化部署

左侧边栏新建一个任务,选择maven项目

添加GitHub仓库源码

这里用GitHub做代码仓库,也可以gitlab

有2种方式:httpsssh

如果是https的话添加Credentials 的时候就直接配置自己的GitHub用户名和密码,仓库的URL填写github仓库的url就行

如果是ssh的话要配置密钥,点击系统管理Manage Credentials全局 ,点击左侧边栏添加凭据

如果之前生成过,在自己机器上的~/.ssh 下cat一下就行,没有的话就ssh-keygen 生成

注意此时url就要用ssh://git@github.com/[用户名]/[项目名].git 的格式

加快代码拉取速度

为了加快构建速度,勾选此选项可以使jenkins不拉取代码的历史版本,从而加快构建速度

勾选浅克隆

初次之外,不要在本地打出jar包,不然这么大一个文件上传到仓库再被拉取很费时间

构建触发器

添加maven构建步骤

### 构建脚本

这里是运行一些shell脚本来构建docker镜像和运行容器的

脚本如下,记得在项目目录下写好一个Dockerfile

# 进入项目目录
cd /var/jenkins_home/workspace/[项目名]

# 执行构建Dockerfile命令
docker build -f Dockerfile -t [镜像名]:[tag] .

# 停止之前的容器运行
docker stop [容器名]
# 删除之前的容器
docker rm [容器名]

#运行刚刚创建的容器
docker run -d --name [容器名] -p [映射端口]:8080 [镜像名]:[tag]

echo "构建完成"

Dockerfile参考:

FROM openjdk:8

MAINTAINER [作者]

ADD /target/[项目名]-0.0.1-SNAPSHOT.jar [项目名].jar

EXPOSE 8080

ENTRYPOINT ["java","-jar","/[项目名].jar"]

push触发构建

为了实现只要我们一向代码仓库push就可以自动进行构建,我们需要配置webhook

点击系统管理系统配置 ,找到GitHub选项,点击高级

按下图操作:

打开自己GitHub项目页面

粘贴刚刚复制的地址

下面勾选PushesActive ,最后点击添加即可

点击项目内左侧栏的立即构建 可以手动开始构建

在进程中点击控制台输出 看到构建过程中的日志信息,这些信息很重要我们经常要看,用来发现构建过程中的错误

清除无用的镜像

docker image prune

在多次构建之后可能会发现一些为none的镜像,用此命令清除

配置邮箱通知

在这之前保证安装了相关插件,如果一开始是选安装推荐插件那应该都安装了

点击系统管理系统配置

先配一下管理员邮箱

然后拉到下面,按图中配置,这个邮箱要填刚刚上面的管理员邮箱

注意里面的密码是开启SMTP的密码,不是邮箱的密码

然后可以点击发送测试邮件试试

上面还有一个Extended E-mail Notification 也配一下,也按这些信息填写

Default Recipients 是默认接收通知的邮箱,可以填写多个,用英文半角逗号隔开

Default Triggers 也可以配置一下,是触发邮件的事件

这里有个坑,在系统设置配置完之后,在项目里面的设置记得也要配置完整

进入要发送邮箱功能的项目的配置

再点击增加构建后操作步骤

点击高级设置后设置触发条件

其他的诸如Content TypeDefault Content 之类的就按需求配就行

之后在控制台输出就可以看到构建项目到最后有发邮件的步骤日志

主题美化

可以参考下面这篇文章,个人觉得还是习惯于原版

Jenkins自定义主题教程_FlyWine的博客-CSDN博客_jenkins自定义界面

参考文章:

最优雅的Docker+Jenkins pipeline部署Spring boot项目

Jenkins+Docker+github+Spring Boot自动化部署_linfen1520的博客-CSDN博客

jenkins+git+maven+docker持续集成部署_自动化_运维开发网_运维开发技术经验分享

Jenkins - SSH认证方式拉取Git代码

centos7的Jenkins的maven插件的settings.xml配置文件路径在哪里_festone000的专栏-CSDN博客

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
一辈子热爱技术
Built with Hugo
Theme Stack designed by Jimmy
gopher