Jenkins 自动化部署 SpringBoot 项目配置

Jenkins 自动化部署 SpringBoot 项目配置

文章目录

  • Jenkins 自动化部署 SpringBoot 项目配置
  • 前言
  • 正文
    • 1. 环境准备
      • 1.1 安装 Java
        • 1.1.1 卸载 OpenJDK
        • 1.1.2 下载 Java 8 压缩包
        • 1.1.3 设置环境变量
      • 1.2 安装 Maven
        • 1.2.1 下载 maven
        • 1.2.2 配置环境变量
        • 1.2.3 maven 源 & 本地仓库配置
      • 1.3 安装 Git
      • 1.4 安装 Jenkins
        • 1.4.1 下载 Jenkins
        • 1.4.2 Jenkins 启动配置
        • 1.4.3 启动 Jenkins 服务
      • 1.5 安装 Docker
    • 2. Jenkins 流水线配置
      • 2.1 初始化配置
      • 2.2 配置本地工具
        • 2.2.1 JDK 配置
        • 2.2.2 Git 路径
        • 2.2.3 Maven 配置
      • 2.3 配置凭证
        • 2.3.1 Github 用户凭证
        • 2.3.2 Github Webhook 访问 Token
      • 2.4 创建 SpringBoot 部署任务
        • 2.4.1 基本信息
        • 2.4.2 仓库源码
        • 2.4.3 构建触发时机
        • 2.4.4 具体构建任务步骤
        • 2.4.5 运行构建任务
  • 结语
  • 其他资源
    • 参考连接
    • 完整代码示例

前言

今天带大家来配置并部署一个 jenkins 服务来实现开发流程的 CI/CD,本篇就不做过多的解释了,主要是阐述操作流程

下面在命令行中看到 [root@remote]% 开头表示在服务器的命令行环境下,$ 开头则是本地的命令行

正文

1. 环境准备

1.1 安装 Java

如果你(其实是说我自己啦hh)之前是使用 yum 安装 Java,那你也有可能不小心安装到了 open-jdk 的旧版本,然而我们还是更推荐安装 Oracle 上比较完整的 JDK 版本

  • 两者者的差异看这里:https://www.cnblogs.com/sxdcgaq8080/p/7487369.html

1.1.1 卸载 OpenJDK

卸载 open-jdk 的步骤比较特殊

先查找已安装的相关包

[root@remote]% rpm -qa | grep openjdk

接下来把所有相关包都删了(对每一个包替换下面的 pkg-name 一个一个删干净)

[root@remote]% rpm -e --nodeps [pkg-name]

1.1.2 下载 Java 8 压缩包

  • Oracle 上的 Java8 JDK 安装路径:https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html

Jenkins 自动化部署 SpringBoot 项目配置_第1张图片

我们要选的是这个 linux64 位的 tar.gz 版本

下载下来之后,将其上传到服务器的 /usr/local/java 目录下,并进行解压缩

$ scp jdk-8u291-linux-x64.tar.gz root@remote:/usr/local/java/
$ ssh remote
[root@remote ~]% cd /usr/local/java
[root@remote java]% tar -xzvf jdk-8u291-linux-x64.tar.gz

Jenkins 自动化部署 SpringBoot 项目配置_第2张图片

1.1.3 设置环境变量

接下来配置一下服务器上的 java 环境变量,也就是大家耳熟能详的 JAVA_HOME

[root@remote]% vim ~/.bash_profile

在里面添加两个环境变量

export JAVA_HOME=/usr/local/java/jdk1.8.0_291
export PATH=$PATH:$JAVA_HOME/bin

然后使用 source 使其生效

[root@remote]% source ~/.bash_profile

设置好之后检查一下 java 命令的版本

[root@remote]% java -version

Jenkins 自动化部署 SpringBoot 项目配置_第3张图片

看到上面的输出表示配置正确啦

1.2 安装 Maven

第二部分我们先来安装一下 maven,后面打包 springboot 的时候会用到

1.2.1 下载 maven

首先是去 apache 上下载 maven 的可运行包

  • apache 下载链接:https://maven.apache.org/download.cgi

Jenkins 自动化部署 SpringBoot 项目配置_第4张图片

版本倒是无所谓,反正我们只是需要这个包而已

