使用PasteSpider实现类似Jenkins的功能,让你的2G服务器也可以飞起

news/2025/3/19 6:40:01/文章来源:https://www.cnblogs.com/pastespider/p/18341574

或许你接触过Jenkins,

在我理解就是拉取源码,然后构建成镜像,最后启动容器!

但是这个功能对于小内存的服务器来说就是奢望了!

今天介绍一个新版本,把你这个遗憾弥补下!

在PasteSpider中,也是支持拉取源码,然后编译发布的!!!

以下案例使用svn作为源码管理

如果你使用git作为源码管理,道理差不多

以我的代码为例

dotnet 6.0 + Linux AliBaba + PasteSpider v24.07.20.01

1.按照论坛的方式安装PasteSpider

一键安装PasteSpider

2.在服务器linux上安装dotnet

这个可以查看微软官方网站

https://learn.microsoft.com/zh-cn/dotnet/core/install/linux-scripted-manual#scripted-install

安装完成后执行命令监测下

dotnet --info
 

SVN/GIT的配置

3.打开PasteSpider的管理端,找到菜单

image.png
以我的为例,我为项目

image.png

如果你启用了docker registry的私人仓库,则上面的配置中仓储那边要对应的选择,选择哪个要看你所选的服务

上面中要注意的是 克隆编译命令

我的如下

#删除旧的源码
rm -rf /spider/source/blog/tool/
#创建文件夹,可能文件夹不存在
mkdir -p /spider/settings/blog/tool/
#删除旧的配置文件,这一步看实际情况,因为拉取源码会把所有代码都覆盖
rm -rf /spider/settings/blog/tool/appsettings.json
#复制配置文件,留着备用
cp -f /spider/publish/blog/tool/appsettings.json /spider/settings/blog/tool/appsettings.json
#从服务端拉取源码,这个第一次的时候一般会失败,所以要直接去服务端试着拉取代码
svn checkout svn://your_svn_ip:your_svn_port/PasteSoft/PasteSoft --username=your_svn_name --password=your_svn_password /spider/source/blog/tool/
#构建命令,不同语言不一样处理,目的就是发布到文件夹
dotnet publish /spider/source/blog/tool/ -c release -r linux-x64 --self-contained false -o /spider/publish/blog/tool/
#删除拉取的配置文件
rm -rf /spider/publish/blog/tool/appsettings.json
#从刚刚备份的配置文件复制到发布文件夹
cp -f /spider/settings/blog/tool/appsettings.json /spider/publish/blog/tool/appsettings.json
#后续的动作由系统接管,其实就是构建镜像和升级!

 

以上需要注意的地方有

 

目录说明

/spider/这个是工作目录,就是PasteSpider的工作目录,对于宿主服务器的路径而言的,默认是/spider/

这个目录下有几个功能文件夹

source 表示用于存放svn拉取的源码的

publish 表示用于存放服务编译后(发布)的文件的

settings 用于存放项目服务的特别文件的,这个看需求

克隆编译命令 的目的就是拉取源码到source文件夹,然后通过对应语言的发布命令,发布到publish文件夹

功能文件夹下还有几层 

/spider/source/blog/tool/为例

spider是PasteSpider的工作目录

source是功能文件夹 表示源码

blog表示这个项目的代码

tool表示这个服务的代码

 

命令说明

命令一行一条,每行之间没有上下关系,也就是没有相对路径的说法,你得写全路径

如果是#开头的,则这一行命令不会被执行,是注释

 

更新说明

在配置的下方有一个表示,其实是多少个环境就多少行,然后注意后面那个命令开头

意思是源码提交的备注是这个字母开头的,才会触发升级,比如我的配置是

update 的开头 就可以触发

验证密钥注意下,下面的步骤4要使用

 

4 post-commit

假设你一键有一个SVN代码管理器的服务端,则参考如下文章进行配置并设置post-commit的hook文件

https://soft.pastecode.cn/Article/1

精华部分其实就在

post-commit的内容上

#REPOS="$1"
#REV="$2"
export LANG=zh_CN
MESSAGE=$(svnlook log -r $2 $1)
curl -d "token=your_token&repos=$1&version=$2&info=$3&info=$MESSAGE" "https://spider.abc.com/api/spider/Code/svncommit"

假设访问https://spider.abc.com/page/index.html可以访问到我的PasteSpider管理端,则有如上配置

注意上面的your_token,和我们3步骤配置的验证密钥需要一致,一会有个地方要用

上面的文件保存好了后,注意修改post-commit的执行权限,需要能够执行,否则是不会生效的

 

 

5检查流程

以上按照要求配置后,特别注意的是命令相关的内容

服务器是否支持相关的命令

是否支持curl 这个用于推送信息到PasteSpider的接口上的

是否支持dotnet 这个要看你是啥语言,不同语言的编译发布命令是不一样的

是否支持svn 这个是拉取源码的,比如我这个服务器上找不到这个命令,就使用yum -y install svn 不同服务器要基于自己的去安装

一些登陆操作是否已经执行

比如svn这个拉取代码的操作,一般是要求第一次执行,会有一个提示,大致意思是登陆,授权啥的,你可以手动执行下

 

6.准备测试

以上信息保存后,我们来提交一下代码!

image.png

注意看我的备注是update打头的,这个和我的步骤3的相对应!

我的启动前的资源使用情况

image.png

提交后,到PasteSpider的管理端的任务列表查看

image.png

在接收到对应的post-commit的推送后,会先执行镜像的构建,然后会基于配置执行升级!

或者是等待通知,比如我的

image.png

