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

news/2024/11/17 17:38:03/

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

 

目录

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

1. 环境

2. yum安装

3. docker安装

 4. 内网穿透工具安装natapp

jenkins%E5%AE%89%E8%A3%85%E5%92%8C%E9%85%8D%E7%BD%AE-toc" style="margin-left:0px;">二、jenkins安装和配置

2.0 安装jdk和maven

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

jenkins%20docker%E9%95%9C%E5%83%8F%3A%EF%BC%88%E6%B3%A8%E6%84%8F%E5%B7%A5%E4%BD%9C%E7%9B%AE%E5%BD%95%E6%8C%82%E8%BD%BD%EF%BC%89-toc" style="margin-left:80px;">2.2 运行jenkins docker镜像:(注意工作目录挂载)

jenkins%20%EF%BC%88%E6%8E%A8%E8%8D%90%EF%BC%89-toc" style="margin-left:80px;">2.2 使用docker-compose启动jenkins (推荐)

jenkins-toc" style="margin-left:80px;">2.3 配置jenkins

jenkins%E6%9E%84%E5%BB%BA%E7%AC%AC%E4%B8%80%E4%B8%AASpringboot%E9%A1%B9%E7%9B%AE-toc" style="margin-left:0px;">三. 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%E5%AE%89%E8%A3%85%E5%92%8C%E9%85%8D%E7%BD%AE" style="background-color:transparent;">二、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版本,然后装海洋插件。 

jenkins%20docker%E9%95%9C%E5%83%8F%3A%EF%BC%88%E6%B3%A8%E6%84%8F%E5%B7%A5%E4%BD%9C%E7%9B%AE%E5%BD%95%E6%8C%82%E8%BD%BD%EF%BC%89">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

jenkins%20%EF%BC%88%E6%8E%A8%E8%8D%90%EF%BC%89">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博客 

jenkins">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%E6%9E%84%E5%BB%BA%E7%AC%AC%E4%B8%80%E4%B8%AASpringboot%E9%A1%B9%E7%9B%AE">三. 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包启动报错没有主清单属性

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

jenkins%E6%89%93%E5%8C%85%E9%95%9C%E5%83%8F%E6%8A%A5%E9%94%99%C2%A0%3Adocker%3A%20command%20not%20found%EF%BC%8C%E4%BD%86%E6%98%AF%E6%89%8B%E5%8A%A8%E6%89%93%E5%8C%85%E9%95%9C%E5%83%8F%E6%B2%A1%E9%97%AE%E9%A2%98">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端口访问自己的项目啦~ (*^▽^*)


http://www.ppmy.cn/news/1531919.html

相关文章

TCP三次握手四次挥手详解

TCP三次握手建立连接的过程&#xff1a; 一次握手&#xff1a;客户端发送带有 SYN&#xff08;seqx&#xff09;标志的数据包到服务端&#xff0c;然后客户端进入 SYN_SEND 状态&#xff0c;等待服务端的确认。二次握手&#xff1a;服务端收到 SYN 包后&#xff0c;发送带有 S…

根据ip地址查网页怎么查询?

一、通过命令提示符查询查网页&#xff08;Windows系统&#xff09; ①按“WinR”键&#xff0c;打开运营窗口。 ②输入“cmd”“回车”&#xff0c;打开命令提示符窗口。 ③输入“nslookup ip地址”将ip地址换成查询的实际ip地址“回车” ⑤系统返回输入ip地址对应的域名信息…

Webpack和GuIp打包原理以及不同

Webpack打包原理 Webpack的打包原理主要基于模块化的概念&#xff0c;它将应用程序中的所有资源&#xff08;如JS、CSS、图片等&#xff09;视为模块&#xff0c;并根据模块间的依赖关系进行静态分析。Webpack会递归地构建一个依赖关系图&#xff08;dependency graph&#xf…

【自学笔记】支持向量机(4)——支持向量回归SVR

引入 SVM解决了分类问题&#xff0c;而用类似方法解决回归问题的模型称为支持向量回归。目标是得到一个模型&#xff0c;使输出的 f ( x ⃗ ) f(\vec{x}) f(x )与 y y y尽可能接近。 传统的回归模型直接计算 f ( x ⃗ ) f(\vec{x}) f(x )与 y y y的差距作为损失&#xff0c;当两…

直播加速所用的网络协议与网速比我们平常使用的有什么特殊

直播加速所用的网络协议与我们平常使用的协议&#xff08;如HTTP、TCP等&#xff09;相比&#xff0c;确实具有一些特殊之处。这些协议的设计目的是为了满足直播场景下的实时性和稳定性需求。以下是一些关键特性和比较&#xff1a; 1. 实时性要求 UDP协议&#xff1a;直播常用…

工厂模式在短信发送中的应用 —— 以腾讯云、阿里云、华为云为例

1. 问题背景 假设你在开发一个短信发送的系统&#xff0c;用户可以选择不同的服务提供商&#xff08;比如腾讯云、阿里云、华为云&#xff09;来发送短信。每个服务商提供的接口不同&#xff0c;但最终的目的是相同的——发送短信。这时&#xff0c;我们面临的问题是如何设计一…

UE4中 -skipbuild -nocompile 有什么区别

在项目开发中&#xff0c;我看到了在调用 Engine\\Build\\BatchFiles\\RunUAT.bat 相关的命令行中&#xff0c;有 -skipbuild、 -nocompile 两个很像的参数&#xff0c;于是想探究一下它们的区别与含义。 -skipbuild 参数 到底有没有 -skipbuild 这个参数&#xff1f;根据 http…

React 面试问题以及简要答案

1. 什么是 React&#xff1f; React 是一个 JavaScript 库&#xff0c;用于构建用户界面&#xff0c;特别是数据随时间变化的单页应用程序。它允许开发人员创建可以高效更新和渲染的大型 Web 应用程序。 2. React 的主要特点是什么&#xff1f; JSX&#xff1a;允许将 HTML …