Java+Github+Jenkins部署
Java项目—Jenkins部署笔记
一,准备
- 一台服务器
- 操作系统,示例为ubuntu 22.0.4 可运行
lsb_release -a查看
二,安装
-
docker
- 更新软件包列表:
sudo apt update- 安装必要的软件包,以便使用HTTPS通过APT下载软件包:
bashCopy code sudo apt install -y apt-transport-https ca-certificates curl software-properties-common- 添加Docker的官方GPG密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg- 添加Docker APT存储库:
echo "deb [signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null- 更新软件包列表以包括Docker存储库:
sudo apt update- 安装Docker引擎:
sudo apt install -y docker-ce- 启动Docker服务:
sudo systemctl start docker- 将Docker添加到启动时自动启动:
sudo systemctl enable docker- 验证Docker是否正确安装:
sudo docker --version现在,Docker已经成功安装在您的Ubuntu系统上。您可以使用
docker命令来管理和运行容器。 -
git
-
打开终端:可以通过按下
Ctrl+Alt+T键组合,或者在应用程序搜索中找到“终端”。 -
运行以下命令以更新软件包列表:
sudo apt update -
安装Git:
sudo apt install git -
安装完成后,可以通过运行以下命令来验证安装是否成功,并显示安装的Git版本:
git --version
现在,你已经成功在Ubuntu系统上安装了Git。你可以使用
git命令来管理代码库、版本控制和其他Git操作。如果你还不熟悉Git的使用,可以查阅Git的文档或教程,以便更好地理解和利用其功能。 -
-
jdk
-
自行下载,这里举例为 jdk-17_linux-x64_bin.tar.gz Java Downloads | Oracle 中国
-
sudo tar -zxvf jdk-17_linux-x64_bin.tar.gz -C /usr/local -
然后就可以通过 "cd /usr/local"和“pwd”查看具体路径,以便后面配置,这里给出示例的路径:
-
/usr/local/jdk-17.0.8
-
-
maven
-
自行下载,这里举例为 apache-maven-3.9.4-bin.tar.gz Maven – Download Apache Maven
-
sudo tar -zxvf apache-maven-3.9.4-bin.tar.gz -C /usr/local -
然后就可以通过 "cd /usr/local"和“pwd”查看具体路径,以便后面配置,这里给出示例的路径:
-
/usr/local/apache-maven-3.9.4
-
-
jenkins
-
jenkins的安装可以在这个地址下载链接Jenkins download and deployment
-
后台运行 Jenkins:
使用以下命令在后台运行 Jenkins:
java -jar jenkins.war --httpPort=8080这将在 8080 端口启动 Jenkins。如果您希望使用不同的端口,请更改
--httpPort参数的值。 -
访问 Jenkins Web 界面:
在浏览器中输入
http://localhost:8080,然后按照 Jenkins 配置向导中的指示进行设置。在需要输入管理员密码时,请查找 Jenkins 日志中的初始密码,并在配置向导中使用它。 -
将 Jenkins 配置为服务(可选):
如果您希望将 Jenkins 配置为系统服务,以便在系统启动时自动运行,您可以创建一个 Systemd 服务单元。您可以创建一个名为
/etc/systemd/system/jenkins.service的文件,并在其中添加以下内容:plaintextCopy code[Unit] Description=Jenkins Server After=network.target[Service] User=<your_username> ExecStart=/usr/bin/java -jar /path/to/jenkins.war --httpPort=8080 Restart=always[Install] WantedBy=multi-user.target请将
<your_username>替换为您的用户名,并将/path/to/jenkins.war替换为您实际下载的 Jenkins WAR 文件的路径。然后,使用以下命令启用和启动服务:bashCopy codesudo systemctl enable jenkins sudo systemctl start jenkins
-
三,Jenkins配置
1.基础插件安装
打开页面后会有一些基础的配置和插件的安装记得选默认的(因为,你也不知道需要什么插件,当然我也不知道),自行安装一下,如果要查看管理员密码的话,可以使用
cat命令+[页面提示的路径]
进入后,打开点击系统管理,在其中找到插件管理,在第二个选项中安装Docker相关的插件

