【Linux】云服务器自动化部署VuePress博客(Jenkins)
前言
博主此前是将博客部署在 Github Pages(基于 Github Action)和 Vercel 上的,但是这两种部署方式对于国内用户很不友好,访问速度堪忧。因此将博客迁移到自己的云服务器上,并且基于 Jenkins(一款开源持续集成工具)实现本地推送代码后,自动化集成部署
环境
云服务器:CentOS 7,OracleJDK 11
本地主机:Windows 11
安装配置
Jenkins
官网安装介绍(Redhat):Redhat Jenkins Packages
注意:最新版本 Jekins 最好适配 jdk11,使用 jdk8 可以正常启动,但是可能会有其他错误
导入密钥
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
下载安装
yum install jenkins -y
查看目录
rpm -ql jenkins
启动应用
默认启动
# 端口默认8080
java -jar /usr/share/java/jenkins.war --httpPort=8090
常用命令
systemctl start jenkins
systemctl stop jenkins
systemctl status jenkins
# 开机自启动
systemctl enable jenkins
重启命令:http://<公网ip/域名>:8090/restart
修改配置
打开配置文件
vim /usr/lib/systemd/system/jenkins.service
配置文件修改如下(JDK 安装目录以本地为准)
# 安装的OracleJDK则需配置下面两项
Environment="JAVA_HOME=/usr/java/jdk-11.0.20"
Environment="JENKINS_JAVA_CMD=$JAVA_HOME/bin/java"
# 如果使用root用户则配置下面两项
User=root
Group=root
# 更换端口
Environment="JENKINS_PORT=8090"
初次启动时 systemctl start jenkins
执行时间可能略长
打开应用
浏览器访问:http://<公网ip/域名>:8090
注意:外部浏览器访问需要开启对应端口号防火墙,阿里云服务器还需要打开相应安全组
按照上述提示得到密码,执行如下命令
cat /root/.jenkins/secrets/initialAdminPassword
之后选择安装默认工具或是自己手动安装均可
直接使用 admin 用户登陆即可,密码就在上面的文件/root/.jenkins/secrets/initialAdminPassword
中
创建任务
博客仓库地址
安装插件
安装 nvm-wrapper 插件(没有 nvm 可以直接安装 node 插件),并重启
CentOS7 不兼容 node 高版本问题参考文末博客仓库中的链接
注意:设置 nvm 默认 node 版本命令
nvm alias default <version>
General
源码管理
有时候添加上述 git 地址后会爆出错误:stderr: No ECDSA host key is known for github.com
解决方案
rm -f ~/.ssh/known_hosts
git ls-remote -h git@github.com:ReturnTmp/blog-vuepress-vdoing.git HEAD
添加凭证
选择 SSH Username with private key
描述和 ID 可以随意,最后 Key 直接复制 SSH 私钥即可
构建触发器
添加 Webhooks,Payload Url 填写 http://<公网ip/域名>:8090/github-webhook/ 即可,最后点击创建
构建环境
echo $WORKSPACE
node -v
npm -v
npm install
npm run build
构建成功后之后部署 Nginx 即可
部署 Nginx
nginx.conf(vuepress 自行更改为自己的工程名)
location / {root /var/lib/jenkins/workspace/vuepress/docs/.vuepress/dist;index index.html index.htm;try_files $uri $uri/ /index.html;}
访问应用
浏览器访问:http://<IP或域名>/
修改本地代码推送到远程分支,观察到 Jenkins 出现新的构建记录,WebHooks 即配置成功
本文对应博客仓库地址,本文也同步更新在仓库博客中,直接从仓库中进入博客链接首页即可看到文章
有任何问题或错误欢迎大家在评论区指出
参考文章
Jenkins实现Vuepress自动化部署(上)-安装配置Jenkins - 掘金 (juejin.cn)
Jenkins实现Vuepress自动化部署(下)-Jenkins任务配置自动化部署 - 掘金 (juejin.cn)
推荐阅读
Centos 7 安装 Jenkins-阿里云开发者社区 (aliyun.com)
本文由博客一文多发平台 OpenWrite 发布!
相关文章:

