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 编写的脚本,其功能涵盖了创建、管…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...
Python学习(8) ----- Python的类与对象
Python 中的类(Class)与对象(Object)是面向对象编程(OOP)的核心。我们可以通过“类是模板,对象是实例”来理解它们的关系。 🧱 一句话理解: 类就像“图纸”,对…...
Qt Quick Controls模块功能及架构
Qt Quick Controls是Qt Quick的一个附加模块,提供了一套用于构建完整用户界面的UI控件。在Qt 6.0中,这个模块经历了重大重构和改进。 一、主要功能和特点 1. 架构重构 完全重写了底层架构,与Qt Quick更紧密集成 移除了对Qt Widgets的依赖&…...
Cursor AI 账号纯净度维护与高效注册指南
Cursor AI 账号纯净度维护与高效注册指南:解决限制问题的实战方案 风车无限免费邮箱系统网页端使用说明|快速获取邮箱|cursor|windsurf|augment 问题背景 在成功解决 Cursor 环境配置问题后,许多开发者仍面临账号纯净度不足导致的限制问题。无论使用 16…...