一样下载下来之后先上传到服务器上(路径 /usr/local/maven),然后解压缩

$ scp apache-maven-3.8.2-bin.tar.gz root@remote:/usr/local/maven/
$ ssh remote
[root@remote ~]% cd /usr/local/java
[root@remote maven]% tar -xzvf apache-maven-3.8.2-bin.tar.gz

Jenkins 自动化部署 SpringBoot 项目配置_第5张图片

1.2.2 配置环境变量

一样 maven 也要配置一下环境变量,才能使用 mvn 指令

[root@remote]% vim ~/.bash_profile

加入下面两行

export MAVEN_HOME=/usr/local/maven/apache-maven-3.8.2
export PATH=$PATH:$MAVEN_HOME/bin

生效之后查看命令是否正常运行

[root@remote]% source ~/.bash_profile
[root@remote]% mvn -v

Jenkins 自动化部署 SpringBoot 项目配置_第6张图片

1.2.3 maven 源 & 本地仓库配置

接下来我们需要修改一下 maven 的默认配置

[root@remote]% vim /usr/local/maven/apache-maven-3.8.2/conf/settings.xml
  • 配置 maven 源仓库(使用阿里源)

Jenkins 自动化部署 SpringBoot 项目配置_第7张图片

标签下加入下面这段

    <mirror>
      <id>alimavenid>
      <name>aliyun mavenname>
      <url>http://maven.aliyun.com/nexus/content/groups/public/url>
      <mirrorOf>centralmirrorOf>
    mirror>
  • 指定本地仓库位置(资源下载目录)

Jenkins 自动化部署 SpringBoot 项目配置_第8张图片

在接近 setting 顶部的地方找到 ,加入下面这段

  <localRepository>/usr/local/maven/repositorylocalRepository>
  • 指定 JDK 版本

Jenkins 自动化部署 SpringBoot 项目配置_第9张图片

找到 加入下面这段

    <profile>
      <id>jdk-1.8id>

      <activation>
        <jdk>1.8jdk>
      activation>
      
      <properties>
        <maven.compiler.source>1.8maven.compiler.source>
        <maven.compiler.target>1.8maven.compiler.target>
        <maven.compiler.compilerVersion>1.8maven.compiler.compilerVersion>
      properties>
    profile>

到此为止就配置好啦~

1.3 安装 Git

由于待会我们要建设的工作流是使用 jenkins 拉取 Github 的代码到本地然后进行打包后部署,所以 git 工具也是不能少

[root@remote]% yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker

我也不知道是不是这些工具其实,都装一装hh,下面这个才是 git 其实;最后查看一下版本就行了

[root@remote]% yum install git
[root@remote]% git --version

Jenkins 自动化部署 SpringBoot 项目配置_第10张图片

版本低一些也无所谓,能用就行hh(git 应该也不会低到哪里去啦哈哈)

1.4 安装 Jenkins

第四个就是我们的主角啦 - Jenkins 老爷子

1.4.1 下载 Jenkins

这次我们先直接使用 yum 来安装 jenkins,官方其实更推荐在 docker 容器内进行部署(不过 docker 目录映射的部分博主还没搞很懂,先这样玩hh)

[root@remote]% $ wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
[root@remote]% $ rpm --import http://pkg.jenkins.io/redhat-stable/jenkins.io.key
[root@remote]% $ yum install -y jenkins

依次运行上面几个指令直到 Completed,就算是安装完成啦

1.4.2 Jenkins 启动配置

接下来我们到 /etc/sysconfig/jenkins 内进行一些启动相关的配置

[root@remote]% vim /etc/sysconfig/jenkins
  • 修改启动端口

由于我们是在本地启动,还是不要占用 8080 这个热门的 tomcat 端口,改成 8900

Jenkins 自动化部署 SpringBoot 项目配置_第11张图片

  • 增加运行内存

接下来是由于 jenkins 执行任务的时候还是比较耗内存的,我们也可以在这里先配置好给他更多的启动可用内存

Jenkins 自动化部署 SpringBoot 项目配置_第12张图片

找到 JENKINS_JAVA_OPTIONS 的选项,改成下面这句(其实就是加上后面几个启动参数)

JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Xms1024m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m"
  • 修改权限

由于之后我们在 jenkins 内进行自动化部署的时候会使用到 docker 指令,然而可能存在权限不足的问题,因此我们可以把启动权限改成 root