【Linux】云服务器自动化部署VuePress博客(Jenkins)
前言 博主此前是将博客部署在 Github Pages(基于 Github Action)和 Vercel 上的,但是这两种部署方式对于国内用户很不友好,访问速度堪忧。因此将博客迁移到自己的云服务器上,并且基于 Jenkins(一款开源持续…...
Golang字符串处理深入解析:探索 strings 标准库的全部方法
Golang 的 strings 标准库提供了许多用于处理字符串的函数。以下是一些主要的方法: Contains(s, substr string) bool: 检查字符串是否包含子串。ContainsAny(s, chars string) bool: 检查字符串是否包含字符集中的任何字符。ContainsRune(s string, r rune) bool:…...

如何在群辉NAS系统下安装cpolar套件,并使用cpolar内网穿透?
如何在群辉NAS系统下安装cpolar套件,并使用cpolar内网穿透? 文章目录 如何在群辉NAS系统下安装cpolar套件,并使用cpolar内网穿透?前言1. 在群辉NAS系统下安装cpolar套件2. 管理隧道列表3. 创建固定数据隧道 前言 群晖作为大容量存储系统,既可…...

opencv基础57-模板匹配cv2.matchTemplate()->(目标检测、图像识别、特征提取)
OpenCV 提供了模板匹配(Template Matching)的功能,它允许你在图像中寻找特定模板(小图像)在目标图像中的匹配位置。模板匹配在计算机视觉中用于目标检测、图像识别、特征提取等领域。 以下是 OpenCV 中使用模板匹配的基…...
搜索插入位置
题目描述: 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target …...
Centos Linux快速复制文件并查看进度的方法(保留文件原始时间戳等属性)
用cp命令保证快速复制,screen保证不丢失你对cp命令执行情况的掌控。 需要用到screen软件包,防止复制过程中终端被关闭。 centos linux直到7默认都没有screen,需要安装一下 普通账户: sudo yum -y install screen root账户&am…...

牛奶产业链的工业“链主品牌”利乐是如何诞生的?
瑞典的利乐公司,一个在乳品产业链中占据重要地位的“链主品牌”,通过提供创新的包装材料和解决方案,在全球范围内占据了显著的市场份额。利乐从不生产一滴奶,却赚取了中国乳业 75%的利润,一年创收超过 800 亿人民币。在…...

【历史上的今天】8 月 11 日:苹果电脑之父诞生;阿里巴巴收购雅虎中国;OpenAI 击败电竞世界冠军
整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来。 今天是 2023 年 8 月 11 日,在 1999 年的今天,欧亚一些地区观赏到了一次壮丽的日全食景象。这次日全食是本世纪最后一次日全食,将持续两分钟…...
Flutter 报错 Could not create task ‘xxx‘.this and base files have different roots
遇到此问题也是先去百度了,有的说改了Gradle版本、gradle-wrapper.properties版本和ext.kotlin_version版本之后解决的,我没尝试,我用蹩脚的英语大致读了一下就不是这样说的,况且我用有道翻译了也不是这个意思啊,我不知…...

单调递增的数字——力扣738
文章目录 题目描述解法题目描述 解法 #include<iostream> #include<string>using namespace std;int monotoneIncreasingDigits...

STL文件格式详解【3D】
STL(StereoLithography:立体光刻)文件是 3 维表面几何形状的三角形表示。 表面被逻辑地细分或分解为一系列小三角形(面)。 每个面由垂直方向和代表三角形顶点(角)的三个点来描述。 切片算法使用…...

【分布式技术专题】RocketMQ延迟消息实现原理和源码分析
痛点背景 业务场景 假设有这么一个需求,用户下单后如果30分钟未支付,则该订单需要被关闭。你会怎么做? 之前方案 最简单的做法,可以服务端启动个定时器,隔个几秒扫描数据库中待支付的订单,如果(当前时间-订…...

Qt中ffmpeg API存储和显示摄像头视频
Qt中ffmpeg API存储和显示摄像头视频的功能需要之前写的视频ffmpegAPI的视频播放的流程。 代码源码位置:https://download.csdn.net/download/qq_43812868/88157743?spm1001.2014.3001.5503 一、存储和显示摄像头的视频的流程 这是读取打开视频文件的流程&#x…...
jfinal tomcat部署
首先明确一下 JFinal 项目是标准的 java web 项目,其部署方式与普通 java web 项目没有任何差别。Java Web 项目在 Tomcat 下部署有一些不必要的坑需要避免,所以撰写此文方便大家绕过一些坑,以下部署以 linux 为例,windows 与此类…...
Linux - MongoDB 数据库自动退出服务问题/闪退
问题:MongoDB 自动退出服务问题 原因: 由于 Mongodb 服务,使用过多系统内存,导致系统强制停止 Mongodb 服务。 解决方法: 在 mongodb.conf 配置文件内,添加新配置内容: wiredTigerCacheSi…...
B2B2C多语言电商系统平台搭建,多用户商城系统搭建(app、小程序、微商城)
搭建B2B2C多语言电商系统平台以及多用户商城系统(包括app、小程序、微商城)的步骤如下: 步骤一:需求分析和规划 1. 确定项目的目标和范围。明确平台所需的功能、支持的语言、用户权限等要求。 2. 分析竞争对手,并确定…...

【MySQL】创建高级联结
目录 一、使用表别名 二、使用不同类型的联结 1.自联结 2.自然联结 3.外部联结 3.使用带聚集函数的联结 4.使用联结和联结条件 一、使用表别名 别名除了用于列名和计算字段外,SQL还允许给表名起别名。 起别名有两个好处: 一个是缩短SQL语句&am…...

chatGPT应用于房地产行业
作为 2023 年的房地产专业人士,您无疑认识到技术对行业的重大影响。近年来,一项技术进步席卷了世界——人工智能。人工智能彻底改变了房地产业务的各个方面,从简化管理任务到增强客户互动。 在本文中,我们将探讨几种巧妙的人工智…...
java之jmh初识及使用
最近有场景需要数据支撑json的toJsonString方法和java原生的toString方法的运行速度,因此选用了JMH测试工具。 以下代码大致意思是:初始化一个list集合,放入100个对象,然后遍历这个集合,调用fastjson的toJsonString方…...

利用状态监测和机器学习提高冷却塔性能的具体方法
在现代工业生产中,冷却塔扮演着至关重要的角色,它们的性能直接影响着工艺流程的稳定性和效率。为了确保冷却塔的正常运行和减少系统故障,状态监测和机器学习成为了关键技术。 图.冷却塔(PreMaint) 在前文《基于人工智…...

C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...
C++ 类基础:封装、继承、多态与多线程模板实现
前言 C 是一门强大的面向对象编程语言,而类(Class)作为其核心特性之一,是理解和使用 C 的关键。本文将深入探讨 C 类的基本特性,包括封装、继承和多态,同时讨论类中的权限控制,并展示如何使用类…...

ZYNQ学习记录FPGA(二)Verilog语言
一、Verilog简介 1.1 HDL(Hardware Description language) 在解释HDL之前,先来了解一下数字系统设计的流程:逻辑设计 -> 电路实现 -> 系统验证。 逻辑设计又称前端,在这个过程中就需要用到HDL,正文…...
使用python进行图像处理—图像滤波(5)
图像滤波是图像处理中最基本和最重要的操作之一。它的目的是在空间域上修改图像的像素值,以达到平滑(去噪)、锐化、边缘检测等效果。滤波通常通过卷积操作实现。 5.1卷积(Convolution)原理 卷积是滤波的核心。它是一种数学运算,…...
【2D与3D SLAM中的扫描匹配算法全面解析】
引言 扫描匹配(Scan Matching)是同步定位与地图构建(SLAM)系统中的核心组件,它通过对齐连续的传感器观测数据来估计机器人的运动。本文将深入探讨2D和3D SLAM中的各种扫描匹配算法,包括数学原理、实现细节以及实际应用中的性能对比,特别关注…...