当前位置: 首页 > news >正文

Jenkins入门:从搭建到部署第一个Springboot项目(踩坑记录)

本文讲述在虚拟机环境下(模拟服务器),使用docker方式搭建jenkins,并部署一个简单的Springboot项目。仅记录关键步骤和遇到的坑

 

目录

一、环境准备和基础工具安装

1. 环境

2. yum安装

3. docker安装

 4. 内网穿透工具安装natapp

二、jenkins安装和配置

2.0 安装jdk和maven

2.1 拉取镜像,lts长期稳定的最新版

2.2 运行jenkins docker镜像:(注意工作目录挂载)

2.2 使用docker-compose启动jenkins (推荐)

2.3 配置jenkins

三. jenkins构建第一个Springboot项目

3.1 创建任务

3.2 源码配置

​3.3 构建触发器

​3.4 构建步骤

3.5 测试构建

3.6 测试Gitee提交自动构建

四、运行项目

4.1 Dockerfile

4.2 Build Steps配置


一、环境准备和基础工具安装

1. 环境

系统环境为本机vmware创建的Ubuntu24.04

2. yum安装

Ubuntu24.04 yum安装-CSDN博客

3. docker安装

Ubuntu安装Docker和Docker Compose-CSDN博客

 4. 内网穿透工具安装natapp

因为需要使用gitee的WebHook自动构建任务,所以需要公网地址。选用natappa免费,但是域名可能会变化,运行时选择config.ini方式运行,映射8080端口,启动后就可以用域名访问jenkins.

后台运行:

(./natapp &)

查看日志: 

参考:NATAPP1分钟快速新手图文教程 - NATAPP-内网穿透 基于ngrok的国内高速内网映射工具

二、jenkins安装和配置

注意:安装jenkins前先安装jdk和maven,因为docker启动时要挂载jdk、maven目录,否则在jenkins配置jdk和maven时会报错。安装时尽量安装到用户目录,包括maven仓库地址的配置,否则可能会有权限问题。

2.0 安装jdk和maven

上传jdk和maven:

# 将本地下载的jdk和maven上传到服务器用户目录
scp apache-maven-3.8.8-bin.zip root@124.71.152.254:/root/soft/
scp jdk-8u202-linux-x64.tar.gz root@124.71.152.254:/root/soft/
# 解压缩
tar -zxvf jdk-8u202-linux-x64.tar.gz
unzip apache-maven-3.8.8-bin.zip

 配置环境变量、设置立即生效:

vim /etc/profile# 末尾添加
export JAVA_HOME=/root/soft/jdk1.8.0_202
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
export  MAVEN_HOME=/root/soft/apache-maven-3.8.8
export PATH=$PATH:$MAVEN_HOME/bin# 立刻生效
source /etc/profile

验证:

mvn -v
java -version

配置maven镜像源为阿里云,配置仓库 

mkdir repo
#进入maven目录
vim ./config/setting.xml<localRepository>/root/soft/repo</localRepository><mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf>        
</mirror>

参考:Linux开发环境搭建(二)之安装JDK和Maven_amazon linux2 安装java-CSDN博客

2.1 拉取镜像,lts长期稳定的最新版

docker pull jenkins/jenkins:lts

注意:jenkins的版本选择尽量提前确定好,目前lts最新版本为 > 2.346,官方提示2.346以后最低支持JDK11,也就是如果是JDK8的项目是会部署失败的(不过后面有插件可以解决解);选择低版本的jenkins可能会有插件安装失败的问题,所以版本要谨慎选择。

也可以安装blueocean版本,界面更加直观

docker pull jenkinsci/blueocean

jenkinsci/blueocean:这是一个专门为Jenkins设计的用户界面,旨在提供更直观、更现代的持续集成和持续部署(CI/CD)体验。Blue Ocean镜像通常包含Jenkins的长期支持(LTS)版本,并且已经预装了Blue Ocean插件,这些插件提供了一套全新的用户界面和交互方式,使得构建、查看和管理Jenkins项目变得更加简单和直观。

海洋版最新版本太低,初始化装插件时候很多都安装失败,建议装传统 lts版本,然后装海洋插件。 

2.2 运行jenkins docker镜像:(注意工作目录挂载)

