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 编写的脚本,其功能涵盖了创建、管…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...
淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