这个是我已经安装的(OS:因为不知道哪个对应哪个,所以全点啦)

所有的插件安装完成后,继续回服务器中重启jenkins
sudo systemctl restart jenkins
2.全局工具配置
还是回到系统管理中,找到全局工具配置打开,看图配置吧,只要路径对就行了
- Maven

- JDK

- Git

这些配置好后,保存退出,同样在系统管理中找到凭证管理
进来后,直接点击到最后出现这界面即可

点击新增,选择如下

输入Github用户名和本地的私钥,大概在C:\Users\Administrator.ssh中的 id_rsa中
其他的描述可以输入:ssh key 这个随意,其他的不用输入,点击创建即可
然后再次新建一个凭证,选择

这里只需要输入Secret即可,这个值是Github的访问密钥,大概生成步骤为:
进入Github,点击头像,选择Settings,滑到最后选择Developer Settings,点击Personal access tokens下第一个直接生成,然后填写就行。
然后备注写成token,点击创建
好,现在凭证配置完毕,到时候需要用到的时候,可以来此查看。
接下来还是系统管理中点开系统配置,找到GitHub的位置,进行连接测试

这个名称就是你的GitHub的用户名,记得替换,凭证,选择token凭证,进行测试,如果不行,请重新配置token,或重新生成token (tnnd,这苦不能我一个受!)
好!很有精神!现在所有配置就完成了,到这里就可以新建一个Job来搭建部署了!
四,构建部署
好,到这里,就可以进行构建部署了,为了演示方便,我将使用下面的Java项目来当做示例:
ZhMenX的测试项目,可以下载下来调试一下。如果,我记得绑定了资源,可以查看下。
然后就是把这个项目放到你的github上面了
之后就是新建任务了

我们这里选择流水线(小声BB:目前只尝试过这个)命名为Test

这里就是配置的地方,选择Github项目的选项,然后输入自己的github项目地址
然后就是触发器的构建

