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

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

目录

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

[1. 环境](#1. 环境)

[2. yum安装](#2. yum安装)

[3. docker安装](#3. docker安装)

[4. 内网穿透工具安装natapp](#4. 内网穿透工具安装natapp)

二、jenkins安装和配置

[2.0 安装jdk和maven](#2.0 安装jdk和maven)

[2.1 拉取镜像,lts长期稳定的最新版](#2.1 拉取镜像,lts长期稳定的最新版)

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

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

[2.3 配置jenkins](#2.3 配置jenkins)

[三. jenkins构建第一个Springboot项目](#三. jenkins构建第一个Springboot项目)

[3.1 创建任务](#3.1 创建任务)

[3.2 源码配置](#3.2 源码配置)

[​3.3 构建触发器](#3.3 构建触发器)

[​3.4 构建步骤](#3.4 构建步骤)

[3.5 测试构建](#3.5 测试构建)

[3.6 测试Gitee提交自动构建](#3.6 测试Gitee提交自动构建)

四、运行项目

[4.1 Dockerfile](#4.1 Dockerfile)

[4.2 Build Steps配置](#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.

后台运行:

bash 复制代码
(./natapp &)

查看日志:

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

二、jenkins安装和配置

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

2.0 安装jdk和maven

上传jdk和maven:

bash 复制代码
# 将本地下载的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

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

bash 复制代码
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

验证:

bash 复制代码
mvn -v
java -version

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

bash 复制代码
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长期稳定的最新版

bash 复制代码
docker pull jenkins/jenkins:lts

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

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

bash 复制代码
docker pull jenkinsci/blueocean

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

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

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

bash 复制代码
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地址为自己的地址

bash 复制代码
vim docker-compose.yml
bash 复制代码
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

后台启动:

bash 复制代码
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)

bash 复制代码
sudo pip install --ignore-installed 'urllib3<2'
报错2:执行报错pip install:error: externally-managed-environment

解决:强制删除此警告:

bash 复制代码
sudo mv /usr/lib/python3.x/EXTERNALLY-MANAGED /usr/lib/python3.x/EXTERNALLY-MANAGED.bk

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

bash 复制代码
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脚本命令行执行:

bash 复制代码
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配置文件。详细可以查看其他教程)

bash 复制代码
# 基于 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脚本。

bash 复制代码
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时挂载目录写的有问题,修改后就可以了

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

相关推荐
Yhame.5 分钟前
Java 集合框架中的 List、ArrayList 和 泛型 实例
java
coding侠客5 分钟前
Spring Boot 多数据源解决方案:dynamic-datasource-spring-boot-starter 的奥秘
java·spring boot·后端
委婉待续11 分钟前
java抽奖系统(八)
java·开发语言·状态模式
人类群星闪耀时14 分钟前
大模型技术优化负载均衡:AI驱动的智能化运维
运维·人工智能·负载均衡
weixin_537590451 小时前
《Java编程入门官方教程》第八章练习答案
java·开发语言·servlet
新时代农民工--小明1 小时前
前端自动化部署更新,自动化打包部署
运维·前端·自动化
CodeClimb1 小时前
【华为OD-E卷-最左侧冗余覆盖子串 100分(python、java、c++、js、c)】
java·python·华为od
一个不秃头的 程序员1 小时前
服务器上加入SFTP------(小白篇 1)
运维·服务器
fnd_LN1 小时前
Linux文件目录 --- 复制命令CP、递归复制目录、软连接、硬链接
linux·运维·服务器