深入浅出DevOps:Jenkins实战之CI

? 作者: 俗世游子【谢先生】。 8年开发3年架构。专注于Java、云原生、大数据等领域技术。

? 成就: 从CRUD入行,负责过亿级流量架构的设计和落地,解决了千万级数据治理问题。

? 同名社区:​​51CTO​​​、 掘金​、​​gitee​​​。

? 清单: ​​​goku-framework​​​、​​【更新中】享阅读II​

前言

我们先来罗列一下我们目前已经处理好的工具集

  • Git&GitLab
  • Maven
  • Jenkins
  • Docker

那好,本章就到了最最激动人心的时刻,就是通过这些来上手Jenkins,通过一个实际的小栗子将整个CI流程处理完成

环境规划

这里先来规定一下环境,一定要保证以下两点:

  1. 保证GitLab,Jenkins是能够正常访问到的
  2. 至少还需要准备一台2G内存的机器,机器上要安装了Docker环境(虚拟机就可以,土豪例外),用来处理SpringBoot程序的执行

机器IP

端口

描述

192.168.10.200

88

GitLab

192.168.10.200

8080

Jenkins

192.168.10.201

8080

SpringBoot服务

基础配置

配置Jenkins中的Maven和JDK

配置Maven

在关于Jenkins的基础介绍中,我们已经在宿主机配置过Maven,但是由于Jenkins是基于Docker方式部署的,容器内部无法直接使用宿主机上的Maven,所以我们需要进行一些额外操作

  • 将Maven安装包整个复制到Jenkins的挂载目录中

cd /usr/local/
cp -rp maven/ /opt/jenkins

挂载目录和容器内部是共享的,所以在容器内部就已经有了maven这个目录

# 进入到jenkins容器内部
docker exec -it jenkins bash
# /var/jenkins_home/ 是jenkins真正存放数据的位置
cd /var/jenkins_home/

深入浅出DevOps:Jenkins实战之CI

那么我们进入到​​系统管理>全局工具配置​​,进行相关配置

深入浅出DevOps:Jenkins实战之CI

在最下面能找到Maven的配置项,点击Maven安装能够出现配置窗口

深入浅出DevOps:Jenkins实战之CI

这里注意不要选择自动安装,根据如下方式选择我们配置的Maven

Q:为什么MAVEN_HOME下的地址是 /var/jenkins_home* *A:这是因为Jenkins采用容器化方式搭建,配置的路径自然得是容器内部的地址,而容器内部的数据目录在​​/var/jenkins_home​​​下,因而maven这里配置 ​​/var/jenkins_home/maven​​下

深入浅出DevOps:Jenkins实战之CI

保存之后,Maven就配置完成了。

配置JDK

JDK的配置和上一步是一样的流程,这里就不多说了。本人项目采用的是Java 15开发的,​​下载JDK15​​的版本,配置完成之后就是这个样子的

深入浅出DevOps:Jenkins实战之CI

Jenkins任务

那接下来我们就开始创建新的任务。点击菜单栏中新建任务出现如下图中的页面,这里用来配置任务名称和任务风格,我们就选择第一个自由风格就好

深入浅出DevOps:Jenkins实战之CI

接下来就要注意几个关键点:

源码管理

深入浅出DevOps:Jenkins实战之CI

项目源码肯定是从搭建好的GitLab上获取到的,Jenkins本身有Git插件,可以通过项目地址和登录账户将项目从远程仓库克隆到本地,所以我们这里只要配置好远程仓库地址和登录账号就可以了

还有一点一定要注意,在GitLab上已经没有了master分支,统一全部为main分支。所以一定要记得修改Branches to build位置的分支

Credentials

默认情况下Credentials的位置是没有选项的,需要点击旁边的添加进行操作,点击会出现如下弹框,然后根据对应的信息输入相关内容即可

深入浅出DevOps:Jenkins实战之CI

构建

构建方式我们肯定选择的是Maven方式,点击增加构建步骤,在出现的选项中选择调用顶部Maven目标

深入浅出DevOps:Jenkins实战之CI

而我们在这里看到的maven就是上一步配置的全局工具,而目标那一栏就和常规的maven操作是一样的

深入浅出DevOps:Jenkins实战之CI

接下来点击保存,我们就先验证一下这个操作操作

立即构建

点击菜单中立即构建,会在下方出现每次构建的历史,随后在构建历史中出现构建过程中的进度条,点击进度条会进入到控制台输出页面,这里会实时展示构建的日志,很是智能

