利用 Docker + Jenkins 打造高效的 Node.js 自动化部署

介绍

前端开发中,部署是一个不可避免的环节。传统的手动部署方式效率低,易出错,且不利于项目的持续迭代。近年来,Docker 和 Jenkins 等工具的出现带来了一种高效的自动化部署方式,本文将介绍如何利用 Docker 和 Jenkins 打造高效的 Node.js 自动化部署方案。

需求分析

自动化部署是基于代码的自动构建和发布流程。在 Node.js 项目中,我们需要对代码进行构建、打包和发布操作。具体而言,我们需要将代码克隆到服务器,进行构建和测试,然后启动应用。这些操作均可以通过脚本自动完成。Docker 可以通过容器化技术实现快速构建和发布应用。Jenkins 是一个流行的自动化构建工具,可以将每次代码提交触发自动构建和测试,并发布应用到服务器上。

技术分析

Docker 和 Jenkins 是本文实现自动化部署的关键技术。Docker 是目前非常流行的容器化技术,在部署应用时,可以大幅减小环境差异。本文将使用 Docker 镜像来部署 Node.js 应用。Jenkins 是一个流行的自动化构建工具,它支持多种编程语言的自动构建和测试,具有强大的插件扩展能力。

实现步骤

下面将介绍如何通过 Docker 和 Jenkins 实现自动化部署。

Docker 镜像构建

首先,我们需要构建一个 Docker 镜像。在项目的根目录下创建一个 Dockerfile 文件。

---- ------------
------- ------------
---- ------------- --
--- --- -------
---- - -
------ ----
--- ------- --------

这个 Dockerfile 使用官方 Node.js 12.16.1 镜像为基础镜像,将工作目录设为 /usr/src/app,并将 package*.json 文件复制到工作目录下,运行 npm install 安装依赖,然后将当前目录下的所有文件复制到工作目录中。最后,设置容器对外暴露的端口为 3000,并在容器启动时运行 npm start 命令启动应用。

完成 Dockerfile 编写后,我们可以使用 docker build 命令构建镜像,在项目根目录下运行以下命令:

- ------ ----- -- ------------------ -

这个命令将会构建一个名为 my-node-app 的镜像,并指定其标签为 latest。

Jenkins 配置

接下来,我们需要在 Jenkins 中配置自动化构建流程。

安装插件

本文将使用 Jenkins 配合 Git 插件,实现通过每次代码提交触发自动化构建和部署。我们需要安装以下插件:

  • Git plugin:Jenkins 的 Git 插件,用于集成 Git 代码库。
  • Docker plugin:Jenkins 的 Docker 插件,用于容器构建和发布。
  • NodeJS Plugin:Jenkins 的 Node.js 插件,用于安装和管理 Node.js。

可以在 Jenkins 的插件管理页面中搜索并安装以上插件。

新建项目

在 Jenkins 中新建一个 Freestyle 项目,并配置 Git 代码库地址和构建触发器。我们选择 SCM Polling 触发器,并设置轮询频率为每分钟监测一次 Git 仓库的变化。

构建步骤配置

在构建步骤中,我们需要执行以下操作:

  1. 安装构建所需 Node.js 版本

    在 NodeJS 插件配置中指定 Node.js 版本即可。

  2. 安装依赖

    在执行构建命令之前,我们需要先安装项目的依赖。可以通过 Execute Shell 步骤执行以下命令:

    - --- -------
  3. 构建 Docker 镜像

    执行以下构建 Docker 镜像的命令:

    - ------ ----- -- ------------------ -
  4. 部署 Docker 容器

    在 Docker 插件中配置相关参数,执行以下命令:

    - ------ ---- ----------- -- ----
    - ------ -- ----------- -- ----
    - ------ --- -- -- --------- ------ ----------- ------------------

    这个命令将会停止并删除之前的容器(如果存在),然后运行新的容器。

  5. 清理 Docker 容器

    如果您希望在构建时清理旧的 Docker 容器,可以在 Docker 插件配置中勾选 Remove Docker Container 选项。

操作演示

为了更好地演示本方案,我们将使用一个简单的 Node.js 应用程序。该应用程序使用 Express 创建了一个基本的 Web 服务器,并在 / 路由上输出一个简单的文本。

-- --------
----- ------- - ------------------
----- --- - ---------

----- ---- - ----

------------ ----- ---- -- -
  ---------------- ---------
