使用GitHub动作和铁路简化Node.js应用程序部署
#javascript #node #githubactions #railway

有效,可靠地部署node.js应用程序对于现代开发工作流程至关重要。值得庆幸的是,随着强大的自动化工具和云平台的出现,该过程变得更加精简。

通过利用Github动作和铁路组合的功能,开发人员不仅可以简化其node.js应用程序的部署,而且还可以建立一个无缝的连续交付管道。

这种功能强大的组合可以简化和自动化node.js应用程序的部署,并结合连续集成/连续交付|部署(CI/CD)实践。在我的上一个article中,我更多地阐明了与Node.js应用程序中的github Action的连续集成。

连续交付可以通过从代码更改到生产部署来自动化整个软件发布过程,从而实现频繁且可靠的版本。一旦通过必要的测试和检查,连续部署将其更进一步。

在本文中,我们将详细介绍为Node.js应用程序部署设置GitHub操作和铁路的分步过程,涵盖了从初始设置到定义部署工作流程的所有内容,并最终无缝部署我们的应用程序。

现在,让我们潜入并探索GitHub的行动和铁路如何帮助我们在编码上花费更多的时间进行编码,而在基础架构管理上更少。

github动作:自动化github工作流程

github操作使在GitHub存储库中易于自动化,自定义和执行我们的软件开发工作流程。它允许开发人员创建自定义工作流,以自动化各种任务,包括构建,测试和部署代码更改。这些工作流是在YAML文件中定义的,可以通过诸如Code推出,拉请请求和发表评论之类的事件触发。

github动作的一些关键特征包括:

  • 与GitHub存储库轻松集成。
  • 支持多种编程语言和框架。
  • 能够在不同的操作系统和虚拟环境上运行工作流程。
  • 支持自定义动作和第三方集成。
  • 详细的日志和报告,以帮助诊断问题并跟踪进度。

铁路:毫不费力地部署应用程序

铁路是一个强大的平台,可以使管理和部署应用程序更容易。它是一个为程序员提供快速有效的运输项目的平台。它照顾了与基础架构设置相关的麻烦,从而使开发人员专注于开发代码。只需几个命令或配置步骤,开发人员就可以使用铁路轻松启动其应用程序。它提供一键部署,这使得在各种环境中分发程序变得易于使用。铁路剥夺了基础设施的细节,使部署变得简单。它试图为开发人员提供一种简单的方法,即不必担心复杂的基础架构安排,将其应用程序快速部署到云中。

这是一些杰出的功能,使铁路成为托管应用程序的首选:

  • 零 - 零时间部署:可以在没有任何停机时间的情况下部署应用程序,或者根据其Home Page, +99%的正常运行时间。
  • 闪电般的构建:铁路使用Docker来构建应用程序,因此构建是闪电般的。这意味着可以快速,轻松地运输新代码。
  • 实时日志和指标:铁路为应用程序提供实时日志和指标,从而轻松快捷地解决问题。
  • 配置作为代码:铁路允许使用代码自动化部署和基础架构管理,从而提高一致性。
  • 秘密管理:开发人员有能力保持独立的开发,分期和生产环境,同时安全管理秘密。
  • 基于用法的定价:根据实际用法计算资源使用情况,消除了过度提供的需求并允许更有效的成本管理。

GitHub动作 +铁路:控制应用程序部署

尽管可以在推动更改时将GitHub存储库直接链接到铁路项目以进行自动部署,但使用GitHub操作提供了多种优势,例如:

  • 自定义:GitHub操作和工作流文件提供灵活性和自定义选项,以根据特定要求量身定制CI/CD管道。例如,可以为多个分支或不同的触发器设置工作流程(推或拉请求)。
  • 与测试和构建过程集成:GitHub操作无缝地集成了测试框架和构建过程。我们可以合并自动测试,代码质量检查并在我们的工作流程中构建步骤。该集成确保在部署前对所有更改进行了彻底的测试和验证。
  • 广泛的行动生态系统:GitHub动作具有庞大的预建动作生态系统,可以将其纳入工作流程中。这些动作涵盖了广泛的功能,例如部署到各种平台,在不同环境中运行测试以及与外部服务进行交互。利用这些动作简化了部署过程,并扩展了我们工作流的功能。

