.ebextensions 与 CodePipeline 和 Elastic Beanstalk

.ebextensions with CodePipeline and Elastic Beanstalk

我开始使用托管在 github 上的 node.js 应用开发我的第一个 CodePipeline。我想创建简单的管道如下:

  1. Github 回购触发管道
  2. 测试环境(Elastic Beanstalk 应用程序)是从 S3 .zip 文件构建的
  3. 测试环境 运行s npm testnpm lint
  4. 如果一切正常,则构建 QA 环境(另一个 EB 应用)

对于上面的管道,我在 .ebextensions 目录下创建了 .config 个文件:

  1. 我想将 npm install --production 用于 QA 和 PROD 环境,但似乎 EC2 找不到节点或 npm。我检查了日志,默认情况下在临时文件夹中触发了 EC2 npm install,然后它在我的第一个脚本上失败并且应用程序目录始终为空。

container_commands: install-dev: command: "npm install" test: "[ \"$NODE_ENV\" = \"TEST\" ]" ignoreErrors: false install-prod: command: "npm install --production" test: "[ \"$NODE_ENV\" != \"TEST\" ]" ignoreErrors: false

  1. 是否可以在没有 jenkins 的情况下 运行 单元测试和 linting?

container_commands: lint: command: "npm run lint" test: "[ \"$NODE_ENV\" = \"TEST\" ]" ignoreErrors: false test: command: "npm run test" test: "[ \"$NODE_ENV\" = \"TEST\" ]" ignoreErrors: false

我为每个 Elastic Beanstalk 实例设置了 NODE_ENV。不管每次我的管道因为 npm is not recognized 而失败时我会做什么,但是如果我 运行 宁 64 位亚马逊 Linux 和 node.js 怎么可能?更重要的是,我在 AWS Docs 中找不到任何关于带有 node.js 的 CodePipeline 的示例。提前致谢!

您是否已将 CodeBuild 整合到您的管道中?

你应该

1) 创建一个管道,其来源是您的 github 帐户。完成设置过程,以便在特定分支上提交会触发 Codepipeline

2) 在您的 Codepipeline 中创建一个利用 CodeBuild 服务的测试阶段。为了 运行 您的 Node 测试,您可能需要提供配置好的构建环境。您可能还需要提供一个构建规范文件,该文件将测试指定为 运行 等

3) 假设测试阶段通过,您可以确定管道是否继续到另一个阶段,该阶段链接到支持 Node 平台的 elasticbeanstalk 应用程序环境。这些环境纯粹用于已通过测试的工件,因此我认为没有必要编写上面的 .ebextensions 命令。

阅读 CodeBuild 可以做什么来帮助您 运行 测试 Node,

https://aws.amazon.com/codebuild/

祝你好运!

如果您将 AWS 用于 CI/CD,则可以将 CodeBuild. However, Github provides a great feature called Actions 用于 运行 单元测试,我发现这比 AWS 简单得多。无论如何,我将引导您完成这两个示例:

使用 AWS 进行 运行 单元测试

基本上,您可以在 CodePipeline 中创建一个新阶段,并为 运行 单元测试配置 CodeBuild,例如

首先,在您的应用程序的根文件夹中添加一个 buildspec.yml 文件,以便您可以使用以下示例:

version: 0.2

phases:
  install:
    runtime-versions:
      nodejs: 10  
    commands:
      - echo Installing Mocha globally...
      - npm install -g mocha
  pre_build:
    commands:
      - echo Installing dependencies...
      - npm install
      - npm install unit.js
  build:
    commands:
      - echo Build started on `date`
      - echo Run Unit Tests and so on 
      - npm run test
      - npm run lint
  post_build:
    commands:
      - echo Build completed on `date`

# THIS IS OPTIONAL
artifacts:
  files:
    - app.js
    - package.json
    - src/app/*
    - node_modules/**/*

您可以在 BackSpace Academy 找到您需要的一切,本课程是免费AWS DevOps CI/CD - CodePipeline, Elastic Beanstalk and Mocha

使用 Github 进行 运行 单元测试

您可以使用 Github 创建您的自定义操作,它会自动在您的根文件夹中设置您需要的所有内容,例如

选择合适的工作流后,会自动生成一个folder/file".github>工作流>nodejs.yml".

所以它看起来像这样:

name: Node CI

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [8.x, 10.x, 12.x]

    steps:
    - uses: actions/checkout@v1
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v1
      with:
        node-version: ${{ matrix.node-version }}
    - name: npm install, build, and test
      run: |
        npm install
        npm run build --if-present
        npm test
      env:
        CI: true

我希望你能在这个答案中找到你需要的一切。干杯