--

---------------- -- -- -
  ---------------- --------- -- ---- ------------
--

请注意,为了支持自动化构建,我们还需要将 package.json 文件中的启动命令修改为 npm start,如下所示:

-
  ------- --------------
  ---------- --------
  -------------- --- ------- -----
  ---------- -
    -------- ----- ---------
  --
  --------------- -
    ---------- ---------
  -
-

首先,我们需要在本地安装 Docker 和 Jenkins。

然后,我们可以使用以下命令在本地启动 Jenkins:

- ------ --- -
  -- ---- -
  -- --------- -
  -- ------------------------------ -
  -- ----------------------------------------- -
  -- -------------------------------- -
  -------------------

现在,我们可以访问 http://localhost:8080 来打开 Jenkins,进行一系列配置,创建 Jenkins 作业,或者在 Jenkins 中导入一个简单的 pipline 脚本。以 pipline 方式为例,我们可以使用以下代码:

-------- -
  ----- ---
  ------ -
    ----------------- -
      ----- -
        ---------
          ---- -
            ------- ---------
            --------- ------- -------------
            ------------------ ------ ----------------------------------------------
          --
          ------------------ -----
        -
      -
    -
    -------------- -
      ----- -
        ------------------------------ -------- ------ --------- ------- -
          -- ---- --------
          -- ------- ----- -- ------------------ --
        -
      -
    -
    --------------- -
      ----- -
        ------------------------ --- -------------- ----------------- -
          ---------------------- ------------------------------ -
            -- ------- ---- -------- -- -----
            -- ------- -- -------- -- -----
            -- ------- --- -- -- --------- ------ -------- -------------------
          -
        -
      -
    -
  -
-

实现过程中,我们需要事先创建好包含 Dockerfile 文件和应用代码的 Git 仓库。对于 Jenkins 的 Docker Server 环境和 Registry 权限申请,可以参考 Docker 官方文档。

总结

本文介绍了如何利用 Docker 和 Jenkins 实现 Node.js 自动化部署,以及相关的详细实现步骤。通过 Docker 镜像化技术和 Jenkins 的自动化构建平台,可以大大提高前端项目的部署效率,且代码发布的过程中不必再为环境配置问题而头疼。在实际使用时,需要根据具体项目的需求和实际情况进行相应的调整和修改。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/65aa2b65add4f0e0ff3bcede


