OpenClaw 一键安装原理深入分析,包含 Jenkins 流水线和 K8S 部署机制
OpenClaw 一键安装最佳实践
OpenClaw 一键安装完整指南,通过 Jenkins 自动部署到 K8S 集群
OpenClaw 一键安装最佳实践
OpenClaw 一键安装完整指南,通过 Jenkins 自动部署到 K8S 集群
Jenkins 升级最佳实践指南
Jenkins 2.553 升级完整指南,包含备份、升级流程、常见问题解决方案和回滚方案
如何进行架构设计
本文字数: 60 阅读时长 ≈ 1 分钟
如何进行架构设计,可以一起讨论,如何基于需求进行业务建模,如何进行业务流程设计,如何进行应用架构设计,如何进行技术架构设计,如何进行部署架构设计,如何应对高并发高流量高可用挑战!
未命名
本文字数: 407 阅读时长 ≈ 1 分钟
最新Typora1.9.5破解版下载与使用教程(Windows+Mac)
Typora是什么?
一款 Markdown 编辑器和阅读器,能知道Typora的小伙伴,肯定也会用的
二、使用步骤
1.软件
d:/software/tools/Typora破解版
根据自己电脑的类型选择下载Windows版本,或者是Mac版本

2.Windows版本安装激活
Windows的激活有点复杂,
- 下载后,点击exe文件安装
- 将从网盘中下载的app.asart替换掉Typora目录下的同名文件


- 在kry.txt,随便选一个序列号,输入序列号,即可成功

3. Mac版本安装激活
Mac
Mac版本安装比较简单
直接下载并安装即可
如果出现以下提示,按步骤同意即可:

打开设置->安全与隐私->通用权限->勾选允许任何来源

安装完成后启动Typroa时如果报错,重复上述步骤,选择允许打开, 执行一次之后以后就可以直接打开