这里我使用了轮询(我也想使用Github hook,但是不会,有会的大神,请教教我,我找不到那个jenkins的URL)
最后就是定义流水钱的脚本了,这里我提供一个示例:
pipeline {agent anytools {// 指定使用的JDK工具jdk 'jdk17'}environment {JDK_VERSION = '17'MAVEN_VERSION = '3.9.4'DOCKER_IMAGE_NAME = 'test_java'MAVEN_HOME = '/usr/local/apache-maven-3.9.4' // 设置Maven的路径DOCKER_HOME = '/usr/bin/docker' // 设置Docker的路径PATH = "${tool 'jdk17'}/bin:${MAVEN_HOME}/bin:${DOCKER_HOME}:${env.PATH}"}stages {stage('Checkout') {steps {// 检出代码库到工作目录checkout([$class: 'GitSCM',branches: [[name: '*/master']], // 指定主分支名称userRemoteConfigs: [[url: 'git@github.com:ZhMenX/Test.git', // GitHub仓库URL需要替换为自己的credentialsId: '' // 您的凭证ID 替换为自己的,这个就是ssh那个]]])}}stage('Build and Test') {steps {// 构建和测试Spring Boot项目sh 'mvn clean install'}}stage('Dockerize') {steps {script {def dockerImageTag = "${DOCKER_IMAGE_NAME}:${BUILD_NUMBER}"// 检查是否存在同名容器并停止def existingContainerId = sh(script: "docker ps -aq -f name=${DOCKER_IMAGE_NAME}", returnStdout: true).trim()if (existingContainerId) {echo "Stopping existing container: ${existingContainerId}"sh "docker stop ${existingContainerId}"}// 检查是否存在同名镜像def existingImageId = sh(script: "docker images -q ${DOCKER_IMAGE_NAME}", returnStdout: true).trim()if (existingImageId) {echo "Deleting existing image: ${existingImageId}"// 停止使用镜像的容器def runningContainers = sh(script: "docker ps -aq -f ancestor=${existingImageId}", returnStdout: true).trim()if (runningContainers) {sh "docker stop ${runningContainers}"}// 删除镜像sh "docker rmi -f ${existingImageId}"}sh "docker build -t ${dockerImageTag} ." // 构建 Docker 镜像sh "docker run -d -p 8090:8090 ${dockerImageTag}" // 运行 Docker 容器}}}}
}
最后补充一下:当需要修改端口时,测试项目中dockerfile和application.yml都需要修改,以及流水线脚本。
OK,到这里就完成了,当然,很大概是运行不成功的,哈哈哈哈哈哈哈哈,感受痛苦吧!
五,Bug扫荡
1,拉取代码失败
原因,主机密钥的配置问题2
解决方案:
ssh -T git@github.com
ssh-keyscan github.com >> ~/.ssh/known_hosts
2,docker权限问题
当前用户没有docker权限,这个不管事的话,只能试试重启大法了
sudo usermod -aG docker $USER
作为经历过docker 权限错误洗礼的我来说,我也没啥其他办法,擦…
六,我的问题(球球了)
- 我有尝试过把jenkins当容器来运行也就是DinD,比如
docker run -d --name jenkins-dind --privileged --user root -v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins:lts,但是这样并不能解决jenkins执行docker在脚本中执行docker run等命令,提示docker:not found的问题 - 我尝试过实现提交代码到远程库就触发构建的操作,但是在配置hook的时候,找不到jenkins的hook地址,点击那个选项GitHub hook trigger for GITScm polling不会弹出,hook的连接,是需要其他的插件来实现嘛,求指教
相关文章:
Java+Github+Jenkins部署
Java项目—Jenkins部署笔记 一,准备 一台服务器操作系统,示例为ubuntu 22.0.4 可运行lsb_release -a查看 二,安装 docker 更新软件包列表: sudo apt update安装必要的软件包,以便使用HTTPS通过APT下载软件包&#x…...
vue使用命令npm install 报错 cb() never called!
一.错误说明,npm本身下载就慢,有可能是网络的问题。 二.解决方案,把npm设置成淘宝镜像后,再重新npm install npm config set registry https://registry.npm.taobao.org 三.还是不行,还会出现同样的问题,那接下来先清理一下npm缓存 npm cache…...
什么是LatexEasy及其在数学排版中的作用
LatexEasy是一种强大的排版系统,特别擅长处理数学公式和科技文档。它基于 TeX,是由计算机科学家 Donald Knuth 开发的。LaTeX 可以让你专注于内容,而不必过多关心排版细节,特别适用于数学家、工程师和科学研究者。 什么是 LaTeX&…...
axios 和fetch的取舍,以及比较
废话不多说,直接直捣黄龙: 区别 相同点 都是一种基于promise的异步解决方案。都可以解决回调地狱问题 不同点 axios是一个封装好的库,需要npm进行安装,fetch是es6新增的api 语法: fetch(url, { method: GET, // o…...
K-Means(K-均值)聚类算法理论和实战
目录 K-Means 算法 K-Means 术语 K 值如何确定 K-Means 场景 美国总统大选摇争取摆选民 电商平台用户分层 给亚洲球队做聚类 编辑 其他场景 K-Means 工作流程 K-Means 开发流程 K-Means的底层代码实现 K-Means 的评价标准 K-Means 算法 对于 n 个样本点来说&am…...
Python-pyqt不同窗口数据传输【使用静态函数】
文章目录 前言程序1:caogao1.py输入数据界面程序2:caogao2.py接收数据界面 程序3 :将输入数据界面和接收数据界面组合成一个总界面讲解 总结 前言 在编写pyqt 页面时有时候需要不同页面进行数据传输。本文讲解静态函数方法。直接看示例。 程…...
百度垂类离线计算系统发展历程
作者 | 弘远君 导读 本文以百度垂类离线计算系统的演进方向为主线,详细描述搜索垂类离线计算系统发展过程中遇到的问题,以及对应的解决方案。架构演进过程中一直奉行“没有最好的架构,只有最合适的架构”的宗旨,面对不同阶段遇到的…...
ubuntu 安装 指定版本:nodejs
通过 PPA 安装指定或最新版本的 nodejs 那么就需要使用 nodesource 来安装指定版本的 nodejs 了。其需要下载一个脚本,运行此脚本会在 ubuntu 里添加一个 nodejs 源,然后用 apt 就可以下载指定的 nodejs 了。 PPA 的全称为 personal package archive 。要…...
16.CSS菜单悬停特效
效果 源码 <!DOCTYPE html> <html> <head> <title>Creative Menu Item Hover Effects</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body><section><…...
恒运资本:市盈率怎么算?
市盈率(P/E ratio)是判别一家公司股票价格合理性的一个重要目标,也是投资者评估公司股票投资价值的重要参阅目标。市盈率越高,表明相对于公司的收益来说,该公司的股票定价越高。市盈率越低,则表明该股票被低…...
Docker运维中常见错误以及解决方法汇总1
1.报错如下: Another app is currently holding the yum lock; waiting for it to exit... 另一个应用程序是:PackageKit 原因:另一个APP正在锁定yum,等待其退出! 解决:执行指令 rm -f /var/run/yum.pid 2.CentOS7设置静态的IP且可以上网...
Maven - 使用maven-release-plugin规范化版本发布
文章目录 Maven Release plugin – IntroductionMaven Release plugin – Plugin DocumentationMaven Release plugin – Usage实战案例 Maven Release plugin – Introduction Maven Release Plugin(Maven 发布插件)是一个用于帮助在Maven项目中执行版…...
2023.8.29 关于性能测试
目录 什么是性能测试? 性能测试常见术语及其性能测试衡量指标 并发 用户数 响应时间 事务 点击率 吞吐量 思考时间 资源利用率 性能测试分类 基准性能测试 负载性能测试 压力性能测试 可靠性性能测试 性能测试执行流程 什么是性能测试? 性…...
基于MATLAB的径向基函数插值(RBF插值)(一维、二维、三维)
基于MATLAB的径向基函数插值(RBF插值)(一维、二维、三维) 0 前言1 RBF思路2 1维RBF函数2.1 参数说明2.1.1 核函数选择2.1.2 作用半径2.1.3 多项式拟合2.1.4 误差项(光滑项) 3 2维RBF函数4 3维RBF函数 惯例声…...
flume拦截器
flume拦截器代码 1.依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apach…...
vue、elementui控制前一级选择后,后一级才会有数据
<el-form-item label"废物类型:"><el-select clearable v-model"queryForm.hswCateType" placeholder"请选择" change"industryCategoryChange" focus"industryCategoryFocus"><el-option v-for&…...
亲测influxdb安装为window后台服务
InfluxDB 安装 64bit:https://dl.influxdata.com/influxdb/releases/influxdb-1.7.4_windows_amd64.zip 解压安装包 修改配置文件 [meta]# Where the metadata/raft database is storeddir "D:/influxdb/meta"...[data]# The directory where the TSM…...
【LeetCode - 每日一题】823. 带因子的二叉树 (2023.08.29)
823. 带因子的二叉树 题意 元素都大于1,元素不重复。计数满足要求的二叉树(每个非叶结点的值应等于它的两个子结点的值的乘积)的数量。元素可以重复使用。 代码 自上而下动态规划。 所有元素大于1,所以不会有 自己自己自己 的…...
flutter 上传图片并裁剪
1.首先在pubspec.yaml文件中新增依赖pub.dev image_picker: ^0.8.75 image_cropper: ^4.0.1 2.在Android的AndroidManifest.xml文件里面添加权限 <activityandroid:name"com.yalantis.ucrop.UCropActivity"android:screenOrientation"portrait"andro…...
一台服务器上部署 Redis 伪集群
哈喽大家好,我是咸鱼 今天这篇文章介绍如何在一台服务器(以 CentOS 7.9 为例)上通过 redis-trib.rb 工具搭建 Redis cluster (三主三从) redis-trib.rb 是一个基于 Ruby 编写的脚本,其功能涵盖了创建、管…...
3个技巧快速解锁百度网盘SVIP下载特权
3个技巧快速解锁百度网盘SVIP下载特权 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 你是否曾因百度网盘Mac版的下载速度而苦恼?普通用户下…...
Photon OS 监控与运维:7个必备工具和最佳实践
Photon OS 监控与运维:7个必备工具和最佳实践 【免费下载链接】photon Minimal Linux container host 项目地址: https://gitcode.com/gh_mirrors/phot/photon Photon OS 作为一款轻量级 Linux 容器主机,高效的监控与运维是保障其稳定运行的关键。…...
数据清洗提速37倍的秘密:Polars 2.0中arrow2内核的零拷贝cast、predicate pushdown与pl.scan_parquet深度调优
第一章:Polars 2.0 大规模数据清洗技巧 面试题汇总Polars 2.0 引入了更严格的惰性执行模型、增强的字符串处理 API 以及对空值语义的统一规范,使其在面试中成为高频考察对象。高频考点聚焦于内存效率、链式操作健壮性及跨类型转换的边界处理。高效处理缺…...
3分钟掌握医学文献关键信息:本草模型如何从肝癌研究中提取核心知识
3分钟掌握医学文献关键信息:本草模型如何从肝癌研究中提取核心知识 【免费下载链接】Huatuo-Llama-Med-Chinese Repo for BenTsao [original name: HuaTuo (华驼)], Instruction-tuning Large Language Models with Chinese Medical Knowledge. 本草(原名…...
HunyuanVideo-Foley部署教程:API限流配置与高并发请求稳定性保障
HunyuanVideo-Foley部署教程:API限流配置与高并发请求稳定性保障 1. 环境准备与快速部署 HunyuanVideo-Foley是一款强大的视频生成与音效生成工具,本教程将指导您完成私有化部署,并重点讲解API限流配置与高并发请求的稳定性保障方案。 1.1…...
Python农业物联网开发必踩的5个致命坑,第3个让某省级智慧农场损失87万元(含Grafana+InfluxDB实时告警配置模板)
第一章:Python农业物联网开发必踩的5个致命坑,第3个让某省级智慧农场损失87万元(含GrafanaInfluxDB实时告警配置模板)传感器数据时间戳漂移导致历史分析全盘失效 Python中若直接使用time.time()或datetime.now()采集温湿度传感器数…...
AutoJS与按键精灵实战:微信抢红包脚本开发指南(附完整代码)
1. 微信抢红包脚本开发入门指南 最近几年,手机自动化工具越来越受到开发者欢迎,特别是像AutoJS和按键精灵这样的工具,能够帮助我们完成很多重复性的手机操作。今天我要分享的是如何用这些工具开发一个微信抢红包脚本,这个需求在过…...
STM32F103 SPI+DMA驱动WS2812B的时序实现原理
1. WS2812B_STM32_Libmaple 库深度解析:基于 SPI DMA 的高性能 NeoPixel 驱动实现WS2812B(常被称作 NeoPixel)是当前嵌入式系统中最主流的单线协议可寻址 RGB LED。其核心挑战在于严格的时序要求:T0H(逻辑 0 的高电平时…...
OpenClaw技能开发指南:为Qwen3.5-4B-Claude定制专属自动化
OpenClaw技能开发指南:为Qwen3.5-4B-Claude定制专属自动化 1. 为什么需要自定义Skill? 去年我接手了一个重复性极高的数据整理工作——每天要从十几个气象网站抓取数据,手动整理成Excel报表。当我第三次在凌晨两点对着屏幕核对数据时&#…...
macOS玩家必备:OpenClaw+nanobot自动化办公实战
macOS玩家必备:OpenClawnanobot自动化办公实战 1. 为什么选择OpenClawnanobot组合? 作为一个长期在macOS上折腾自动化工具的老用户,我一直在寻找一个既能保持本地数据隐私,又能灵活处理办公场景的解决方案。直到遇到OpenClawnan…...
