Jenkins Docker实现SpringBoot自动化发布

前置条件

安装Docker及Docker Compose

安装Jenkins

新建jenkins文件夹,并添加docker-compose.yml文件

在文件中添加以下内容

version: "3.9"

volumes:
  jenkins_data: { }

services:
  jenkins:
    image: jenkinsci/blueocean
    container_name: Jenkins
    restart: always
    environment:
      - TZ=Asia/Shanghai    //中国时区
    ports:
      - "8080:8080"         // 左边是外部端口
    volumes:
      - jenkins_data:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock

在当前文件夹下执行以下命令

// 启动jenkins服务
docker-compose up -d
// 授权任意用户可访问docker
sudo chmod 777 /var/run/docker.sock

等待启动完成后,执行以下命令查看密码

docker logs -f Jenkins

image-20211227133343546

图上红色标注即为Jenkins密码

访问服务器ip:8080,进入jenkins,这里我是本机起的服务,直接访问http://127.0.0.1:8080/即可

输入上面红色的管理员密码

点击选择插件来安装

勾选以下插件即可

Folders Plugin
Build Timeout
Config File Provider
Credentials Binding Plugin
Timestamper
Workspace Cleanup
Git plugin
Git Parameter
SSH Build Agents
Matrix Authorization Strategy Plugin
Localization: Chinese (Simplified)

点击安装,等待安装完成

点击右下角使用admin账户继续,点击保存并完成,现在进入到Jenkins页面

插件安装

我们还需要安装几个插件,点击Manager Jenkins,点击Manage Plugins

请先到以下地址下载本地化插件

https://plugins.jenkins.io/localization-zh-cn/#releases

image-20211227135012456

点击高级,点击上传插件,将刚才下载的文件上传上去

image-20211227135333448

安装完成后勾选以重启Jenkins

image-20211227135119702

点击可选插件,搜索以下几个插件并安装,这里注意的是自带搜索比较弱智,所以直接拿一个单词搜索就行,否则不一定能搜索出来

Generic Webhook Trigger Plugin
AdoptOpenJDK installer Plugin
Maven Integration plugin
Publish Over SSH

image-20211227135529715

等待重启完成后

JDK安装

点击系统管理,点击全局工具配置,找到JDK,点击新增JDK

image-20211227143903388

image-20211227143921016

点击删除安装

点击新增安装,选择Install from adoptopenjdk.net

选择JDK17

Maven安装

拉到页面最下方,找到Maven,点击新增Maven,输入名称,然后选择对应版本后点击保存

添加自定义maven settings.xml

点击系统管理,点击Managed files,点击add a new config,选择类型为Global Maven settings.xml

点击提交,将Content中的值改为你的maven 私服的settings.xml文件

点击保存

创建流水线项目

基础设置

点击新建任务,选择构建一个自由风格的项目

image-20211227135858479

勾选丢弃旧的构建,并输入保持构建的最大个数为14个,这里主要是为了避免频繁构建导致Jenkins占满硬盘

勾选参数化构建过程,选择Git参数,输入参数名称为branch,参数类型为分支,默认值为origin/master这里可以根据自己需求进行调整,例如我在项目的开发环境的时候选择的默认值为origin/dev

源码管理

源码管理选择Git,输入你的Git仓库,这时会提示无法连接仓库,点击新增凭据

image-20211227142624607

新增Git凭据

点击新增凭据

image-20211227142827078

选择类型为带私钥的ssh用户名

随便输入一个用户名,私钥可选你自己的私钥,也可以选择部署密钥,注意这里这个密钥是用于访问Git仓库的密钥,必须要在对应Git仓库添加此密钥,如是GitLab则添加的密钥必须可访问此仓库

私钥选择直接输入,然后将你的id_rsa文件内容复制进去,点击保存,然后在页面选择此凭据,这时错误提示就消失了,代表Jenkins可以正确访问仓库

Maven构建项目

跳转至Build步骤,选择调用顶层shell目标

image-20211227151129760

输入构建Maven命令,这里简单解释一下 ,-T 1C 代表一个核心使用一个线程进行构建,clean package就是常规的清理及打包,fork=true则是打开maven多线程编译,最后一个就是跳过测试环节

点击高级,选择自定义的全局maven settings文件

image-20211227151154513

Docker镜像构建

在构建步骤选择

image-20211227154700759

新增一个构建步骤,选择类型为执行Shell

在输入框中输入以下内容

echo '执行构建docker镜像'

cd <你的项目子目录,如果是单体项目,Dockerfile在顶层目录下,则不需要此步骤>
docker build -t <你的镜像名称>:<你的镜像版本,此处可使用Jenkins环境变量,例如git提交hash> 构建时间等 . &

// 在这里也可以执行Docker镜像推送工作或者启动Docker镜像操作
// 例如
// docker stop <你的镜像名称>
// docker run <你的镜像名称>:<你的镜像版本>

wait
echo 'docker镜像构建完成'

点击保存,点击立即构建,即可查看构建效果

其他问题

每次安装Jenkins都能有不同的惊喜

以下是整理的一些问题

Q:本机运行时JDK无法下载,提示连接超时或无此文件夹等问题

A:在JDK安装步骤选择image-20211227153617646

解压文件方式进行安装,这里使用了Java I tell you-爪哇我话你知 (injdk.cn)代理下载JDK,如果还是提示找不到目录

则使用

// 进入jenkins容器
docker exec -it Jenkins bash 

// 跳转到jdk安装目录
cd  /var/jenkins_home/tools/hudson.model.JDK/   
进入目录,将目录名称重命名为上图中解压目录的名称,例如我这里是myjdk
则执行mv jdk-17.0.1/ myjdk

Q:构建镜像时提示无法访问docker.sock

A: 将宿主机中的docker.sock设置权限为任意用户可访问(即777),或者不使用宿主机的docker,自己自定义jenkins镜像,安装docker服务