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

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:lts
    container_name: jenkins
    restart: always
    privileged: true
    user: root
    volumes:
      - /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.json
    ports:
      - "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.kler.cn/news/324891.html

相关文章:

  • 微服务-- Gateway服务网关
  • CNN-LSTM预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络时间序列预测
  • net Core aspx视图引擎 razor视图引擎
  • java:brew安装rabbitmq以及简单示例
  • 【项目】基于Linux和C++的动态在线视频点播系统设计
  • 自建RustDesk服务器:详细步骤与操作指南
  • [dp+dfs]砝码称重
  • 考研数据结构——C语言实现冒泡排序
  • Brave编译指南2024 MacOS篇-引言与准备工作(一)
  • 题库系统平台开发功能解析
  • leetcode每日一题day17(24.9.27)——每种字符最少取k个
  • 【漏洞复现】Ruoyi框架漏洞复现总结
  • Leetcode 1235. 规划兼职工作
  • uniapp学习(002 常用的内置组件)
  • springboot整合openfeign
  • XSS(内含DVWA)
  • 如何制作Linux系统盘
  • Unity给物体添加网格(Wire)绘制的方法
  • Dubbo快速入门(一):分布式与微服务、Dubbo基本概念
  • 推荐一款开源的链路监控系统
  • java 框架组件
  • python习题1
  • 半导体制造过程中设备通信的高级概述
  • 从 Tesla 的 TTPoE 看资源和算法
  • 第一弹:llama.cpp编译
  • macOS安装MySQL以后如何配置环境变量
  • MongoDB 数据库服务搭建(单机)
  • 指定PDF或图片多个识别区域,识别区域文字,并批量对PDF或图片文件改名
  • 【H2O2|全栈】关于CSS(7)CSS基础(六)
  • VMware 虚拟机配置固定 IP