Jenkins 自动化部署 SpringBoot 项目配置_第13张图片

同时修改一下用户组

[root@remote]% gpasswd -a jenkins root

1.4.3 启动 Jenkins 服务

都配置好了之后我们就可以来启动 Jenkins 服务了,顺便检查一下启动状态

[root@remote]% systemctl start jenkins
[root@remote]% systemctl status jenkins

Jenkins 自动化部署 SpringBoot 项目配置_第14张图片

1.5 安装 Docker

关于 Docker 的安装前一篇说过啦,自己去看

传送门:SpringBoot 部署: 项目打包 & 手动部署到阿里云服务器上 #6.1 Docker 安装

2. Jenkins 流水线配置

安装安装了老半天,终于都搞好了,接下来打开 http://[your-ip]:8900/ 开始正式的体验 jenkins 啦(记得改成你的 ip 啊)

2.1 初始化配置

刚开的时候应该是从这个页面开始

Jenkins 自动化部署 SpringBoot 项目配置_第15张图片

嗯人家也说的够清楚了,去 /var/jenkins_home/secrets/initialAdminPassword 找你的密码

[root@remote]% cat /var/jenkins_home/secrets/initialAdminPassword

注意如果你是使用 docker 安装的话可以试试

[root@remote]% docker logs [Container ID]

从标准输出来找到密码

进去之后选下面左边的,安装推荐的插件组就好啦

Jenkins 自动化部署 SpringBoot 项目配置_第16张图片

Jenkins 自动化部署 SpringBoot 项目配置_第17张图片

等到进度条跑完之后,是设置管理员用户密码,还是要保管好,忘记密码还是挺麻烦的哈

Jenkins 自动化部署 SpringBoot 项目配置_第18张图片

设置好之后他会给你一个重启按钮,接下来就进入到登陆页面啦

Jenkins 自动化部署 SpringBoot 项目配置_第19张图片

登陆之后就是熟悉的首页啦

Jenkins 自动化部署 SpringBoot 项目配置_第20张图片

2.2 配置本地工具

接下来 jenkins 是需要使用本地的 git、jdk、maven 等工具,所谓也需要配置一下路径,选择 管理 Jenkins > Global Tool Configuration

Jenkins 自动化部署 SpringBoot 项目配置_第21张图片

2.2.1 JDK 配置

首先是 JDK 的 JAVA_HOME 填上,也就是与系统上环境变量相同的路径就行了

[root@remote]% echo $JAVA_HOME

Jenkins 自动化部署 SpringBoot 项目配置_第22张图片

2.2.2 Git 路径

第二个是 Git 路径

[root@remote]% which git

Jenkins 自动化部署 SpringBoot 项目配置_第23张图片

2.2.3 Maven 配置

第三个是 Maven 路径的配置

[root@remote]% echo $MAVEN_HOME

Jenkins 自动化部署 SpringBoot 项目配置_第24张图片

2.3 配置凭证

初始化好 jenkins 之后,先别急着创建流水线。我们先帮系统加上两个需要用到的凭证

Jenkins 自动化部署 SpringBoot 项目配置_第25张图片

Jenkins 自动化部署 SpringBoot 项目配置_第26张图片

Jenkins 自动化部署 SpringBoot 项目配置_第27张图片

Jenkins 自动化部署 SpringBoot 项目配置_第28张图片

2.3.1 Github 用户凭证

第一个凭证我们先要在 jenkins 里面注册我们的 Github 用户,这样才可以正常的 pull 代码

首先先在远程机器上创建 ssh key

[root@remote]% ssh-keygen -t rsa

创建好之后第一步先把公钥加入到你的 Github 账号里面