深入浅出DevOps:Jenkins实战之CI

控制台日志
  1. 首先是通过git将项目克隆到本地的日志

深入浅出DevOps:Jenkins实战之CI

  1. 其次是整个项目构建的过程,这里由于本人事先实验过,所以没有出现下载依赖的过程,大家在首次构建的时候会出现下载依赖的过程,这属于正常现象

深入浅出DevOps:Jenkins实战之CI

验证结果

随后我们进入到容器内部,进入到日志中的目录结构中查看是否存在构建后的jar包

docker exec -it jenkins bash 
cd /var/jenkins_home/workspace/Devops_App/target

或者也可以在挂载目录下验证下,都是同样的结果

cd /opt/jenkins/workspace/Devops_App/target

深入浅出DevOps:Jenkins实战之CI

这样说明我们上面的流程是正常的。

推送到目标服务器

当我们的程序被打包成功之后,我们就要准备开始执行当前程序。我们已经准备了一台服务器,用来执行当前程序。

那么我们接下来的难点就是如何将Jenkins打包好的程序推送到目标服务器上并开始执行。

Publish over SSH

还记得当时推荐的插件 ​​Publish over SSH​​ 吧,它就是做这个工作的。

现在我们从 ​​系统管理 > 全局配置​​中找到配置目标服务器的位置

深入浅出DevOps:Jenkins实战之CI

到这里我们就开始配置目标服务器

深入浅出DevOps:Jenkins实战之CI

以下需要填写远程服务器的相关信息,这里需要非常注意的是

  • Remote Directory下的目录必须在目标服务器上存在,否则测试链接无法成功

深入浅出DevOps:Jenkins实战之CI

选中当前选项,可以根据需要选择密码登录或者秘钥登录

深入浅出DevOps:Jenkins实战之CI

推送到目标服务器

我们继续回到任务的配置页面,选择构建后操作,从中选中Send build artifacts over SSH,配置要推送过去的文件立即构建就能看到效果

深入浅出DevOps:Jenkins实战之CI

Source files 是支持推送多文件的,中间采用英文逗号分割

深入浅出DevOps:Jenkins实战之CI

细心的大家肯定能发现在日志中会多出这么几条日志,这里就是推送文件的日志,接下来我们再去目标服务器上看看

深入浅出DevOps:Jenkins实战之CI

能够看到,已经完美的成功了

深入浅出DevOps:Jenkins实战之CI

构建镜像并执行

那接下来我们就要开始在目标服务器上执行程序了,我们基于Docker来运行服务,所以:

第一步: 编写一个Dockerfile

# 自制基于JDK 15的基础镜像
FROM registry.cn-beijing.aliyuncs.com/mr_sanq/base_repo:15.0.2_7

# -e JAVA_OPS=
ENV JAVA_OPS=""
# 工作目录,docker exec 进入后的目录
WORKDIR /opt/apps

# 将目标jar添加到工作目录
ADD target/*.jar $WORKDIR/app.jar
# 对外暴露端口
EXPOSE 8080

# 运行
ENTRYPOINT ["sh","-c","java $JAVA_OPS -jar $WORKDIR/app.jar"]
第二步:改造推送配置

多文件如果不在同一个目录下,那么是无法指定移除前缀的

这里重点来看Exec command,在这里我们可以执行相关命令或者执行shell脚本,就相当于我们通过远程连接工具进行的操作

cd /opt/app/${JOB_NAME}
docker build -t ${JOB_NAME}:v0.0.${BUILD_NUMBER} .
docker container stop ${JOB_NAME} && docker container rm ${JOB_NAME}
docker run -d -p 8080:8080 --name ${JOB_NAME} ${JOB_NAME}:v0.0.${BUILD_NUMBER}

更多关于Jenkins在构建的变量可以通过点击对应Jenkins environment variables的链接进行查看

深入浅出DevOps:Jenkins实战之CI

第三步:验证结果

能够发现在目标服务器上已经成功运行

深入浅出DevOps:Jenkins实战之CI

最后

本章虽然介绍性的内容不多,但是内容全在一步一步的操作中,大家可以按照这个流程,赶快让自己的项目在Jenkins上执行起来吧!!

过往内容

​深入浅出DevOps:DevOps核心思想​

​深入浅出DevOps:版本控制Git&Gitlab​

​深入浅出DevOps:持续集成工具Jenkins​

发表评论

相关文章