Docker + Jenkins 持续部署 React 应用

背景

在前端开发中,我们常常需要将我们的应用部署到服务器上供客户使用。而传统的部署方式需要手动打包,并将打包好的文件上传至服务器,这种方式很麻烦且容易出错。因此,我们需要一个更加高效和可靠的部署方式。

这时候,Docker 和 Jenkins 就发挥了重要作用。Docker 可以帮我们快速构建应用的镜像,并进行容器化部署,而 Jenkins 可以帮我们实现持续集成和持续部署。

搭建部署环境

我们需要先安装 Docker 和 Jenkins,这里不进行详细介绍。安装完之后,我们需要在 Docker 中创建一个名为 react-app 的镜像。假设我们的 React 应用代码已经准备好,代码目录为 /path/to/app。

首先,我们需要在该目录下创建一个 Dockerfile 文件,文件内容如下:

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

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

这个 Dockerfile 的作用是:

  1. 首先,在 node:14.17.3-alpine3.14 镜像上构建一个中间镜像 build。
  2. 在中间镜像中安装应用所需的依赖并执行 npm run build 命令构建应用。
  3. 在 nginx:1.21.3-alpine 镜像上构建一个最终镜像,并将之前中间镜像构建好的应用复制到该镜像中,并暴露容器的 80 端口。

接下来,我们需要使用该 Dockerfile 构建镜像:

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

构建完成后,我们可以使用 docker images 命令查看到刚才创建的名为 react-app 的镜像。

现在我们需要使用 Jenkins 来实现持续部署。

Jenkins 配置

首先,我们需要在 Jenkins 中安装 Docker 插件。安装完成后,我们需要在 Jenkins 中配置 Docker。

  1. 在 Jenkins 的系统管理中配置 Docker 地址和连接仓库的凭证。
  2. 在 Jenkins 的全局工具配置中配置 Docker CLI 工具。在 Name 填写 Docker,选择安装自动安装的 Docker CLI。

接下来,我们需要在 Jenkins 中配置构建任务。我们可以在 Jenkins 中使用 docker-compose 来进行容器化部署。我们需要在应用代码目录下创建一个 docker-compose.yml 文件,文件内容如下:

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

这个 docker-compose.yml 文件的作用是:

  1. 构建两个镜像 web 和 api。
  2. 将应用代码目录挂载到容器内。
  3. 分别在 3000 和 3001 端口上暴露服务。
  4. web 和 api 之间互相依赖。

接下来,我们需要在 Jenkins 中配置构建任务:

  1. 新建任务,选择构建一个自由风格的项目。

  2. 在源码管理中配置 Git 仓库地址和凭证,并填写分支。

  3. 在构建触发器中可以选择自动触发任务,并配置触发条件。

  4. 在构建中选择执行 shell 命令,并填写:

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

    该命令的作用是:构建镜像、停止之前的容器并删除、启动容器。

  5. 在 Post-build Actions 中选择 Docker Push Publisher 插件,配置镜像名称和仓库地址,并勾选 push latest tag。

    该过程中,我们需要使用到 Jenkins 中的凭证来进行 Docker Hub 权限操作,因此需要先创建凭证并配置到 Jenkins 中。

  6. 保存配置。

现在,我们已经成功搭建好了 Docker 和 Jenkins 环境,并完成了部署自动化。

总结

Docker 和 Jenkins 的持续部署对于前端开发来说很重要,它可以帮我们实现自动化部署,提高开发效率,同时增加部署可靠性。在进行持续集成和持续部署之前,我们需要熟悉 Docker 和 Jenkins 的使用,并具备一定的容器化开发能力。

示例代码

  1. Dockerfile
---- ----------------------- -- -----
------- ----
--- ---- ----------------------------
---- ------------- --
--- --- -------
---- - -
--- --- --- -----

---- -------------------
---- ------------ ---------- ---------------------
------ --
--- --------- ----- ------- ------
  1. docker-compose.yml
-------- ---
---------
  ----
    ------ -----------------------
    -------- -- -- ---- ------- -- --- ------
    --------
      - ------
    ------
      - ---------
    -----------
      - ---
  ----
    ------ -----------------------
    -------- -- -- ---- ------- -- --- ------
    --------
      - ------
    ------
      - ---------
    ------------
      - ------------
  1. Jenkinsfile
-------- -
  ----- ---
  ----- -
    ------ --------
  -
  ------ -
    ------------ ------------ -
      ----- -
        --- ------- --------- -------------- ------------------------ ---- ---------------------------
      -
    -
    ------------ ------ ------- -
      ----- -
        -- ---
          -------------- -----
          -------------- ----
          -------------- -- --
        ---
      -
    -
    ----------- ------ ----- -- ------ ----- -
      ----- -
        ------------------------------------------------ ------------------------ ----------------- ------------------ ----------------- -------------------- -
          -- ------- ----- -- ------------------ -- -------------------
        -
        -------------------------------------------- ------------------------ -
          -- --------------- -----
        -
      -
    -
  -
-

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


