目标:在 linux 环境下拉取 gitlab 项目并将其发布到 windows server 服务器下
🤔思路:
- jenkins 所在的服务器直接拉起工程并打包 (笔者的 jenkins 搭建在linux)
- 将打包的工程压缩成 zip 并通过 ftp 上传到 windows server 服务器
- 在 windows server 部署一个 node 工程用于解压 zip 包
- 当 linux 下的 zip 传输到 windows server 后,在 linux 下直接访问 windows server 下的解压压缩包的访问地址 (curl xxx.com/unzip)
⭐思路 1 直接执行 shell
npm install && npm run build
⭐思路 2 和思路 4 配置如下
linux 下的 bat 文件
#!/bin/bash
source /etc/profile
set +x
cd <linux环境下的工程根目录>
zip -q -r -o dist.zip dist/
ftp -i -v -n <<EOF
open <windows server IP> <windows server 端口>
user <ftp账号> <ftp密码>
passive
lcd <linux环境下的工程根目录>
cd <ftp目录下的文件夹>
bin
put dist.zip
bye
EOF
curl <windows server 下的用于解压压缩文件的 node 访问地址> #http://x.x.x.x:6001/unzip?zipUrl=xxx-grid
🌂注意:
思路 2 提到的 ftp 需要在 linux 环境下安装
yum -y install ftp
还需要在 windows server 下创建一个 ftp 账号 👉参考地址
如果不行就百度一下😄, 有一个更好的工具是 ftp server
⭐思路 3 需要写一个 node 工程如下
const fs = require('fs')
const express = require('express');
const unzipper = require('unzipper');
// 创建Express应用
const app = express();
// 定义解压的路由
app.get('/unzip', (req, res) => {
try {
const {zipUrl} = req.query
// 定义要解压的压缩包路径
const compressedFilePath = 'D:\\webapps\\' + zipUrl + '\\dist.zip';
// 定义解压后的文件保存路径
const outputDirectory = 'D:\\webapps\\' + zipUrl;
// 核心执行函数 解压--->删除压缩包
const func = async () => {
// 使用unzipper模块解压压缩包
const archive = await unzipper.Open.file(compressedFilePath)
// 提取压缩包中的所有文件
archive.extract({ path: outputDirectory });
res.json({ message: '解压完成' });
}
// 判断路径是否存在
fs.access(compressedFilePath, err => {
if (err) {
res.json({ message: '解压路径不存在' });
return;
}
func && func()
});
} catch (error) {
res.status(500).json({ error: '解压失败' + error });
}
});
// 启动服务器
app.listen(6001, () => {
console.log('服务器已启动,监听端口 6001');
});
🌂注意:
思路 3 还需要将 node 工程在 windows server 下启动,笔者用到了 pm2 来启动 node 工程,启动好 node 工程还需要将端口暴露到互联网
npm install pm2 -g # 命令行安装 pm2
pm2 start xxx.js
windows server 如何开放端口?
- 打开控制面板
- 点击防火墙
- 打开启用或关闭 windows 防火墙,保证防火墙在启用状态下
- 打开高级设置
- 选择入站规则—-》新建规则
- 弹出新建入站规则向导,选择端口,下一步
- 协议和端口:选择相应的协议,如添加 6001 端口,选择TCP,特定本地端口输入 6001,下一步
- 操作:选择“允许连接”,下一步
- 配置文件:勾选“域”,“专用”,“公司”,点击下一步
- 名称:输入端口名称和描述信息,点击完成
写在最后
坑1:linux 下的 bat 文件要修改成可执行权限,不然 shell 权限将无法执行 (chmod +x xxx.bat)
坑2:本来想 linux 打包后的工程直接通过 ftp 把目录上传到 windows server 上,发现不好传动态文件,就走另一条弯道了,压缩目录上传,然后通过解压地址通知 windows server 解压压缩包
- 本文作者: MrRetro博客
- 本文链接: http://mrretro.gitee.io/retroblog/retroblog/2023/11/19/utils/jenkins配置自动化部署前端工程-保姆教程shell版本/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!