猜你喜欢

  • Cypress 测试自动化中如何构建交互式流程测试

    前言 Cypress 是一个现代化的前端测试工具,它采用了链式调用的方式,使得编写测试变得更加直观和简单。在 Cypress 中,我们可以编写各种类型的测试,例如对单个元素的断言测试,对整个应用的功能...

    9 个月前
  • 在 Taro 框架中使用 ESLint

    在 Taro 框架中使用 ESLint 随着前端开发的不断发展,代码规范已经成为了日常开发不可忽略的一部分,也有利于多人协作完成大型项目。ESLint 作为常用的 JavaScript 语法检查工具,...

    9 个月前
  • 在使用 Chai 进行 API 测试时如何处理 POST 请求中的 form data

    在使用Chai进行API测试时如何处理POST请求中的form data 在进行API测试时,我们通常会使用Chai进行断言测试,从而检查API是否按照我们的预期工作。

    9 个月前
  • 解锁 MySQL 索引性能优化之道

    MySQL 是一种广泛使用的关系型数据库管理系统,它的性能优化对于现代互联网应用非常重要。索引是 MySQL 中一个非常重要的概念,因为它可以提高查询的速度。然而,如果不正确使用索引,反而会降低查询性...

    9 个月前
  • Kubernetes 中的容器编排实践之 Knative

    在 Kubernetes 容器编排技术的广泛应用中,Knative 是一种重要的开源平台,它为构建、部署和管理托管服务提供了强大的基础设施支持。Knative 的目标是让开发者能够更加专注于编写业务逻...

    9 个月前
  • MongoDB 中的 MapReduce 运算使用与优化技巧分享

    MapReduce 运算简介 MapReduce 是一种分布式数据处理模型,最初由 Google 提出,作为大规模数据处理的解决方案。后来,它成为了 Hadoop 的核心处理方式,并被广泛应用于大数据...

    9 个月前
  • Serverless 经验总结:如何应用异步调用云函数减少接口响应时间?

    简介 随着云计算的普及,Serverless架构应运而生。它是一种极具弹性、资源管理自动化的构架模式,已成为云计算领域内越来越受欢迎的技术。Serverless架构通过分离应用程序的代码和基础设施的代...

    9 个月前
  • ES10 中引入的 BigInt 类型的性能优化探究

    在 JavaScript 中,我们经常会遇到大数运算的问题,例如超过 253 或 -253 的数值就会超出 Number 能表示的范围,导致计算结果错误。 为了解决这个问题,ES10 引入了 BigI...

    9 个月前
  • Deno 中如何使用 async/await?

    在 Deno 中,async/await 是实现异步编程的常见方式之一。通过使用 async/await,我们可以轻松地将异步代码编写成同步风格的代码,使代码更加易于理解和维护。

    9 个月前
  • RxJS 操作及其在 Angular 应用中的实践

    RxJS 是一个让开发者能够方便地处理异步的 JavaScript 库。通过 RxJS,我们可以使用响应式编程的思想,将所有异步操作都当作流来处理,使得我们的代码更加简洁、易于维护。

    9 个月前
  • 如何从 LESS 样式表中自动生成 CSS 样式表?

    LESS 是一种动态样式语言,它可以像 CSS 一样编写,同时又具有变量、函数、条件语句等许多 CSS 不具备的功能特性。 LESS 可以实现简化 CSS 开发的目标,并且其代码易于维护和扩展。

    9 个月前
  • Angular 中如何优化 ng-options 的性能

    在 Angular 中,ng-options 是一个非常常用的指令,用于创建一个下拉列表,但是如果数据量太大,它的性能会变得非常低。因此,在使用 ng-options 时,需要进行一些优化以提高其性能...

    9 个月前
  • ES6 媒体查询在响应式设计中的应用

    响应式设计旨在为不同设备和屏幕大小提供一致的用户体验。媒体查询是实现响应式设计的关键之一,它可以根据设备的屏幕大小自动应用不同的样式。在本文中,我们将介绍 ES6 中的媒体查询,并探讨如何在响应式设计...

    9 个月前
  • 详解 ECMAScript 2016 中的字符串扩展语法和函数

    ECMAScript 2016 是 JavaScript 语言的一个版本,它引入了许多新的语法和函数,其中最值得关注的是字符串扩展语法和函数。本文将详解 ECMAScript 2016 中的字符串扩展...

    9 个月前
  • Vue.js 中使用 store 管理全局数据源

    在 Vue.js 中,我们常常需要共享一些数据,比如用户信息、语言代码、主题等等。为了方便管理这些数据,我们可以使用 Vuex,一个 Vue.js 的状态管理插件,来进行全局数据的管理。

    9 个月前
  • 解决 Next.js 引入外部 JS 库的问题

    在 Next.js 中,我们经常会需要引入外部的 JavaScript 库,比如 jQuery、React、Ant Design 或是自己开发的组件库。但是,由于 Next.js 的服务器渲染和客户端...

    9 个月前
  • PM2 服务器监控:如何实现日志实时以及进程 切换及负载均衡

    在前后端分离和微服务架构的背景下,服务器集群和负载均衡技术已经成为了必备的系统组成部分。但是,一个高可用的服务器系统不仅仅需要集群和负载均衡,还需要对服务器进程的监管和管理,以及日志的统一收集和分析。

    9 个月前
  • 基于 React Redux 打造可配置的通用业务表单(附源码)

    随着 Web 应用的不断发展,业务表单作为 Web 应用的重要组成部分之一,在 Web 应用中的作用越来越被重视。然而,开发表单页面过程中,总是需要不断地去实现各种各样的表单、表单组件,导致代码重复,...

    9 个月前
  • Node.js 中的路由处理教程

    概述 在 Node.js 中,路由是指根据用户请求的 URL,来将请求发送到不同的处理程序或函数。路由处理是一个前端开发中广泛使用的技术,它可以让应用程序的后台能够响应不同的 URL 请求。

    9 个月前
  • Cypress 测试自动化中如何处理网络请求

    Cypress 是一个非常流行的前端测试框架,它可以协助我们进行端到端测试,并提供了非常便捷的 API 来处理各种场景。在实际的测试过程中,我们常常需要模拟网络请求,并对请求返回的数据进行断言,那么在...

    9 个月前

相关推荐

    暂无文章