使用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,如需转载请自行联系原作者

相关文章
|
2月前
|
JavaScript 前端开发 API
探索后端技术:Node.js的优势和实际应用
【10月更文挑战第6天】 在当今数字化时代,后端开发是任何成功软件应用的关键组成部分。本文将深入探讨一种流行的后端技术——Node.js,通过分析其核心优势和实际应用案例,揭示其在现代软件开发中的重要性和潜力。
185 2
|
1月前
|
监控 JavaScript 算法
如何使用内存监控工具来定位和解决Node.js应用中的性能问题?
总之,利用内存监控工具结合代码分析和业务理解,能够逐步定位和解决 Node.js 应用中的性能问题,提高应用的运行效率和稳定性。需要耐心和细致地进行排查和优化,不断提升应用的性能表现。
181 77
|
1月前
|
存储 缓存 JavaScript
如何优化Node.js应用的内存使用以提高性能?
通过以上多种方法的综合运用,可以有效地优化 Node.js 应用的内存使用,提高性能,提升用户体验。同时,不断关注内存管理的最新技术和最佳实践,持续改进应用的性能表现。
126 62
|
1月前
|
存储 缓存 监控
如何使用内存监控工具来优化 Node.js 应用的性能
需要注意的是,不同的内存监控工具可能具有不同的功能和特点,在使用时需要根据具体工具的要求和操作指南进行正确使用和分析。
71 31
|
1月前
|
JavaScript 前端开发 API
深入理解Node.js事件循环及其在后端开发中的应用
本文旨在揭示Node.js的核心特性之一——事件循环,并探讨其对后端开发实践的深远影响。通过剖析事件循环的工作原理和关键组件,我们不仅能够更好地理解Node.js的非阻塞I/O模型,还能学会如何优化我们的后端应用以提高性能和响应能力。文章将结合实例分析事件循环在处理大量并发请求时的优势,以及如何避免常见的编程陷阱,从而为读者提供从理论到实践的全面指导。
|
1月前
|
JavaScript
如何使用内存快照分析工具来分析Node.js应用的内存问题?
需要注意的是,不同的内存快照分析工具可能具有不同的功能和操作方式,在使用时需要根据具体工具的说明和特点进行灵活运用。
45 3
|
1月前
|
监控 前端开发 jenkins
Jenkins 在前端项目持续部署中的应用,包括其原理、流程以及具体的实现方法
本文深入探讨了Jenkins在前端项目持续部署中的应用,涵盖其基本原理、流程及具体实现方法。首先介绍了Jenkins的基本概念及其在自动化任务中的作用,随后详细解析了从前端代码提交到生产环境部署的全过程,包括构建、测试、部署等关键步骤。最后,强调了持续部署中的代码质量控制、环境一致性、监控预警及安全管理等注意事项,旨在帮助开发者高效、安全地实施持续部署。
67 5
|
1月前
|
Web App开发 JSON JavaScript
Node.js 中的中间件机制与 Express 应用
Node.js 中的中间件机制与 Express 应用
|
3月前
|
JavaScript 开发者
深入理解Node.js事件循环及其在后端开发中的应用
【8月更文挑战第57天】本文将带你走进Node.js的事件循环机制,通过浅显易懂的语言和实例代码,揭示其背后的工作原理。我们将一起探索如何高效利用事件循环进行异步编程,提升后端应用的性能和响应速度。无论你是Node.js新手还是有一定经验的开发者,这篇文章都能给你带来新的启发和思考。
|
2月前
|
运维 JavaScript Linux
容器内的Nodejs应用如何获取宿主机的基础信息-系统、内存、cpu、启动时间,以及一个df -h的坑
本文介绍了如何在Docker容器内的Node.js应用中获取宿主机的基础信息,包括系统信息、内存使用情况、磁盘空间和启动时间等。核心思路是将宿主机的根目录挂载到容器,但需注意权限和安全问题。文章还提到了使用`df -P`替代`df -h`以获得一致性输出,避免解析错误。