docker run --name jenkins -u root --rm -d -p 8080:8080 -p 50000:50000 
-v /var/run/docker.sock:/var/run/docker.sock 
-v /home/user/jdk1.8.0_202/bin/java:/home/user/jdk1.8.0_202/bin/java 
-v /home/user/jdk1.8.0_202:/home/user/jdk1.8.0_202 
-v /home/user/apache-maven-3.8.8:/home/user/apache-maven-3.8.8 
-v /var/jenkins_home:/var/jenkins_home jenkins/jenkins:lts

2.2 使用docker-compose启动jenkins (推荐)

新建docker-compose.yml,注意挂载maven地址和jdk地址为自己的地址

vim docker-compose.yml
version: "3.8"
services:jenkins:image: jenkins/jenkins:ltscontainer_name: jenkinsrestart: alwaysprivileged: trueuser: rootvolumes:- /var/run/docker.sock:/var/run/docker.sock- /var/jenkins_home:/var/jenkins_home- /root/soft:/root/soft- /usr/bin/docker:/usr/bin/docker- /etc/docker/daemon.json:/etc/docker/daemon.jsonports:- "8080:8080"- "50000:50000"environment:TZ: Asia/Shanghai

 后台启动:

docker-compose up -d

 报错1:docker-compose启动报错:HTTPConnection.request() got an unexpected keyword argument ‘chunked‘

