使用Jenkins自动部署nodejs应用 (转载)

简介:

想必部署过nodejs应用的朋友都有过这样的经历:

1、通过ssh登录服务器

2、进入nodejs目录

3、执行:git pull 命令拉取最新代码

4、执行:npm install 安装新依赖

5、执行:pm2 restart all 重新启动所有nodejs进程

如果我们只有一台机器,并且更新不是很频繁,似乎这样的操作还是可以接受,但是如果我们有4台nodejs应用的服务器,每次的代码改动将是灾难!

好在我们有Jenkins帮助我们做这些事情,Jenkins是一个可以自动远程部署,执行远程脚本命令的工具,它被称为持续集成工具,我们可以通过docker来快速搭建一个Jenkins服务。

 

一、安装docker,拉取images,启动container

 

在centos7下,只需要执行

1
2
3
yum  install  docker
service docker start
ps  -ef| grep  docker

在centos6下,需要分别执行

1
2
3
4
5
yum  install  sudo
sudo  yum  install  -y epel-release
sudo  yum  install  -y docker-io
service docker start
ps  -ef| grep  docker

 

进入 jenkins 的官方docker镜像地址:

https://registry.hub.docker.com/_/jenkins/

然后根据说明执行:

1
docker pull jenkins

拉取好镜像之后,我们先创建目录,然后启动docker的container

1
2
mkdir  /var/jenkins_home
docker run -d --name myjenkins -p 49001:8080 - v  /var/jenkins_home : /var/jenkins_home  jenkins

 

二、安装nginx

安装并启动nginx,把如下代码放在配置文件中,添加一个server节点,反向代理到docker

1
2
3
4
5
6
7
8
9
10
11
upstream app {
     server 127.0.0.1:49001;
}
server {
     listen 80;
     server_name jenkins.your-domain.com;
 
     location / {
         proxy_pass http: //app ;
     }
}

这样打开浏览器我们就可以看到jenkins的首页了

三、配置jinkens

我们首先需要进入jinkens添加用户,这里不累述了,根据提示一步步即可完成。

然后我们要安装插件,依次进入:

系统管理 -> 插件管理 -> 高级(选项卡)-> 底部立即获取按钮

 稍等片刻,就可以把可用插件更新下来,然后我们选择安装如下几个插件:

1
2
3
4
5
6
7
8
GIT client plugin
GIT plugin
Git server plugin
GitHub API Plugin
GitHub plugin
SSH Credentials Plugin
SSH plugin
Publish Over SSH

安装完成后,重新启动 jenkins。如果无法自动重启,可以输入 '/restart' 在地址栏,即可手动重启。

四、添加remote计算机

我们jenkins是安装在docker中的,所以就算部署到本机,对于jenkins也是remote外部的机器,需要使用ssh来连接,我们需要添加ssh主机,来让jenkins联入。

依次进入  系统管理 -> 系统设置

如下图增加remote server,这个是增加ssh remote 插件的服务器

 

下图是增加远程拷贝文件的remote server

 

 

五、创建项目

我现在在github上建了一个nodejs的helloworld项目:

https://github.com/DoubleSpout/jenkinsNodejs

我们需要在jenkins中也创建一个相应的项目来,依次点击:新建 ->  取名为 nodejsPublish

 进入项目,点击配置,我们就可以对这个项目进行配置,让它自动部署

1、设置 git 仓库路径:

如下图,因为是公共仓库,所以不需要验证用户名,密码:

 

2、构建完毕之后,将代码打包保存

我们先如下图,增加一个构建完毕的shell脚本执行

然后些如下图脚本,打包代码,然后移动到workspace目录下

3、接着我们需要连接到部署服务器上,将原来的服务暂时暂停,删除上一次部署的压缩包,选择添加远程shell脚本执行,如下图:

 

写如下脚本,将pm2服务停止,这里大家可以根据自己的要求暂停脚本

 4、最后我们要把打包好的代码发送到服务器上,然后执行安装依赖包操作,并且启动nodejs服务,选择通过ssh发送文件并执行命令到远程服务器,如图:

 下图的 source files 的默认当前路径就是workspaces,remote directory的当前路径就是之前添加服务器设置的,这里我设置为 /var/nodejs

下面的命令很简单,解压代码,执行依赖包安装,然后通过pm2启动nodejs服务。

 

