之前讲过一篇通过 gitlab-ci 来完成前后端项目的打包和部署,但在新公司里,用的都是 jenkins 完成持续集成、持续部署的流程。因此本篇文章就是讲在服务器上通过 docker 安装 jenkins 服务,并对 jenkins 进行配置,完成可以打包 Node 前后端并部署到另一台服务器(一般我们打包和部署都是在不同的服务器,避免互相影响等)。

首先大家需要两台服务器,如果打包后的服务部署到一台服务器,也可以,不推荐而已。

一台2核4G用来部署jenkins服务,一台1核2G部署打包后的服务。

一、安装 Docker

linux服务器使用curl下载快速安装的shell脚本

curl -fsSL get.docker.com -o get-docker.sh

下载完成后,可以ls命令查看一下。已经存在的话,使用sh命令执行这个脚本

sh get-docker.sh

注意如果不是root用户,需要使用sudo su获取超级管理员权限。

安装完成后启动一下Docker Server

systemctl start docker

使用docker version命令能看到ClientServer就启动成功了。

二、使用 Docker 安装 Jenkins

1. 拉取 jenkins 镜像

推荐jenkinsci/blueocean这个镜像,官方推荐的比较稳定。

docker pull jenkinsci/blueocean

2. 启动 Jenkins 服务

docker run -d --name jenkins -p 8080:8080 -p 50000:50000 jenkinsci/blueocean

启动后可以通过docker ps来查看服务情况。

这里还要说下,在云服务器的防火墙里打开8080端口才能访问哦。

然后通过服务器ip:8080端口就可以访问我们的 jenkins 服务啦。

docker部署angular和node docker部署node项目_jenkins

3. 配置初始化 Jenkins

获取初始化密码

通过docker exec -it jenkins bash进入容器内

然后cat /var/jenkins_home/secrets/initialAdminPassword查看初始化密码

安装推荐插件

然后就进入到安装插件的页面,安装推荐插件即可

docker部署angular和node docker部署node项目_服务器_02

创建用户

下一步进入到创建管理员用户

docker部署angular和node docker部署node项目_docker_03

再之后是选择jenkinsurl地址,然后会重启jenkins,重启后就正式进入到界面啦。

docker部署angular和node docker部署node项目_服务器_04

三. 配置 Jenkins 实现打包 Node 前后端服务

1. 安装插件

需要安装两个插件,在

首页 > 系统管理 > 插件管理 > 可选插件 > 搜索选中 NodeJS > 安装完成后重启服务

  • NodeJs: 代码打包时需要的环境
  • Publish Over SSH: 打包完成后通过这个插件ssh连接发送到远程服务器

Publish Over SSH在官方看到的解释是因为安全原因下架了,目前在插件管理里面搜索不到。

我们通过清华大学开源软件镜像站下载。

在里面搜索下载

  • publish-over-ssh.hpi
  • jsch.hpi
  • publish-over.hpi

因为publish-over-ssh依赖下面两个插件,所以需要一起下载。下载后在 首页 > 系统管理 > 插件管理 > 高级 > 上传插件

上传后重启下jenkins

docker部署angular和node docker部署node项目_docker_05

2. 配置一下 NodeJS 插件版本

这一步是因为有时候用最新的版本安装包会失败,推荐使用最新的稳定版本,我这里是使用的16.13.1这个版本。在

首页 > 系统管理 > 全局工具工具配置 > NodeJS > 新增

docker部署angular和node docker部署node项目_ci_06

填入别名,以及选择NodeJS版本。

3. 新建项目任务实现构建及部署

(1) 首页 > 新建任务 > 构建一个自由风格的软件项目

docker部署angular和node docker部署node项目_ci_07

(2) git源码管理

配置这一步是让jenkins去哪个git仓库拉取代码。

docker部署angular和node docker部署node项目_node.js_08

  • Repository URL: git仓库的地址
  • Credentials: 连接git仓库的认证方式,一般使用Username with password或者Secret Text的方式,前者就是用户名和密码的方式,后者是需要生成token密钥,用密钥连接。
  • Branches to build: 指定拉取的分支
(3) 指定构建环境

docker部署angular和node docker部署node项目_jenkins_09

构建环境这里选择之前我们配置好的node版本。

(4) 构建脚本

构建 > 增加构建步骤 > 执行 shell

docker部署angular和node docker部署node项目_jenkins_10

如上图输入构建命令,先使用npm打包构建,然后进行压缩打包,方便进行远程服务的传输。

这一步配置完成后,打包建构完成后,可以进到容器内的/var/jenkins_home/workspace这个目录看打包之后的情况。

docker部署angular和node docker部署node项目_docker_11

(5) 把打包后的包发送到远程服务器进行部署

首页配置下publish over sshssh连接配置。

在 首页 > 系统管理 > 系统配置 > Publish over SSH > 新增

docker部署angular和node docker部署node项目_node.js_12

填入这几个配置项,主要是HostnameUsername,勾选上Use password authentication, or use a different key,然后输入Password

有个Test Configuration,可以测试下是否连接成功。

返回刚才创建的项目的配置。

构建后操作选择

docker部署angular和node docker部署node项目_docker_13

之后进行配置

docker部署angular和node docker部署node项目_服务器_14

  • Source files: 源文件,也就是刚才我们压缩好的文件,dist.tar.gz
  • Remove prefix: 移除的前缀,就是移除压缩文件前面的dist文件夹,不然移到远程服务器后也有dist文件夹
  • Exec command: 完成把文件移动到远程服务器后执行的shell命令,这里大概就是清空之前的项目文件夹下所有文件,然后解压dist.tar.gz到项目文件夹下,最后删除dist.tar.gz压缩包

到此我们就完成了所有步骤,从用 Docker 完成 Jenkins 服务,并配置 Jenkins 来打包构建我们的项目,最后 SSH 连接到远程服务器完成代码部署。其实这里可以通过 Docker 来部署我们的服务,如果需要的话,后面可以详细讲讲。到此,如果还有什么不懂的小伙伴可以评论区留言哈~!