先决条件

要在本文中遵循以下内容:

在铁路上创建一个项目

创建铁路帐户后,我们需要创建一个项目。

  • 首先,单击新项目按钮。

New Project

  • 接下来,创建一个空模板。

Empty Template

获得身份验证令牌

创建了我们的项目后,我们需要获得一个令牌,该令牌将与Github与铁路通信。为此,我们需要遵循以下步骤:

  • 导航到项目设置。
    Project Settings

  • 单击令牌选项卡。
    Tokens Tab

  • 创建一个新的令牌。我们可以随心所欲地称之为。在这里,它叫做GITHUB_TOKEN
    New Token

  • 复制新创建的令牌。
    Copy Token

将身份验证密钥添加到GitHub

出于本文的目的,我们将利用此存储库:gh-actions-demo。这是用于本文的项目:Implementing Continuous Integration for Node.js Apps with GitHub Actions。我们还将采用此项目的工作流文件。

现在,要添加从上一节获得的身份验证令牌到GitHub,我们需要遵循以下步骤:

  • 转到存储库的设置。

  • 单击秘密和变量,然后在动作上。

  • 接下来,单击新的存储库秘密按钮。
    New Secret

  • 添加身份验证令牌,并将名称设置为 railway_token。
    Token Name

它应该显示新添加的令牌是存储库的秘密之一。
Repo Secrets

添加我们的工作流文件

现在,我们已经将铁路令牌放到了适当的位置,现在我们可以创建触发服务器更改的工作流程。目前,我们的main.yml文件看起来像这样:

main.yml

name: Node.js CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - name: Use Node.js 14
      uses: actions/setup-node@v3
      with:
        node-version: 14
        cache: 'npm'

    - run: npm install
    - run: npm test

在此阶段,所有这些工作流程基本上都是要安装我们的应用程序的依赖项并测试应用程序。为了说明部署过程,我们将在工作流文件中添加以下片段:

- name: Install Railway # 1
  run: npm i -g @railway/cli

- name: Deploy # 2
  run: railway up
  env:
    RAILWAY_TOKEN: ${{ secrets.RAILWAY_TOKEN }} # 3
  1. 第一个命令负责安装将用于部署的铁路CLI。

  2. 第二个命令是实际启动部署的命令。

  3. 在整个部署过程中,铁路需要知道我们已有授权,因此检查了RAILWAY_TOKEN。这就是为什么我们需要将其添加为存储库的秘密。

注意:铁路CLI与Node.js 16+一起使用,因此我们也会更改。

制作这些功能后,我们的工作流文件现在应该看起来像:

main.yml

name: Node.js CI/CD

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - name: Use Node.js 16
      uses: actions/setup-node@v3
      with:
        node-version: 16
        cache: 'npm'

    - run: npm install
    - run: npm test

    - name: Install Railway
      run: npm i -g @railway/cli

    - name: Deploy
      run: railway up
      env:
        RAILWAY_TOKEN: ${{ secrets.RAILWAY_TOKEN }}

现在,我们将进行这些更改,并将它们推向GitHub以触发部署工作流程。推动更改后,在存储库中应看到一个绿色的选中标记,该存储库表示我们的工作流程成功。
Workflow Image

同样,当我们导航到铁路上的项目时,我们应该看到部署成功。

Railway Image

公开我们的应用程序

在此关头,该应用程序已被部署,但对每个人都看不到。这意味着我们需要为其生成一个域,以便任何具有链接的人都可以访问我们的应用程序。这可以通过以下步骤来完成:

  • 单击设置进行项目设置。

  • 单击生成域

Generate domain

应生成一个链接。

Domain link

  • 单击链接,它应该返回预期的响应。

Response

结论

总而言之,GitHub Action和Railway的组合提供了一种有力的解决方案,用于简化Node.js应用程序的部署。通过集成这两个平台,开发人员可以自动化整个CI/CD管道,减少手动努力并确保一致且可靠的部署。

使用GitHub操作,开发人员可以灵活地定义自定义工作流程,自动化构建和测试过程,并与各种工具和服务无缝集成。