从零开始用Jenkins自动构建部署SpringBoot项目

前提条件

  • 一台服务器

建议配置2h4g以上(1h2g的属实有点低了)

  • springboot项目手动用maven打包,且jar包可正常运行

如果你的是多模块项目(如图),需要配置好打包,否则启动失败

jenkins 设置子模块 jenkins多模块部署_jenkins

就像这样的项目,可浏览文章:SpringBoot多模块打包方式

安装教程可看视频:【优极限】最透彻的Jenkins教程,2h打通Jenkins全套教程丨从自动化部署Jenkins从环境配置到项目开发_哔哩哔哩_bilibili

1、安装 ------ 在安装好了docker环境后

docker pull jenkins/jenkins:lts

jenkins 设置子模块 jenkins多模块部署_jenkins_02

2、创建目录

jenkins 设置子模块 jenkins多模块部署_jenkins 设置子模块_03

jenkins 设置子模块 jenkins多模块部署_docker_04

[root@localhost data]# mkdir jenkins_home [root@localhost data]# ls docker jenkins_home

3、启动

jenkins 设置子模块 jenkins多模块部署_jenkins_05

这边如果是虚拟机的话需要开启防火墙的8080端口,服务器的话就在安全组中添加,然后要确保端口没有被占用

docker run -di --name=jenkins -p 8080:8080 -v /data/jenkins_home:/var/jenkins_home jenkins/jenkins:lts

启动失败:

[root@localhost data]# docker logs d6b5baf89d6b touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?

权限:

在我们启动成功后可能会还是访问不到,这时候可能是因为权限不够,直接去开通一下就好了,当然你的也要是这个路径

jenkins 设置子模块 jenkins多模块部署_jenkins_06

chown -R 1000 /data/jenkins_home

再重新启动,等启动工作完毕后

直接访问 ip地址:8080

jenkins 设置子模块 jenkins多模块部署_docker_07

查看容器日志:

docker logs jenkins

这样就能得到我们需要的密码

jenkins 设置子模块 jenkins多模块部署_maven_08

jenkins 设置子模块 jenkins多模块部署_docker_09

将密码放入进去,然后点击继续

方法二:

[root@localhost data]# cd jenkins_home/secrets/ [root@localhost secrets]# ll 总用量 20 drwxr-xr-x 2 www www 29 9月 14 18:45 filepath-filters.d -rw-r----- 1 www www 33 9月 14 18:45 initialAdminPassword -rw-r--r-- 1 www www 32 9月 14 18:45 jenkins.model.Jenkins.crumbSalt -rw-r--r-- 1 www www 256 9月 14 18:45 master.key -rw-r--r-- 1 www www 272 9月 14 18:45 org.jenkinsci.main.modules.instance_identity.InstanceIdentity.KEY -rw-r--r-- 1 www www 5 9月 14 18:45 slave-to-master-security-kill-switch drwxr-xr-x 2 www www 26 9月 14 18:45 whitelisted-callables.d [root@localhost secrets]# cat initialAdminPassword 730edbb8adcd4ae7b58f14ac3ccd001d

Jenkins修改初始密码:Jenkins修改初始密码 - 程序员大本营

5、进入页面后,选择推荐的插件

jenkins 设置子模块 jenkins多模块部署_jenkins 设置子模块_10

jenkins 设置子模块 jenkins多模块部署_jenkins_11

这里可能会出现这个错误,没关系一直点重试就好了,然后就开始下载了,要确保网络通畅哦 耐心等它下载完就好了,时间可能有亿点久

jenkins 设置子模块 jenkins多模块部署_Jenkins_12

全部安装成功后:

jenkins 设置子模块 jenkins多模块部署_jenkins 设置子模块_13

有一些会安装失败(我用的服务器,用虚拟机的由于有墙可能访问不到github)

jenkins 设置子模块 jenkins多模块部署_maven_14

点击重试后

jenkins 设置子模块 jenkins多模块部署_maven_15

大部分都装上了,有几个可能会装不上,到时候可以手动安装,先点确定

然后创建用户

jenkins 设置子模块 jenkins多模块部署_maven_16

下一步,URL为,jenkins的IP:端口

jenkins 设置子模块 jenkins多模块部署_docker_17

插件安装

jenkins 设置子模块 jenkins多模块部署_jenkins_18

搜索插件 ssh(红色代表与jenkins版本不匹配)

jenkins 设置子模块 jenkins多模块部署_maven_19

jenkins 设置子模块 jenkins多模块部署_jenkins_20

jenkins 设置子模块 jenkins多模块部署_Jenkins_21

点击这个按钮安装就好,继续耐心等它安装完,放心这次挺快的

jenkins 设置子模块 jenkins多模块部署_Jenkins_22

安装失败重新安装即可!

安装jdk

全局工具配置

jenkins 设置子模块 jenkins多模块部署_maven_23

点新增JDK,选择版本,登录下oracle账号:2696671285@qq.com Oracle123

jenkins 设置子模块 jenkins多模块部署_jenkins 设置子模块_24

jenkins 设置子模块 jenkins多模块部署_jenkins 设置子模块_25

点击去登陆Oracle账号登录,登录了才能下载jdk

jenkins 设置子模块 jenkins多模块部署_maven_26

输入自己的账号密码

jenkins 设置子模块 jenkins多模块部署_Jenkins_27

账号为up主提供的:【优极限】最透彻的Jenkins教程,2h打通Jenkins全套教程丨从自动化部署Jenkins从环境配置到项目开发_哔哩哔哩_bilibili

