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端口访问自己的项目啦~ (*^▽^*)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/55135.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

毕业设计选题:基于ssm+vue+uniapp的校园二手交易平台小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

【python】函数介绍

学习目标 快速体验函数的使用了解函数的作用 函数 函数&#xff1a;是组织好的&#xff0c;可重复使用的&#xff0c;用来实现特定功能的代码段。 name "xiaoming" length len(name) print(length)输出结果是&#xff1a; 8 为什么随时都可以使用 len() 统计长…

操作系统与进程

1.操作系统 操作系统是计算机中的一个重要软件&#xff0c;它是一个专门进行管理的软件。操作系统可以通过驱动程序来间接管理外部硬件&#xff0c;也可以为计算机中的程序提供一个稳定的运行环境&#xff0c;从而来方便管理各种程序的运行&#xff0c;让程序之间的运行互不影…

上交所服务器崩溃:金融交易背后的技术隐患暴露杭州BGP高防服务器43.228.71.X

一、上交所宕机事件始末 2024 年 9 月 27 日&#xff0c;上交所交易系统突发崩溃&#xff0c;这一事件犹如一颗巨石投入平静的湖面&#xff0c;引起了轩然大波。当天上午&#xff0c;众多投资者反馈券商交易出现延迟问题&#xff0c;随后上交所发布了《关于股票竞价交易出现异常…

AI驱动的Java开发框架:Spring AI Alibaba实战部署教程

前言 随着生成式 AI 的快速发展&#xff0c;基于 AI 开发框架构建 AI 应用的诉求迅速增长&#xff0c;涌现出了包括 LangChain、LlamaIndex 等开发框架&#xff0c;但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言&a…

敏感字段加密 - 华为OD统一考试(E卷)

2024华为OD机试(E卷+D卷+C卷)最新题库【超值优惠】Java/Python/C++合集 题目描述 【敏感字段加密】给定一个由多个命令字组成的命令字符串: 1、字符串长度小于等于127字节,只包含大小写字母,数字,下划线和偶数个双引号; 2、命令字之间以一个或多个下划线 进行分割; 3、可…

WPF文本框无法输入小数点

问题描述 在WPF项目中&#xff0c;文本框BInding双向绑定了数据Text“{UpdateSourceTriggerPropertyChanged}”&#xff0c;但手套数据是double类型&#xff0c;手动输入数据时&#xff0c;小数点输入不进去 解决办法&#xff1a; 在App.xaml.cs文件中添加语句&#xff1a; …

【JavaSE系列】IO流

目录 前言 一、IO流概述 二、IO流体系结构 三、File相关的流 1. FileInputStream 2. FileOutputStream 3. FileReader 4. FileWriter 四、缓冲流 五、转换流 1. InputStreamReader 2. OutputStreamWriter 六、数据流 七、对象流 八、打印流 九、标准输入输出流…

探讨MySQL中的GROUP BY语句大小写敏感性

在数据库操作中&#xff0c;GROUP BY语句是SQL查询中用于根据一个或多个列的值对结果集进行分组的重要工具。然而&#xff0c;对于字符串类型的列&#xff0c;GROUP BY的行为可能会因为大小写敏感性而有所不同。本文将深入探讨MySQL中GROUP BY语句的大小写敏感性&#xff0c;并…

如何通过 GitHub Actions 使用 SSH 自动化部署到阿里云 ECS 实例

在现代应用开发中,自动化部署是提升开发效率的重要工具之一。GitHub Actions 是 GitHub 提供的一种自动化工具,允许开发者在代码推送时自动执行一些任务,比如测试、构建和部署。本文将介绍如何通过 GitHub Actions 使用 SSH 登录到阿里云 ECS 实例,实现自动化部署。 场景设…

Apache APISIX学习(2):安装Grafana、prometheus

一、Grafana安装 1、介绍 Grafana 是一个监控仪表系统&#xff0c;它是由 Grafana Labs 公司开源的的一个系统监测 (System Monitoring) 工具。它可以大大帮助你简化监控的复杂度&#xff0c;你只需要提供你需要监控的数据&#xff0c;它就可以帮你生成各种可视化仪表。同时它…

Deep Learning for Video Anomaly Detection: A Review 深度学习视频异常检测综述阅读

Deep Learning for Video Anomaly Detection: A Review 深度学习视频异常检测综述阅读 AbstractI. INTRODUCTIONII. BACKGROUNDA. Notation and TaxonomyB. Datasets and Metrics III. SEMI-SUPERVISED VIDEO ANOMALY DETECTIONA. Model InputB. MethodologyC. Network Archite…

基于Python实现的国庆节庆祝小程序

祖国母亲即将迎来75周年华诞&#xff0c;在这个特殊的日子里&#xff0c;我们可以用编程的方式来表达对祖国的祝福。本文将使用Python编写一个简单的国庆节庆祝小程序&#xff0c;通过一些编程技巧和设计为国庆节增添一些程序员的特色。 ⭕️庆祝国庆 ⭐️ 程序设计思路&#x…

828华为云征文|部署个人知识管理系统 SiyuanNote

828华为云征文&#xff5c;部署个人知识管理系统 SiyuanNote 一、Flexus云服务器X实例介绍二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置2.4 Docker 环境搭建 三、Flexus云服务器X实例部署 SiyuanNote3.1 SiyuanNote 介绍3.2 SiyuanNote 部署3.3 Siyua…

Linux下C开发使用小技巧

Linux下C开发使用小技巧 基础类 整形,字符串互转 C语言提供了几个标准库函数&#xff0c;可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串&#xff0c;下面列举了各函数的方法及其说明。 ● itoa()&#xff1a;将整型值转换为字符串。 ● ltoa()&#xff1a;将长…

大数据毕业设计选题推荐-重庆旅游景点数据分析系统-Python-Hive-Hadoop-Spark

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

基于微信开发助手企鹅音乐微信小程序的设计与实现(源码+文档+讲解)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

数据结构:线性表的链式表示

目录 基本组成 链表的类型 主要操作 初始化&#xff1a; 带头结点 不带头结点 插入操作 删除操作&#xff1a; 查找操作&#xff1a; 求表长&#xff1a; 建立单链表&#xff1a; 头插法&#xff1a; 尾插法&#xff1a; 双链表&#xff1a; 查找操作 插入操作…

【自动驾驶】对2D框的四条边同时缩进

对【自动驾驶】随机缩进2D框的一条边-CSDN博客进行补充。 所以这里直接进入正题&#xff0c;怎么做才能对每条边进行缩进&#xff1f; 待补充。

QT学习笔记之绘图

或许有人会等你到天黑&#xff0c;但是你不该在天黑后再找他&#xff08;她&#xff09;。 1.绘图事件 在ui文件中添加一个按钮&#xff0c;同时在资源文件中添加一个名字为1.jpg的图片。 widget.cpp #include "widget.h" #include "ui_widget.h" #incl…