猜你喜欢

  • React+PWA 项目的全过程

    摘要 React 是一个流行的 JavaScript 库,用于构建用户界面。Progressive Web App(PWA)则是一种 Web 应用程序,它采用渐进式增强策略,具有类似原生应用程序的用户...

    1 年前
  • Material Design 中使用 RecyclerView 实现 List 和 Grid 布局的完美展示

    Material Design 是一个流行的设计语言,在 Android 平台上得到了广泛应用。而 RecyclerView 是一个强大的组件,可以帮助我们在应用程序中显示大量数据。

    1 年前
  • 在 Mocha 和 Chai 中使用 fixtures 进行测试

    在 Mocha 和 Chai 中使用 Fixtures 进行测试 前言 在前端开发中,单元测试是非常重要的一个环节。它可以保证代码的质量,减少 bug 的出现,提高开发效率。

    1 年前
  • Web Components 构建的页面性能分析工具

    随着 Web 应用程序的复杂度不断增加,对于页面性能的优化也变得尤为重要。于是我们需要一套性能分析工具,以便识别并解决性能问题。本篇文章介绍一种使用 Web Components 构建的页面性能分析工...

    1 年前
  • ES10 中实现 Promise.all() 方法的手写示例

    简介 Promise.all() 方法在前端开发中是非常常见的一种异步编程解决方案。它实现了在一组 Promise 执行完毕后再进行下一步操作的功能,极大地方便了我们在业务逻辑代码中的编写。

    1 年前
  • 如何在 Fastify 框架中使用 Sequelize ORM

    Fastify 是一个快速、低开销和可扩展的 Node.js Web 应用程序框架,它提供了极佳的性能和安全性。而 Sequelize 则是一个基于 Promise 的 Node.js ORM(对象关...

    1 年前
  • Kubernetes 中 Ingress 资源的使用详解

    在 Kubernetes 中,Ingress 是一种管理 URL 的方式。它允许将多个服务发布到同一个 IP 地址和端口上,根据请求的 URL 路径将流量路由到不同的服务上。

    1 年前
  • Next.js 引入第三方组件遇到的问题及解决方法

    在开发前端应用过程中,引入第三方组件是一个家常便饭的操作,无论是为了提高开发效率、降低代码复杂度,还是为了实现一些特定的功能,在引入第三方组件时我们总是能够找到非常多的选择。

    1 年前
  • 解决使用 LESS 时出现的变量无法被识别的问题

    LESS 是一种 CSS 预编译语言,它可以帮助我们更加高效地编写 CSS 样式,并且支持像变量、嵌套、混合等高级特性。然而,有时候我们在使用 LESS 编写样式时,可能会遇到变量无法被识别的问题,这...

    1 年前
  • 在 Node.js 应用中如何处理 WebSocket 与 Socket.io 之间的切换

    在 Node.js 应用中如何处理 WebSocket 与 Socket.io 之间的切换 随着实时通信需求的增加,WebSocket 和 Socket.io 成为了前端开发中最常用的两种实现实时通信...

    1 年前
  • 如何使用 Express.js 进行 Web Scraping

    Web Scraping 是一种从网站上提取数据的技术。使用 Web Scraping 可以方便地从多个网站上获取数据,然后进行分析、处理或存储等操作。在前端开发中,我们往往需要使用 Web Scra...

    1 年前
  • Mocha 测试框架中的数据驱动测试技巧与最佳实践

    Mocha 是一个非常受欢迎的 JavaScript 测试框架。在 Mocha 中,数据驱动测试技巧可以让我们更方便地在不同的输入下进行测试。本文将介绍 Mocha 测试框架中的数据驱动测试技巧与最佳...

    1 年前
  • 使用 GraphQL 完成 React 应用的 CRUD 操作

    随着技术的不断进步,前端开发也越来越复杂,而 RESTful API 已经成为前后端交互的主要方式。但是,在某些场景下,RESTful API 可能会导致数据冗余和查询效率低下等问题。

    1 年前
  • CSS Flexbox 中 margin 使用方式详解

    在网页制作中,CSS 格式控制是至关重要的,而其中的 Flexbox 布局又是极具实用性的一种。但是其中的 margin 使用却常常会被忽视,误用 margin 可能会导致排版出现不可预期的问题。

    1 年前
  • MongoDB 批量写入操作优化技巧分享

    前言 MongoDB 是一款非常流行的 NoSQL 数据库,支持高并发、分布式、高可用等,适用于大规模的数据存储和处理。在前端开发中,MongoDB 也是一种常用的数据库,特别适用于实时数据处理和存储...

    1 年前
  • Babel7 如何处理 ES6 的新特性?

    ES6 是 ECMAScript 2015 的简称,它是 JavaScript 的一个重要更新版本。ES6 引入了许多新的语法和特性,如箭头函数、模板字符串、变量声明、类定义、模块导入导出等。

    1 年前
  • 如何在 Headless CMS 中使用 Webhooks?

    随着互联网技术的不断发展,前端开发已经成为了当今全球最受欢迎的技术之一。随着前端开发的日益成熟,越来越多的企业开始考虑使用 Headless CMS 管理其 Web 应用程序的内容。

    1 年前
  • RESTful API 中使用 OAuth2 身份验证最佳实践

    随着 RESTful API 的普及,越来越多的应用需要利用这种方式提供服务。而使用 RESTful API 的应用通常需要身份验证保证安全性。其中,OAuth2 身份验证机制已经成为一种流行的标准。

    1 年前
  • 对 CPU 使用率进行优化的方法

    在前端开发中,我们经常需要优化代码,以提高网站的性能。其中一个重要的优化就是对 CPU 使用率进行优化,以减少电力消耗和延长设备的使用寿命。本文将介绍一些优化 CPU 使用率的方法,以及如何在代码中实...

    1 年前
  • 如何使用 ES2020 的 BigInt 类型解决 JavaScript 中的大数运算问题

    在 JavaScript 中,数字类型是 Number,在实现上只能存储 2^53 的大小。因此,在进行大数运算时,可能会遇到数字精度不足的情况,无法进行正确的计算。

    1 年前

相关推荐

    暂无文章