# 准备工作
## Git Repository
1. 待发布的 Git 仓储,如 git@git.■■■■:group/project.git 仓储。
2. 待发布的 Git 分支,如 dev-v1.0.0 分支。
3. 仓储根下 /dist/ 目录,如 /dist/1.0.0/home.index.html 文件。
4. [可选]仓储根下 /package.json 文件,含有 dependencies 或 devDependencies 节点。
5. [可选]仓储根下 /gulpfile.js 文件,含有 build 任务。
## Jenkins Job
1. 向配置管理员(■■■) 申请创建各个环境的 Job 配置。
2. 提供项目的 Git 仓储地址和默认发布的 Git 分支名。
3. 告知是否存在 /package.json 文件,即是否需要安装项目依赖。
4. 告知是否存在 /gulpfile.js 文件,即是否需要执行构建任务。
5. 申请为 Job 分配相应的管理人员和操作权限。
# 构建发布
## 环境配置
1. node v6.9.2
2. npm 3.10.9
3. cnpm 4.4.2
4. gulp 3.9.1
##平台流程
1. Jenkins 平台为每个 Job 分配相应的工作目录,可手工或自动清理该目录。
2. 找到相应 Job 后,触发 Build 或 Build with Parameters 操作。
3. 填写需要发布的 Git 分支名,生产环境固定为 master 分支。
4. 拉取指定的 Git 仓储和分支,放置于相应的工作目录。
5. [可选]执行 cnpm install 命令,查找 /package.json 文件,安装 npm 依赖。
6. [可选]执行 gulp build –env=<dev|test|prod> 命令,查找 /gulpfile.js 文件,调用 build 任务。
7. 增量复制 /dist/ 目录下哈希值变更的文件,至 nginx 服务器指定目录下,如 /usr/■■■■/group/project/ 目录。
8. 生产环境发布后,平台会自动刷新当前目录在 CDN 中的缓存,刷新功能有每日次数限制。
9. 生产环境发布后,平台会在当前分支自动创建标签,格式为 release_yyyy-MM-DD_${BUILD_NUMBER} 标准。
10. 可通过域名访问,检查是否部署成功,如测试地址 https://static.■■■■/■■■■/group/project/1.0.0/home.index.html 或生产地址 https://static.■■■■/■■■■/group/project/1.0.0/home.index.html 路径。
[可选]使用业务域名访问入口页面
上述流程结束后,入口页面需要使用 static.■■■■ 或 static.■■■■ 域名访问,并携带长长的 /■■■■/group/project/1.0.0/home.index.html 路径。
如果希望使用自定义的业务域名访问,如 xxx.■■■■/1.0.0/home.index.html 或 xxx.■■■■/1.0.0/home.index.html 方式,需要运维对Nginx进行配置。
测试环境的Nginx只有一套,不区分“对内(内网)”和“对外(外网)”。生产环境的Nginx有两套,区分“对内(内网)”和“对外(外网)”,内外网之间有网络隔离,一般无法相互访问。
运维在相应环境(生产环境一般是对外)的Nginx中,将 xxx.■■■■ 或 xxx.■■■■ 映射至 /usr/■■■■/group/project/ 目录。即拦截该域名下的所有请求至前端部署目录。
如果后端接口在同一个域名下,如 xxx.■■■■/path/file.json 接口,就需要运维识别并转发(非重定向)部分请求至后端服务器。
我们约定运维拦截以 api 目录开头的路径,并将后续的路径(不含 api 目录)转发至后端服务器。此时前端需要在原接口请求的路径中加入 api 目录。
如:前端发出接口请求 xxx.■■■■/api/path/file.json 被Nginx拦截并转发后,后端接收到的请求路径为 /path/file.json 并不知道上层路径结构。
注意:此方案将拦截全部非 api 目录的请求,即意味着无法处理同步 404 和 500 等网络请求错误。且如需使用第三方支付系统回调通知校验等业务场景,就需要在 api 目录中指定相应处理路径。
《[存档]基于 Jenkins 和 Git 实现服务器构建和发布》上有1条评论