解决:安装依赖包,忽略警告(否则会报错:Cannot uninstall 'urllib3'. It is a distutils installed project and thus we cannot accurately determ

sudo pip install --ignore-installed 'urllib3<2'
报错2:执行报错pip install:error: externally-managed-environment

解决:强制删除此警告:

sudo mv /usr/lib/python3.x/EXTERNALLY-MANAGED /usr/lib/python3.x/EXTERNALLY-MANAGED.bk

注意python版本号写你自己的别直接抄,不知道到底是多少可以进/user/lib看看:

find /usr/lib/ -type d -name "*python*"

参考:解决运行pip install时提示错误:error: externally-managed-environment-CSDN博客 

2.3 配置jenkins

插件安装

安装完成后访问地址-> http://{部署Jenkins所在服务IP}:8080

此处会有几分钟的等待时间。

先点击安装推荐的插件,然后安装其他插件:

  • 安装Maven Integration
  • 安装Publish Over SSH(如果不需要远程推送,不用安装)
  • 如果使用Gitee 码云,安装插件Gitee(Git自带不用安装)
  • 中文插件:Locale

配置jdk和maven

配置刚才安装的地址

报错:is not a directory on the Jenkins master(but perhaps it exists on some agents

解决:说明启动jekins时没有挂载jdk和maven目录,或者没有目录权限

配置gitee
gitee API令牌配置

去gitee获取令牌

设置时区

否则时间显示不对

jenkins脚本命令行执行:

System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')

参考:Jenkins+Docker 实现一键自动化部署项目!步骤齐全,少走坑路 - 爵岚 - 博客园 (cnblogs.com)

三. jenkins构建第一个Springboot项目

3.1 创建任务

选择自由风格

3.2 源码配置

 3.3 构建触发器

需要去gitee填写

 3.4 构建步骤

clean install -Dmaven.test.skip=true

3.5 测试构建

3.6 测试Gitee提交自动构建

在idea修改代码,可以看到jenkins已经自动构建

问题:

1. WebHook没有生效,gitee测试时候不会自动构建。

后面发现idea提交可以生效能触发自动构建,gitee测试时候显示404

2. 不兼容jdk8的问题,版本号大于2.357时最低兼容jdk11,对jdk8不兼容

解决:不使用maven方式构建; 或者装构建参数的插件,选择jdk8构建,安装 JDK Parameter 插件。

参考:Jenkins升级jdk11后 JAVA项目使用低版本jdk编译的解决办法_jdk低版本编译高版本运行-CSDN博客

新版本Jenkins(Version>2.357)兼容低版本JAVA项目部署_maven projects have to be launched with a java ver-CSDN博客

3. 项目打包报错“Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml

这时候用的spring-boot-maven-plugin插件打包,用idea的maven工具打包没问题,使用命令有问题,后续需要再研究一下。

解决:配置maven-war-plugin插件,如果

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.4.0</version>
</plugin>

参考:踩坑:maven打包失败的解决方式总结_maven打包报错-CSDN博客

四、运行项目

4.1 Dockerfile

在springboot项目根目录新建一个名为Dockerfile的文件,注意没有后缀名,其内容如下:(大致就是使用jdk8,把jar包添加到docker然后运行prd配置文件。详细可以查看其他教程)

# 基于 openjdk:8-jre 为基础镜像进行构建
FROM openjdk:8-jre
# 进入这个容器的目录指定为/app
VOLUME  /app
# 将jar包放入/app目录下,并重新命名为app.jar
ADD target/jenkins-test-0.0.1-SNAPSHOT.war app.war
# 该项目使用的是8090端口,所有需要向外暴漏8090端口,日后才能通过映射的端口去访问这个暴漏的端口
EXPOSE 8090
# ENTRYPOINT 和 CMD 结合使用,ENTRYPOINT固定命令,CMD根据参数的不同 运行不同的jar包(动态参数)
ENTRYPOINT ["java","-jar"]
CMD ["app.war"]
# 相当于 java -jar xxx.jar

4.2 Build Steps配置

配置上层maven调用打包、然后执行shell脚本。

cd /var/jenkins_home/workspace/jenkins-test
docker stop jenkins-test || true
docker rm jenkins-test || true
docker rmi jenkins-test || true
docker build -t jenkins-test:latest .
docker run -d -p 8090:8090 jenkins-test

4.3 点击构建 

问题:

1. jar包启动报错没有主清单属性

解决:将启动类打包进来,不能跳过

2. 运行shell报错,jenkins打包镜像报错 :docker: command not found,但是手动打包镜像没问题

解决:docker运行jenkins时挂载目录写的有问题,修改后就可以了

volumes:- /var/run/docker.sock:/var/run/docker.sock- /var/jenkins_home:/var/jenkins_home- /root/soft:/root/soft #主要是这个(里面有jdk maven 还有docker-compose.yml)- /usr/bin/docker:/usr/bin/docker #这个也需要- /etc/docker/daemon.json:/etc/docker/daemon.json

参考:Jenkins+Docker 实现一键自动化部署项目!步骤齐全,少走坑路 - 爵岚 - 博客园 (cnblogs.com) 

docker-compose 集成Jenkins部署,打包,发布_jenkins打包,发布,部署docker-CSDN博客

成功! 可以通过ip端口访问自己的项目啦~ (*^▽^*)

相关文章:

  • 【NodeJS】npm、yarn、pnpm当前项目设置国内镜像源
  • 【算法】分治:归并排序之LCR 170.交易逆序对的总数(hard)
  • linux脚本工具
  • 【Godot4.3】简单物理模拟之圆粒子碰撞检测
  • 【Java】虚拟机(JVM)内存模型全解析
  • RM服务器研究(一)
  • SpringBoot3.X配置OAuth
  • vLLM (6) - Scheduler BlockSpaceManager
  • 数据结构:栈 及其应用
  • 多元函数微分学基础题
  • 【开源免费】基于SpringBoot+Vue.JS服装销售平台(JAVA毕业设计)
  • 【C++】二义性
  • ffmpeg拉取rtsp网络视频流报错解析
  • 学校周赛(2)
  • 如何在银河麒麟操作系统中查看内存页大小
  • python3.6+scrapy+mysql 爬虫实战
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • JAVA 学习IO流
  • JavaScript 基础知识 - 入门篇(一)
  • javascript从右向左截取指定位数字符的3种方法
  • js面向对象
  • js正则,这点儿就够用了
  • MySQL QA
  • ng6--错误信息小结(持续更新)
  • Odoo domain写法及运用
  • PAT A1017 优先队列
  • PHP的类修饰符与访问修饰符
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • python大佬养成计划----difflib模块
  • Shadow DOM 内部构造及如何构建独立组件
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 关于List、List?、ListObject的区别
  • 前端之Sass/Scss实战笔记
  • 如何用vue打造一个移动端音乐播放器
  • 用element的upload组件实现多图片上传和压缩
  • 终端用户监控:真实用户监控还是模拟监控?
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​2021半年盘点,不想你错过的重磅新书
  • ​Java并发新构件之Exchanger
  • ###C语言程序设计-----C语言学习(6)#
  • #《AI中文版》V3 第 1 章 概述
  • #android不同版本废弃api,新api。
  • #nginx配置案例
  • $ git push -u origin master 推送到远程库出错
  • (3)llvm ir转换过程
  • (7)摄像机和云台
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (笔试题)合法字符串
  • (力扣)1314.矩阵区域和
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (五十)第 7 章 图(有向图的十字链表存储)
  • .NET Core IdentityServer4实战-开篇介绍与规划