jenkins 设置子模块 jenkins多模块部署_jenkins_28

先点击应用能弹出已保存就好了,然后在点击保存

jenkins 设置子模块 jenkins多模块部署_docker_29

之后安装maven(如果你的项目不是maven则安装别的插件)

安装maven

点击保存

jenkins 设置子模块 jenkins多模块部署_jenkins_30

配置ssh

jenkins 设置子模块 jenkins多模块部署_docker_31

搜索 ssh

jenkins 设置子模块 jenkins多模块部署_maven_32

添加ssh的ip和端口 , 点击添加

jenkins 设置子模块 jenkins多模块部署_docker_33

jenkins 设置子模块 jenkins多模块部署_docker_34

添加服务器的账号和密码 如果点击添加没反应,没关系我们点击右上角的用户名添加一个就好了

jenkins 设置子模块 jenkins多模块部署_jenkins_35

jenkins 设置子模块 jenkins多模块部署_jenkins_36

jenkins 设置子模块 jenkins多模块部署_jenkins_37

jenkins 设置子模块 jenkins多模块部署_jenkins 设置子模块_38

jenkins 设置子模块 jenkins多模块部署_jenkins 设置子模块_39

检测连接是否成功

jenkins 设置子模块 jenkins多模块部署_jenkins 设置子模块_40

构建项目

1、新建项目

jenkins 设置子模块 jenkins多模块部署_maven_41

2、输入任务名称,选择maven

没有这个项目则下载maven插件(百度即可)

Maven Integration plugin

jenkins 设置子模块 jenkins多模块部署_jenkins 设置子模块_42

3、设置源码管理

jenkins 设置子模块 jenkins多模块部署_Jenkins_43

记得添加你的gitee账号密码的凭据

4、设置Maven

jenkins 设置子模块 jenkins多模块部署_jenkins 设置子模块_44

设置

clean package

jenkins 设置子模块 jenkins多模块部署_Jenkins_45

然后我们先构建下,等待结束

jenkins 设置子模块 jenkins多模块部署_docker_46

但是maven下载依赖速度太慢,我们可以手动关闭构建,把镜像配置为阿里云镜像

5、修改maven配置

配置文件在你的jenkins数据目录下,例如我的就是:

/data/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation

按照原先方法修改配置文件,把maven远程仓库地址改成阿里云的,这步就不用详细说了吧。

6、重新构建

点击 立即构建

这次下载速度就快了,构建好的jar包目录在:

/data/jenkins_home/workspace/jekins-test/service/target

jekins-test:是任务名称(我创建任务时,少打了个n)

选中查看控制台输出

jenkins 设置子模块 jenkins多模块部署_jenkins_47

根据输出就能看到jar的生成目录

jenkins 设置子模块 jenkins多模块部署_jenkins 设置子模块_48

然后我们启动看看是否正常

cd /data/jenkins_home/workspace/jekins-test/service/target nohup java -jar service-0.0.1-SNAPSHOT.jar > /data/journalism/logs.txt &

构建后自动部署

8160是我的springboot服务端口

netstat -nlp|grep 8081

强制杀死某个端口进程命令,关闭jar包

sudo fuser -k -n tcp 8081

请先把刚才开启的jar包服务关掉

设置构建环境配置,构建后操作(构建前就不用设置,测试过,填了就出现错误)

jenkins 设置子模块 jenkins多模块部署_docker_49

Git提交后自动构建

1、配置URL构建触发器

令牌随便输,URL格式就是下面那个英文说明,根据自己的修改

jenkins 设置子模块 jenkins多模块部署_jenkins_50

2、配置Gitee的WebHooks

我这里用的Gitee(学校网进GitHub很不稳定,就选择Gitee了)

Gitee项目里设置URL和秘钥

为了安全自己写个服务用来访问触发Jenkins构建的URL,不直接输入之前的URL

例如:我用的php,代码在下方

jenkins 设置子模块 jenkins多模块部署_jenkins_51

jenkins 设置子模块 jenkins多模块部署_jenkins 设置子模块_52

3、添加用户token

jenkins 设置子模块 jenkins多模块部署_Jenkins_53

生成,保存token信息

jenkins 设置子模块 jenkins多模块部署_Jenkins_54

修改url,例如我的,根据自己规则设置

http://用户名:token@ip:端口/job/jekins-test/build?token=设置的token

详情访问:通过URL触发Jenkins构建

php代码如下(修改URL和秘钥):

<?php //接收头信息 function em_getallheaders() { foreach ($_SERVER as $name => $value) { if (substr($name, 0, 5) == 'HTTP_') { $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; } } return $headers; } //发送请求 function getSslPage($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_REFERER, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); $result = curl_exec($ch); curl_close($ch); return $result; } $url = "你的URL"; $headers = em_getallheaders(); //是否等于Gitee设置的秘钥 if($headers['X-Gitee-Token'] == "你设置的秘钥"){ //调用 getSslPage($url); echo "ok"; }else{ echo "no"; } print_r($headers['X-Gitee-Token']) ;

4、完成测试

更改代码,push到Gitee

jenkins 设置子模块 jenkins多模块部署_Jenkins_55

Gitee请求成功

jenkins 设置子模块 jenkins多模块部署_jenkins 设置子模块_56

jenkins构建成功

jenkins 设置子模块 jenkins多模块部署_jenkins 设置子模块_57