Jenkins+Docker 持续集成、部署(CI/CD)项目实践

简介

前端项目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:
Jenkins+Docker 持续集成、部署(CI/CD)项目实践_第1张图片
流程:

  • 检查参数
  • 安装依赖并打包成静态文件(Docker中)
  • 归档静态文件

withDockerContainer 声明该管道在Docker内执行,会启动容器并把当前工作目录挂载映射到Docker容器内,在Docker容器内操作不会污染到宿主机,如为了加速可以在容器内安装cnpm而不影响到宿主机。该管道执行后,容器会自动停止

使用archiveArtifacts artifacts 对静态文件归档
归档的静态文件在:
${JENKINS_URL}job/${project_name}/job/${GIT_BRANCH}/${BUILD_NUMBER}/artifact/${tar_file_name}

后端Jenkinsfile:
Jenkins+Docker 持续集成、部署(CI/CD)项目实践_第2张图片
流程:

  • 检查参数
  • 安装依赖,因为用了ts,全部转为js
  • 拿到前端归档文件移动到指定目录
  • 构建镜像(使用Dockerfile)
  • 发布镜像
  • 发送邮件通知

使用 copyArtifacts filter 获得上一次成功归档的静态文件,注意需要先安装Copy Artifact 插件

构建项目

点击对应分支并点击构建即开始构建项目,构建完成后,会发送邮件通知
Jenkins+Docker 持续集成、部署(CI/CD)项目实践_第3张图片
可以设置web-hook 进行自动化构建,即push或者merge代码后,会对指定分支进行自动构建
gitlab 已经实现,后续会放上教程
github 目前还没是实现(努力ing......)

你可能感兴趣的