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 编写的脚本,其功能涵盖了创建、管…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案
引言 在分布式系统的事务处理中,如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议(2PC)通过准备阶段与提交阶段的协调机制,以同步决策模式确保事务原子性。其改进版本三阶段提交协议(3PC…...

AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)
Name:3ddown Serial:FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名:Axure 序列号:8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...
嵌入式面试常问问题
以下内容面向嵌入式/系统方向的初学者与面试备考者,全面梳理了以下几大板块,并在每个板块末尾列出常见的面试问答思路,帮助你既能夯实基础,又能应对面试挑战。 一、TCP/IP 协议 1.1 TCP/IP 五层模型概述 链路层(Link Layer) 包括网卡驱动、以太网、Wi‑Fi、PPP 等。负责…...

【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录
#工作记录 构建过程记录 Microsoft Windows [Version 10.0.27871.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗ ██╗███╗ ██╗ █████╗ ██╔════╝…...