- 阿里云域名配置指向到服务器地址
- 本地通过xshell测试域名是否联通指向服务器
ping test.page.com - 增加nginx代理 ```nginx server { listen:80; # 监听本机所有 ip 上的 80 端口 servername test.page.com; # 域名:www.example.com 这里 ““ 代表获取匹配所有 root /storage/nginx/www/page; # 此处page代表文件夹名称,匹配所有名字发现为test.page.com 时访问代理的文件夹 location / { index index.htm index.html index.php; try_files $uri $uri/ /index.html; } #默认访问根目录进入index主页 }
4. 重启 nginx服务```shellsystemctl stop nginxsystemctl start nginx
- 检查 访问 test.page.com 是否出现502/404提示
cd /storge/node进入node文件配置- 前端项目配置脚本
新增oss配置
```javascript const OSS = require(‘ali-oss’); const util = require(‘util’); const fs = require(‘fs’); const path = require(‘path’);
const readdir = util.promisify(fs.readdir); const stat = util.promisify(fs.stat);
class OssClient { constructor() { this.client = new OSS({ region: ‘xxxxxxxxxxx’, accessKeyId: ‘xxxxxxxxxxx’, // process.env.ACCESSKEYID, accessKeySecret: ‘xxxxxxxxxxx’, // process.env.ACCESSKEYSECRET, bucket: process.env.NODE_ENV === ‘production’ ? ‘xxxxxxxxxxx’ : ‘xxxxxxxxxxx’, // process.env.BUCKET, }); }
async putStream(dir, ossDir = ‘/‘, fileName) { try { const stream = fs.createReadStream(path.resolve(dir, fileName)); return await this.client.putStream(ossDir + fileName, stream); } catch (e) { console.log(e); } }
async putDir(dir, ossDir) {
let files;
try {
files = await readdir(dir);
} catch (e) {
console.log(【当前目录不存在】 -- ${dir} --);
return undefined;
}
for (const i in files) {const state = await stat(`${dir}/${files[i]}`);if (state.isDirectory()) {await this.putDir(`${dir}/${files[i]}`, `${ossDir}/${files[i]}`);} else {await this.putStream(dir, `${ossDir}/`, files[i]);}}
}
async upload() { try { await this.putDir(path.resolve(__dirname, ‘dist’), ‘sass-erp-page’); } catch (e) { console.log(‘【上传异常请重试】’, e); } } }
new OssClient().upload() .then(() => { console.log(‘上传成功’) }) .catch((error) => { console.log(‘上传异常’, error); });
<a name="y2phX"></a>##### 根目录下新增build-test.sh```shell#!/usr/bin/env bashecho "编译开始..."git pullyarnnpm run build:testnpm run oss:testecho "编译完成..."echo "复制文件到nginx 静态目录..."rm -rf /storage/nginx/www/page/*\cp -rf dist/index.html /storage/nginx/www/pageecho "发布完成..."
在package.json中增加执行脚本
{..."build:test":"cross-env ENV_NODE=test umi build","oss:test":"cross-env ENV_NODE=test node oss.client.js"}
- 拉取线上代码,切换分支,执行脚本
git clone ... # 项目git路径cd /storge/node/page # 进入项目目录git checkout develop # 切换分支git pull # 拉取代码sh build-test.sh #执行脚本
以上前端项目服务器环境配置完成
自动化ci/cd配置
在Jenkins新建项目
- 添加项目描述
源代码管理选择Git
- Repositories 地址为GitLab项目地址
- 指定分支(为空时代表any)
- 构建触发器 选择Generic Webhook Trigger
- 设置token (可选令牌。如果已指定,则只有在调用http://JENKINS_URL/generic-webhook-trigger/invoke时提供了该令牌,才能触发此作业)
构建=》Execute shell
cd /storage/node/pagesh build-test.sh
保存
- 打开GitLab当前项目的设置
- 点击集成
- url:http://JENKINS_URL/generic-webhook-trigger/invoke (JENKINS_URL本地集成环境;有token携带token)
- 保存当前设置
自动化ci/cd配置配置完成