点击用户头像 > Setting

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-043cPkdL-1632889649872)(https://picures.oss-cn-beijing.aliyuncs.com/img/jenkins_deploy_springboot_26_Github_sshkey_1.png)]

找到 SSH Key 的选项 > New SSH key

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GaNo6h2m-1632889649873)(https://picures.oss-cn-beijing.aliyuncs.com/img/jenkins_deploy_springboot_27_Github_sshkey_2.png)]

接下来将你本地上的 ~/.ssh/id_rsa.pub 也就是公钥贴到 key 的部分,然后取一个名字(title)

[root@remote]% cat ~/.ssh/id_rsa.pub

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0RB6O3Ql-1632889649874)(https://picures.oss-cn-beijing.aliyuncs.com/img/jenkins_deploy_springboot_28_Github_sshkey_3.png)]

接下来就可以在 jenkins 上的 Add Credential 中选择 SSH Username with private key,然后在下面的 private key 选择 Add 然后填入 ~/.ssh/id_rsa 的私钥

[root@remote]% cat ~/.ssh/id_rsa

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uEKjc3iV-1632889649875)(https://picures.oss-cn-beijing.aliyuncs.com/img/jenkins_deploy_springboot_25_jenkins_credential_Github_user.png)]

2.3.2 Github Webhook 访问 Token

第二种凭证则是 Webhook 用到的,先到 Github 账户上 > Settings > Developer Settings > Personal Access Tokens > Generate New Token 创建一个可访问 token

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r87ZdnWQ-1632889649877)(https://picures.oss-cn-beijing.aliyuncs.com/img/jenkins_deploy_springboot_29_Github_webhook_1.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LDVQiHMq-1632889649878)(https://picures.oss-cn-beijing.aliyuncs.com/img/jenkins_deploy_springboot_30_Github_webhook_2.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kWNXSdpg-1632889649880)(https://picures.oss-cn-beijing.aliyuncs.com/img/jenkins_deploy_springboot_31_Github_webhook_3.png)]

接下来则是把时间设为 No expired,然后勾选 reporepo_hook 两项

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hm7UIFLA-1632889649881)(https://picures.oss-cn-beijing.aliyuncs.com/img/jenkins_deploy_springboot_32_Github_webhook_4.png)]

创建完成之后把 token 内容记好,接下来在 jenkins 里面再创建一个新的 credential,选择 Secret text,然后将 token 填在 Secret 的栏位

Jenkins 自动化部署 SpringBoot 项目配置_第29张图片

2.4 创建 SpringBoot 部署任务

完成凭证之后就可以来创建任务啦,到主面板选择 创建任务(新建专案)

Jenkins 自动化部署 SpringBoot 项目配置_第30张图片

想一个名字之后,选择 Free Style 风格

Jenkins 自动化部署 SpringBoot 项目配置_第31张图片

2.4.1 基本信息

接下来先来填任务的基本信息,把 Github 仓库的路径体填上

Jenkins 自动化部署 SpringBoot 项目配置_第32张图片

2.4.2 仓库源码

后续我们需要透过 jenkins 自己操作 git 来下载源码,选择 git,填上仓库路径(用来 git clone 的那个哦),然后选择刚刚创建过的 Github 账户的凭证,以及想要部署的分支名称

Jenkins 自动化部署 SpringBoot 项目配置_第33张图片

2.4.3 构建触发时机

另外我们可以设定构建的触发时机,平常可以使用手动点击建置一键部署,这边我们再额外加上刚刚创建的 Github webhook

同时别忘了到 Github 的仓库内开始 webhook:选择 Settings > Webhooks > Add Webhook,然后填入 jenkins 的路径(http://[youre-ip]:8900/github-webhook/),然后选择 json

Jenkins 自动化部署 SpringBoot 项目配置_第34张图片

2.4.4 具体构建任务步骤

最后一部分就是具体的构建任务啦,假设我们的项目已经存在如下的 Dockerfile 配置

# Docker image for springboot file run
# VERSION 0.0.1
# Author: superfree
# environment
FROM java:8
# author
MAINTAINER superfree 
# volume 宗卷
VOLUME /tmp

ADD target/logger-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

这时候我们就可以创造两个构建步骤

  1. 第一个是调用顶层的 maven 指令进行项目打包(图片里面错了,不用加 maven 指令)
clean package
  1. 第二步则是编写 docker 运行脚本
docker stop youxian-logger-pre ||true
docker rmi youxian-logger-pre ||true
docker build -t youxian-logger-pre .
docker run --rm --name youxian-logger-pre -d -p 8081:8081 youxian-logger-pre

Jenkins 自动化部署 SpringBoot 项目配置_第35张图片

2.4.5 运行构建任务

最后去到任务里面点一下构建就能等待结果啦

Jenkins 自动化部署 SpringBoot 项目配置_第36张图片

结语

整体来说其实配置是不难的,就是很繁琐,还会遇到一堆奇奇怪怪的问题,而且 Jenkins 消耗的资源还是挺多的,我用的阿里云 1 核 2 G 的一次运行 mysql + docker + jenkins 有点扛不住,内存平均消耗都在 90% 以上hh,之后看看能不能尝试部署到容器内来进行统一的内存管理调度

其他资源

参考连接

Title Link
yum安装java的位置_Centos 7 查看使用YUM 安装的JDK路径并配置JAVA_HOME https://blog.csdn.net/weixin_32375369/article/details/114555129
Centos7安装maven https://www.cnblogs.com/116970u/p/11211963.html
Downloading Apache Maven 3.8.2 https://maven.apache.org/download.cgi
CentOS压缩与解压 https://blog.csdn.net/shumeigang/article/details/80694719
《阿里云服务器搭建》------ 安装Git https://blog.csdn.net/tomatocc/article/details/83933041
安装Jenkins - 安装Jenkins https://www.jenkins.io/zh/doc/book/installing/
centos下搭建Jenkins持续集成环境(安装jenkins) https://www.cnblogs.com/loveyouyou616/p/8714544.html
Public key for jenkins-2.288-1.1.noarch.rpm is not installed的解决方法 https://blog.csdn.net/u010662249/article/details/115896468
jenkins credentials & git ssh 认证 https://blog.csdn.net/gw569453350game/article/details/51911179
怎么样使用yum来安装、卸载jdk https://www.cnblogs.com/dingjiaoyang/p/5102827.html
【JDK和Open JDK】平常使用的JDK和Open JDK有什么区别 https://www.cnblogs.com/sxdcgaq8080/p/7487369.html
【Linux】CentOS7下安装JDK详细过程 https://www.cnblogs.com/sxdcgaq8080/p/7492426.html
Java SE 8 Archive Downloads - Oracle https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html
Jenkins安装之踩坑记录 https://blog.csdn.net/qq_39884410/article/details/100073607
Jenkins用户授予root权限 https://www.cnblogs.com/heyongboke/p/11996774.html
解决jenkins中运行docker无权限问题 以root用户运行jenkins中shell命令 https://blog.csdn.net/qq_39507276/article/details/103315466
docker常规操作——启动、停止、重启容器实例 https://www.cnblogs.com/personblog/p/10762875.html
jenkins+docker实现自动编译、打包、构建镜像、容器部署 https://blog.csdn.net/xiaoxiangzi520/article/details/88842200/
docker 权限问题 Got permission denied while trying to connect to the Docker daemon socket at 。。。 https://blog.csdn.net/u011337602/article/details/104541261
使用Jenkins+docker 部署springboot项目 https://blog.csdn.net/qq_38157516/article/details/90139120
使用Jenkins配置SpringBoot的自动化构建 https://blog.csdn.net/xlgen157387/article/details/78733729
使用Jenkins配置Git+Maven的自动化构建 https://blog.csdn.net/xlgen157387/article/details/50353317
bash忽略错误继续执行_忽略Shell脚本中的特定错误 https://blog.csdn.net/weixin_39614754/article/details/111854550
SpringBoot升级2.4.0所出现的问题:When allowCredentials is true, allowedOrigins cannot contain the specia https://blog.csdn.net/jxysgzs/article/details/110818712
IllegalArgumentException: When allowCredentials is true, allowedOrigins cannot contain the special v https://blog.csdn.net/weixin_51579730/article/details/111142073
手把手教你使用 Jenkins 配合 Github hook 持续集成 https://blog.csdn.net/weixin_38320674/article/details/110412976
Jenkins内存溢出的处理方法 https://www.cnblogs.com/EasonJim/p/6394434.html
BUILD STEP ‘INVOKE TOP-LEVEL MAVEN TARGETS’ MARKED BUILD AS FAILURE FINISHED解决方案 https://www.freesion.com/article/8213184540/
Build step ‘Invoke top-level Maven targets’ marked build as failure Finished解决 https://www.cnblogs.com/yangyuke1994/p/10592847.html

完整代码示例

代码都在过程中啦,项目自己搞一个吧

你可能感兴趣的:(Deployment,jenkins,java,spring,boot,docker,ci/cd)