5、开始构建

配置好上述命令之后,我们点击保存,然后点击立即构建,出现蓝色的球,就表示构建成功,红色的球表示构建失败,黄色的球表示执行构建命令失败,如下图,就是正在构建和发布:

 

 

不论构建成功还是失败,我们可以通过查看控制台输出看到构建的结果:

 

如果我们有多台设备,就只需要配置一次,然后以后每次有代码变更,手动点击立即构建即可自动部署到目标服务器,免去我们枯草的重复劳动。当然其他语言,例如python,php都是可以这样来部署的。

 


本文转自 zbill 51CTO博客,原文链接:http://blog.51cto.com/dek701/1966929,如需转载请自行联系原作者

相关文章
|
1月前
|
Web App开发 监控 JavaScript
【Node系列】创建第一个服务器应用
Node.js是一个基于Chrome V8引擎的JavaScript运行环境,可以用于构建高性能的网络应用程序。它采用事件驱动、非阻塞I/O模型,使得程序可以以高效地方式处理并发请求。
23 4
|
7月前
|
JavaScript 前端开发 Python
Node.js在Python中的应用实例demo
Node.js在Python中的应用实例demo
|
7月前
|
jenkins 持续交付 数据安全/隐私保护
企业实战(23)基于Docker平台的Jenkins凭据管理与应用(4)
企业实战(23)基于Docker平台的Jenkins凭据管理与应用(4)
|
7月前
|
JavaScript 前端开发 API
Node.js在Python中的应用实例解析
Node.js在Python中的应用实例解析
|
5月前
|
负载均衡 JavaScript 算法
Node.js 多进程的概念、原理、优势以及如何使用多进程来提高应用程序的性能和可伸缩性
Node.js 多进程的概念、原理、优势以及如何使用多进程来提高应用程序的性能和可伸缩性
50 1
|
5天前
|
开发框架 JavaScript 中间件
中间件应用Koa.js(Node.js)
【5月更文挑战第3天】我们添加了两个中间件。第一个中间件记录请求的开始时间,并在下一个中间件执行完毕后计算并打印出请求的总时间。第二个中间件与之前的示例相同,它设置响应体为 "Hello World"
22 6
中间件应用Koa.js(Node.js)
|
16天前
|
JavaScript 前端开发 持续交付
【专栏】Vue.js和Node.js如何结合构建现代Web应用
【4月更文挑战第27天】本文探讨了Vue.js和Node.js如何结合构建现代Web应用。Vue.js作为轻量级前端框架,以其简洁易懂、组件化开发、双向数据绑定和虚拟DOM等特点受到青睐;而Node.js是高性能后端平台,具备事件驱动、非阻塞I/O、丰富生态系统和跨平台优势。两者结合实现前后端分离,高效通信,并支持热更新、持续集成、跨平台和多端适配,为开发高性能、易维护的Web应用提供强有力的支持。
|
1月前
|
存储 JavaScript 前端开发
Angular 应用 node_modules 子文件夹 @types 的作用介绍
Angular 应用 node_modules 子文件夹 @types 的作用介绍
15 1
|
22小时前
|
存储 监控 JavaScript
使用Node.js构建实时聊天应用的技术指南
【5月更文挑战第12天】本文指导使用Node.js、Express.js和Socket.IO构建实时聊天应用。技术栈包括Node.js作为服务器环境、WebSocket协议、Express.js作为Web框架和Socket.IO处理实时通信。步骤包括项目初始化、安装依赖、搭建服务器、实现实时聊天功能、运行应用以及后续的完善和部署建议。通过这个指南,读者可以学习到创建简单实时聊天应用的基本流程。
|
5天前
|
JavaScript 中间件 API
中间件应用Express.js(Node.js)
【5月更文挑战第3天】我们定义了一个名为 `logger` 的中间件函数。它接受请求对象、响应对象以及下一个中间件函数作为参数。当接收到请求时,它会打印出请求的 HTTP 方法和 URL,然后调用 `next()` 函数来将控制权传递给下一个中间件或路由处理器。我们使用 `app.use()` 方法将 `logger` 中间件添加到了应用级别的中间件堆栈中,这意味着它将对所有请求生效。
16 3
中间件应用Express.js(Node.js)