简介
前端项目Vue,后端项目egg.js
传统做法,前端项目打包得到dist静态文件,然后人肉复制到后端项目的静态目录下,打包整个后端工程并放到服务器,安装依赖启动服务,整个过程不仅繁琐还容易出错,还易出现"明明我本地没问题的啊,怎么线上不行了"、“运维这你的问题”
使用Jenkins+Docker进行部署
1.前端项目构建,在Docker容器中打包,对dist静态文件归档
2.后端项目构建,拿到上次归档静态文件,打包、安装依赖,并把整个后端工程打包成一个镜像
3.进行镜像发布,一般使用docker-compose进行发布
整个过程都在Jenkins流水线中完成,运维只需要在线上机器上pull指定的镜像并进行容器热更新即可,减少了人工犯错的可能,大大的提高了效率
准备
一台Linux机器,并安装Git,Jenkins和Docker,网上教程很多,此处不再搬砖
新建Jenkins多分支流水线任务
可参考 Jenkins 配置多分支流水线项目(github)
配置邮件提醒
可参考 Jenkins Pipeline配置自动发送QQ邮件
编写Jenkinsfile
项目根目录下必须包含Jenkinsfile文件
Jenkinsfile基本语法,语法比较简单,可参考 Jenkins Pipeline语法
我的前端Jenkinsfile:
流程:
- 检查参数
- 安装依赖并打包成静态文件(Docker中)
- 归档静态文件
withDockerContainer 声明该管道在Docker内执行,会启动容器并把当前工作目录挂载映射到Docker容器内,在Docker容器内操作不会污染到宿主机,如为了加速可以在容器内安装cnpm而不影响到宿主机。该管道执行后,容器会自动停止
使用archiveArtifacts artifacts 对静态文件归档
归档的静态文件在:${JENKINS_URL}job/${project_name}/job/${GIT_BRANCH}/${BUILD_NUMBER}/artifact/${tar_file_name}
后端Jenkinsfile:
流程:
- 检查参数
- 安装依赖,因为用了ts,全部转为js
- 拿到前端归档文件移动到指定目录
- 构建镜像(使用Dockerfile)
- 发布镜像
- 发送邮件通知
使用 copyArtifacts filter 获得上一次成功归档的静态文件,注意需要先安装Copy Artifact 插件
构建项目
点击对应分支并点击构建即开始构建项目,构建完成后,会发送邮件通知
可以设置web-hook 进行自动化构建,即push或者merge代码后,会对指定分支进行自动构建
gitlab 已经实现,后续会放上教程
github 目前还没是实现(努力ing......)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。