未命名
本文字数: 8.4k 阅读时长 ≈ 15 分钟
一、Jenkins Rest API简单介绍
在githup上,jenkins-rest项目地址:链接地址,接口定义和接口测试代码都可以详细看到。 但在使用过程中遇到了问题让我纠结了很久。 看下使用REST API前置条件:
需要运行着的jenkins环境
需要一个管理员权限的账号
CSRF功能需要关闭掉,不然会影响POST接口的请求(我在这个上面纠结了很久,我使用的版本是Jenkins2.263.4,高于2.0版本的jenkins页面上已经不提供直接关闭CSRF的勾选按钮功能,网上搜索到的很多都是通过勾选按钮关闭CSRF功能,而新版本的JENKINS已经不支持这种方式—起初,我是不想关闭CSRF,但是解决不了API POST请求接口返回403forbiden问题,然后网上看到了一种,将获取到的crumb设置到header中,通过通过httpclient方式URL请求Jenkins API,这种方式我没能成功,最终放弃了,代码编写起来也很麻烦,跟API调用方法传入参数的方式比较起来的话) 4、插件的要求我感觉我没用到。
二、使用步骤
1.关闭CSRF保护
编辑jenkins配置文件
vim /etc/sysconfig/jenkins
AI写代码
java
运行
1
在默认配置文件JENKINS_JAVA_OPTIONS里面加入取消相关保护的参数配置,即可关闭CSRF,配置内容如下:
-Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true
AI写代码
java
运行
1
修改后如下:
重启jenkins即可生效
systemctl restart jenkins.service
AI写代码
java
运行
1
登录jenkins,Dashboard->Configure Global Security,跨站请求伪造保护会有提示,即可只修改已经生效了
2.引入jenkins-rest.jar包
我新建了个maven项目用来测试API,pom.xml引入了jenkins-rest包,由githup可知,最新的版本0.0.28,使用20-28版本会出现一个问题,启动api测试代码会报一个类方法未定义的错误,这个是因为com.google.guava包在jenkins-rest包里默认的版本不对,或者使用低版本的jenkins-rest包,但我对比了下看低版本提供的API方法还是少好几个的
log4j:WARN No such property [datePattern] in org.apache.log4j.RollingFileAppender.
Exception in thread “main” java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
AI写代码
java
运行
1
2
pom.xml配置如下:
com.cdancy
jenkins-rest
0.0.28
com.google.guava
guava
28.1-jre
AI写代码
xml
1
2
3
4
5
6
7
8
9
10
11
3.创建客户端
githup上有示例代码,按照自己jenkins访问地址和账户密码修改下即可。
JenkinsClient client = JenkinsClient.builder()
.endPoint(“http://127.0.0.1:8080“) // Optional. Defaults to http://127.0.0.1:8080
.credentials(“admin:password”) // Optional.
.build();
SystemInfo systemInfo = client.api().systemApi().systemInfo();
assertTrue(systemInfo.jenkinsVersion().equals(“1.642.4”));
AI写代码
java
运行
1
2
3
4
5
6
7
由代码可以看出一共提供了6个API类,分别是
API类 说明
pluginManagerApi 插件API:提供插件操作接口,一共就俩方法,查看和安装插件
crumbIssuerApi 系统哈希值信息(用于防御CSRF攻击)
jobsAPi 任务(项目管理),提供任务的创建、修改、查询、删除等操作,主要使用接口
queueApi 任务队列相关
statisticsApi jenkins统计相关
systemApi jenkins系统信息,如版本
4.jobsApi-任务API
JobsApi jobApi=client.api().jobsApi();
AI写代码
java
运行
1
4.1 jobList-任务一览
/**
* 任务一览
* param 文件夹路径“”,取的是最外层的任务,若要查看任务文件夹中的任务,入参则为文件名名称
/
JobList jobList=jobApi.jobList(“”);
for(int i=0;i<jobList.jobs().size();i++){
log.info(jobList.jobs().get(i));
}
AI写代码
java
运行
1
2
3
4
5
6
7
8
4.2 jobInfo-具体任务详细信息
/*
* 根据任务名称获取任务信息
* param 文件夹路径null,最外层任务 任务名称“test”
/
JobInfo jobInfo=jobApi.jobInfo(null,”test”);
log.info(“test任务详细信息”+jobInfo);
AI写代码
java
运行
1
2
3
4
5
6
4.3 buildInfo-任务构建的详细信息
/*
* 根据任务名称和任务构建id,获取构建信息
* param 文件夹路径null 任务名称“test” 构建ID 3
/
jobApi.buildInfo(null,”test”,3);
log.info(“test任务第三次构建详细信息:”+jobApi);
AI写代码
java
运行
1
2
3
4
5
6
4.4 create-新建任务
File file=new File(“C:\Users\dwzq\Desktop\config.xml”);
StringBuilder xmlStr=new StringBuilder();
BufferedReader read=null;
read=new BufferedReader(new FileReader(file));
String tempStr;
while((tempStr=read.readLine())!=null){
xmlStr.append(tempStr);
}
read.close();
/*
* 创建job任务
* param 文件夹路径null 新建任务名称“test2” 任务详细配置文件内容:xmlStr
*/
RequestStatus status=jobApi.create(null,”test2”,xmlStr.toString());
log.info(status);
AI写代码
java
运行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
4.5 config-查看任务配置文件内容(两个入参)
/**
* 获取任务配置文件内容
* param 文件夹路径null 任务名称“test2”
/
String testConfig=jobApi.config(null,”test2”);
log.info(“testConfig:”+testConfig);
AI写代码
java
运行
1
2
3
4
5
6
4.6 config-更新任务配置文件内容(三个入参)
/*
* 更新任务的配置文件
* param 文件夹路径null 任务名称“test2” 新的任务配置文件内容xmlStr.toString
/
boolean updateConfig=jobApi.config(null,”test2”,xmlStr.toString());
log.info(“updateConfig result:”+updateConfig);
AI写代码
java
运行
1
2
3
4
5
6
4.7 description-获取任务描述内容(两个入参)
/*
获取任务描述
* param 文件夹路径null 任务名称“test2”
/
String description= jobApi.description(null,”test2”);
log.info(“description:”+description);
AI写代码
java
运行
1
2
3
4
5
6
4.8 description-获取任务描述内容(三个入参)
/
* 更新任务的描述
* param 文件夹路径null 任务名称“tes2” 新的任务描述
/
Boolean updateDescription=jobApi.description(null,”test2”,”this is update test job description”);
log.info(“updateDescription result:”+updateConfig);
AI写代码
java
运行
1
2
3
4
5
6
4.9 delete-删除任务
/*
* 删除任务
* param 文件夹路径null 任务名称
/
RequestStatus deleteResult=jobApi.delete(null,”test2”);
log.info(“deleteResult:”+deleteResult);
AI写代码
java
运行
1
2
3
4
5
6
4.10 enable-启用任务
/*
* 启用任务
* param 文件夹路径null 任务名称“tes2”
/
boolean enableResult=jobApi.enable(null,”test2”);
log.info(“enableResult:”+enableResult);
AI写代码
java
运行
1
2
3
4
5
6
4.11 disable-禁用任务
/*
* 禁用任务
* param 文件夹路径null 任务名称“tes2”
*/
boolean disableResult=jobApi.disable(null,”test2”);
log.info(“disableResult:”+disableResult);
AI写代码
java
运行
4.12 build-构建任务
/**
* 任务构建
* param 文件夹路径null , 任务名“test”
/
IntegerResponse buildJob=jobApi.build(null,”test”);
log.info(“buildJob”+buildJob);
AI写代码
java
运行
1
2
3
4
5
6
4.13 buildWithParameters-带参数构建任务
/*
* 带参数构建任务
* param 文件夹路径null , 任务名“test” 参数
*/
Map<String, List> param=new HashMap();
List list=new ArrayList();
list.add(“staging”);
param.put(“DEPLOY_ENV”,list);
param.put(“myparam”,list);
IntegerResponse buldParam=jobApi.buildWithParameters(null,”test”,param);
log.info(“buildParam:”+buldParam);
AI写代码
java
运行
1
2
3
4
5
6
7
8
9
10
11
4.14 lastBuildNumber-上次任务的构建序号
/**
上次构建的序号
* param 文件夹路径null , 任务名“pipeline-hello-word” 参数
/
Integer lastBuildNumber=jobApi.lastBuildNumber(null,”pipeline-hello-word”);
log.info(“lastBuildNumber:”+lastBuildNumber);
AI写代码
java
运行
1
2
3
4
5
6
4.15 lastBuildTimestamp-上次任务的构建时间戳
/
* 上次任务构建时间
* param 文件夹路径null , 任务名“test”
/
String lastBuildTimetamp=jobApi.lastBuildTimestamp(null,”test”);
log.info(“lastBuildTimestamp:”+lastBuildTimetamp);
AI写代码
java
运行
1
2
3
4
5
6
4.16 progressiveText-任务构建对应的控制台输出内容(3个入参)
/*
* 获取任务构建对应的控制台输出
* param 文件夹路径null 任务名称“test” 0:控制台输出文本开始的位置
/
ProgressiveText progressiveText=jobApi.progressiveText(null,”test”,0);
log.info(“progressText:”+progressiveText);
AI写代码
java
运行
1
2
3
4
5
6
4.17 progressiveText-任务构建对应的控制台输出内容(3个入参)
/*
* 获取任务某个构建次数控制台对应的输出
* param 文件夹路径null 任务名称“test” 构建index:16 0:控制台输出文本开始的位置
/
ProgressiveText progressiveText1=jobApi.progressiveText(null,”test”,16,0);
log.info(“progressText num=16:”+progressiveText1);
AI写代码
java
运行
1
2
3
4
5
6
4.18 rename-任务重命名
/*
* 任务名称重命名
* param 文件夹路径null 任务名称“test” 任务新名词“test2New”
/
boolean renameResult=jobApi.rename(null,”test2”,”test2New”);
log.info(“renameResult:”+renameResult);
AI写代码
java
运行
1
2
3
4
5
6
4.19 workflow-任务某次构建的步骤信息
/*
* 获取任务构建index对应的构建步骤内容
* param 文件夹路径null 任务名称”pipeline-hello-word” 构建index:17
*/
Workflow workFlow=jobApi.workflow(null,”pipeline-hello-word”,17);
log.info(“workFlow:”+workFlow);
AI写代码
java
运行
1
2
3
4
5
6
4.20 pipelineNode-获取pipelineNode信息
这个没和页面具体功能联系起来,不知道具体获取的什么信息
/**
* 获取pipelineNode信息
* param 文件夹路径null 任务名称"pipeline-hello-word" 构建index:17 nodeId:1
*/
PipelineNode pipelineNode=jobApi.pipelineNode(null,"pipeline-hello-word",17,1);
log.info("pipeLineNodeInfo:"+pipelineNode);
AI写代码
java
运行
1
2
3
4
5
6
任务涉及到的接口是这20个,接口涉及到的数据结构的定义可以在githup domain查看
5.systemApi-系统环境API
SystemApi systemApi=client.api().systemApi();
AI写代码
java
运行
1
5.1 systemInfo-查看jenkins系统环境信息
/**
* 查看jenkins系统环境信息
/
SystemInfo systemInfo=systemApi.systemInfo();
log.info(“systemInfo:”+systemInfo);
AI写代码
java
运行
1
2
3
4
5
5.2 quietDown-准备关闭jenkins,对应Prepare for Shutdown功能
/*
* 准备关闭jenkins,对应Prepare for Shutdown功能
/
RequestStatus quietDown=systemApi.quietDown();
log.info(“quietDown:”+quietDown);
AI写代码
java
运行
1
2
3
4
5
5.3 cancelQuietDown-取消准备关闭jenkins
/*
* 取消准备关闭jenkins
/
RequestStatus cancleQuietDown= systemApi.cancelQuietDown();
log.info(“cancelQuietDown:”+cancleQuietDown);
AI写代码
java
运行
1
2
3
4
5
6.pluginManagerApi-插件API
PluginManagerApi pluginManagerApi=client.api().pluginManagerApi();
AI写代码
java
运行
1
6.1 plugins-查看所有插件信息
/*
查看插件所有信息
param 不是很理解这两个参数的具体含义,第一个参数调整返回的插件信息不一样
/
Plugins plugins=pluginManagerApi.plugins(3,null);
for(int i=0;i<plugins.plugins().size();i++) {
log.info(plugins.plugins().get(i).longName()+”:” + plugins.plugins().get(i));
}
AI写代码
java
运行
1
2
3
4
5
6
7
8
6.2 installNecessaryPlugins-插件安装
/
* 安装插件
* param 插件ID@版本号
/
RequestStatus requestStatus=pluginManagerApi.installNecessaryPlugins(“artifactory@3.10.6“);
log.info(“artifactory:”+requestStatus);
AI写代码
java
运行
1
2
3
4
5
6
7.statisticsApi-统计信息API
/
* 我的系统返回值为空,所以不清楚具体统计的什么
/
StatisticsApi statisticsApi= client.api().statisticsApi();
OverallLoad overallLoad=statisticsApi.overallLoad();
log.info(“overallLoad:”+overallLoad);
AI写代码
java
运行
1
2
3
4
5
6
8.queueApi-任务队列API
/*
* 三个接口,因为没数据,所以对应页面功能不是很理解
*/
QueueApi queueApi=client.api().queueApi();
List queueList=queueApi.queue();
RequestStatus cancelStatus=queueApi.cancel(1);
QueueItem queueItem=queueApi.queueItem(1);
AI写代码
java
未命名
本文字数: 18k 阅读时长 ≈ 33 分钟
系统配置MinIO对象存储集群
系统默认使用本地存储,含有第三方文件存储功能的版本可以配置接入使用MinIO对象存储,下面演示MinIO集群的配置方法,演示主机操作系统为CentOS 8.2,对象存储MinIO版本为2020-08-08T04:50:06Z。本次演示使用4台服务器。
实现规划
| 主机名称 | IP地址 | 安装软件 | 开放端口 | 绑定域名 |
|---|---|---|---|---|
| V1 | ***.100.100.152(公网) 172.26.188.173(内网) | MinIO Nginx | 80 (公网开放) 9000 (内网开放) | img1.diyhi.com |
| V2 | ***.100.241.36(公网) 172.26.188.174(内网) | MinIO Nginx | 80 (公网开放) 9000 (内网开放) | img2.diyhi.com |
| V3 | ***.100.159.63(公网) 172.26.188.175(内网) | MinIO Nginx | 80 (公网开放) 9000 (内网开放) | img3.diyhi.com |
| V4 | ***.92.127.117(公网) 172.26.188.176(内网) | MinIO Nginx | 80 (公网开放) 9000 (内网开放) | img4.diyhi.com |
| S1 | ***.100.153.26(公网) 172.26.188.178(内网) | JDK 1.8 Tomcat 8.5 MySQL 5.7 Nginx | 80 | bbs.diyhi.com |
美女测试

主机配置:V1
安装配置MinIO
1、创建并进入安装目录
输入命令 mkdir /usr/local/minio
输入命令 cd /usr/local/minio
2、下载对应当前系统版本的安装包
输入命令 wget https://dl.min.io/server/minio/release/linux-amd64/minio
3、创建minio启动用户并授权
输入命令 getent group minio || groupadd -r minio
输入命令 getent passwd minio || useradd -r -d /opt -s /bin/nologin -g minio minio
4、minio文件赋予750权限
输入命令 chmod 750 /usr/local/minio/minio
5、创建存放数据目录
输入命令 mkdir /usr/local/minio/data
6、编辑minio配置文件
输入命令 vim /usr/local/minio/minio.conf
将下面的配置内容复制到minio.conf文件中。请按实际情况更改下面的参数,集群下所有节点的账号密码必须一致。
1 | # 指定数据存储目录(注意这个目录要存在) |
7、更改文件、目录属主属组
输入命令 chown -R minio:minio /usr/local/minio
8、设置命令启动服务
输入命令 vim /usr/lib/systemd/system/minio.service
将下面的配置内容复制到minio.service文件中。
1 | [Unit] |
保存配置文件后执行systemctl daemon-reload命令刷新
输入命令 systemctl daemon-reload
| 使用配置好的系统服务管理MinIO | |
|---|---|
| systemctl enable minio | 配置开机启动 |
| systemctl start minio | 启动 |
| systemctl stop minio | 停止 |
| systemctl restart minio | 重启 |
| systemctl disable minio | 删除开机启动 |
| systemctl daemon-reload | 刷新 |
安装配置Nginx
1.下载并安装nginx
输入命令 yum install nginx
2.启动nginx
输入命令 systemctl start nginx
| 使用配置好的系统服务管理Nginx | |
|---|---|
| systemctl enable nginx | 配置开机启动 |
| systemctl start nginx | 启动nginx |
| systemctl stop nginx | 停止nginx |
| systemctl restart nginx | 重启nginx |
| systemctl disable nginx | 删除开机启动 |
| systemctl daemon-reload | 刷新 |
3.配置nginx
默认的配置文件在 /etc/nginx 路径下,使用该配置已经可以正确地运行nginx;如需要自定义,修改其下的 nginx.conf 等文件即可
输入命令 vim /etc/nginx/conf.d/default.conf
配置Nginx参数 请按实际情况更改下面的参数。
1 | # proxy_cache_path 缓存文件路径 需要手动建文件夹 mkdir /etc/nginx/cache |
配置完成保存。 调用nginx -t测试配置文件是否正确
7.日志
访问日志默认路径 /var/log/nginx/access.log
错误日志默认路径 /var/log/nginx/error.log
防火墙开放端口配置
仅允许内网IP访问指定端口
#(1)允许172.26.188.0 IP段访问9000端口
输入命令 firewall-cmd –permanent –add-rich-rule=’rule family=”ipv4” source address=”172.26.188.0/24” port protocol=”tcp” port=”9000” accept’
#(2)允许公网访问80端口
输入命令 firewall-cmd –permanent –zone=public –add-port=80/tcp
#(3)执行完命令要刷新才能生效
输入命令 firewall-cmd –reload
#(4)列出所有的开放端口
输入命令 firewall-cmd –list-all
移除策略
firewall-cmd –permanent –remove-rich-rule=’rule family=”ipv4” source address=”IP地址” port protocol=”tcp” port=”端口号” accept’
#例如移除9000端口策略
firewall-cmd –permanent –remove-rich-rule=’rule family=”ipv4” source address=”172.26.188.0/24” port protocol=”tcp” port=”9000” accept’
输入命令 firewall-cmd –reload 执行完命令要刷新才能生效
主机配置:V2
… …
… …
省略的教程和上面的主机V1配置相同
… …
… …
配置Nginx参数 请按实际情况更改下面的参数。
1 | # proxy_cache_path 缓存文件路径 需要手动建文件夹 mkdir /etc/nginx/cache |
… …
… …
… …
主机配置:V3
… …
… …
省略的教程和上面的主机V1配置相同
… …
… …
配置Nginx参数 请按实际情况更改下面的参数。
1 | # proxy_cache_path 缓存文件路径 需要手动建文件夹 mkdir /etc/nginx/cache |
… …
… …
… …
主机配置:V4
Jenkins 增量构建实战指南 - 2026 年
Jenkins 增量构建实战指南,包含文件变化检测、子模块管理、容器化构建等最佳实践,构建时间从 5 分钟优化到 30 秒。
GitLab CI/CD 最佳实践 - 2026 年完整指南
2026 年 GitLab CI/CD 最佳实践完整指南,包含流水线设计、缓存优化、并行构建、增量构建等实战经验。