当然,如果执行失败了,则需要到任务的详细中查看,具体哪个命令失败了,比如我以前的

image.png

打开后,查看这个任务里面的子任务,哪条执行失败!

image.png

点击详细,会看到具体执行的命令,你可以把这个命令自己复制到服务器上去执行,看看为啥错误!

基于任务详细的反馈,如果有错误的修正后重新提交尝试!

升级后

image.png
多的部分,就是克隆命令后的编译发布花费的,使用ps -aux 可以查看到对应多出来的

image.png

查过资料,一段时间后这个会自己退出!

所以资源占用是非常划算的!

多测试几次,发现时间还是有差的!

image.png

 

写在后面

其实克隆代码执行完成后,走的就是默认的服务的发布模式(就是开发者在开发机上发布项目到文件,然后把发布后的项目文件同步到服务器上,然后服务器基于发布的文件执行镜像的构建和对应服务的发布!)

也就是说克隆代码执行完成后,其他的步骤执行的逻辑就和发布模式一致了

比如会运行几个容器

端口配置

IP配置

nginx配置等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/777627.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

D37 2-SAT P3007 [USACO11JAN] The Continental Cowngress G

视频链接:D37 2-SAT P3007 [USACO11JAN] The Continental Cowngress G_哔哩哔哩_bilibili P3007 [USACO11JAN] The Continental Cowngress G - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)// O(n*n) #include <iostream> #include <cstring> #include <algo…

Java 文件 I/O流详解

文件文件操作是Java开发中一个重要的组成部分,它允许开发者对文件进行读取,写入,创建,删除和修改等操作,文件操作的主要通过java.io包中的类来实现的,其中的File类更是文件操作的核心类File类的常用方法 创建文件或目录文件创建使用createNewFile();可以创建一个新的空文件,如果…

kubelet节点资源预留

目录一、Node Allocatable1、node资源预留1.1 为什么要做资源预留?1.2 node allocatable1.2.1 查看node节点资源1.2.2 确认node01节点资源2、 配置资源预留2.1 kube预留值2.2 systemReserved预留2.3 evictionHard预留2.4 整体配置2.5 重启服务2.6 Allocatable资源说明 一、N…

mysql 是否该数据列每个数据都唯一就应该设置唯一索引?

前言 比较一下唯一索引和普通索引的区别。 如果有一列数据唯一,这个时候是否是就直接设置唯一索引,这样可以避免插入重复的值,来实现业务需求。 那么唯一索引是如何保持唯一的呢?这个对性能是否有影响。 正文 数据库我们知道是增删改查。 那么首先来看下这个查,唯一索引是…

Markdown 达人必备!轻松几步画出专业流程图

流程图,顾名思义,就是表示一个事件或活动的流程的图示。流程图,顾名思义,就是表示一个事件或活动的流程的图示。 ‍ ‍ 快速入门 最简单的例子:从 A 到 B graph TDA --> B‍ 效果: graph TDA --> B ‍ ‍ 注意起始的关键字“grpah”是必须的,表明这是流程图。 后续…

CVE-2023-1313 复现

CVE-2023-1313 复现cockpit在2.4.1版本之前存在任意文件上传漏洞PS:通过在浏览器中打开/install来运行安装首先看到了一个登录页面.我们按照提示访问/install,成功的添加了用户名和密码都为admin,登录. 来到如下界面,可以进行任意文件上传然后点击三个点可以选择下载文件,将得…

使用 addRouteMiddleware 动态添加中间

title: 使用 addRouteMiddleware 动态添加中间 date: 2024/8/4 updated: 2024/8/4 author: cmdragon excerpt: 摘要:文章介绍了Nuxt3中addRouteMiddleware的使用方法,该功能允许开发者动态添加路由中间件,以实现诸如权限检查、动态重定向及路由变化时的特定操作。内容涵盖…

DirectX9(D3D9)游戏开发:高光时刻录制和共享纹理的踩坑

共享纹理 老游戏使用directx9无法直接与cc高光sdk(d3d11)对接,但是d3d9ex有共享纹理,我们通过共享纹理把游戏画面共享给cc录制,记录一些踩坑的笔记。 共享纹理示例: // 初始化Direct3D void initD3D9(HWND hWnd) {hr = d3d9exdev->GetRenderTarget(0, &g_d3d9Render…

三数之和(双指针法)

题目描述 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 双指针法:首先我们要对数…

Nessus Professional 10.8.0 Auto Installer for macOS Sonoma

Nessus Professional 10.8.0 Auto Installer for macOS SonomaNessus Professional 10.8.0 Auto Installer for macOS Sonoma 发布 Nessus 试用版自动化安装程序,支持 macOS Sonoma、RHEL 9 和 Ubuntu 24.04 请访问原文链接:https://sysin.org/blog/nessus-auto-install-for-…

Nexpose v6.6.263 for Linux Windows - 漏洞扫描

Nexpose v6.6.263 for Linux & Windows - 漏洞扫描Nexpose v6.6.263 for Linux & Windows - 漏洞扫描 Rapid7 Vulnerability Management, release Jul 31, 2024 请访问原文链接:https://sysin.org/blog/nexpose-6/,查看最新版。原创作品,转载请保留出处。您的本地漏…

最佳包裹

求三维凸包用增量法求解 假设我们已经维护好了前面的点的凸包,对于新加入的点: 如果这个点在凸包内部显然那就不用管了 如果这个点在凸包外部,那么考虑如下情况:将新点\(P_r\)当做光源,照的到的面全部删掉,照不到的面保留下来即可 如何判断一个面是否能够被照到:取多面体…