0

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

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

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

  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. 是否可以在没有詹金斯的情况下运行单元测试和 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

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

4

2 回答 2

2

如果您将 AWS 用于 CI/CD,则可以使用CodeBuild。然而,Github 提供了一个很棒的功能,叫做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 学院找到所需的一切,本课程是免费的AWS DevOps CI/CD - CodePipeline、Elastic Beanstalk 和 Mocha

使用 Github 运行单元测试

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

Github 操作

选择合适的工作流后,会自动生成一个文件夹/文件“.github > workflow > 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

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

于 2019-11-27T17:29:06.270 回答
1

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

你应该

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

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

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

阅读 CodeBuild 可以帮助您运行 Node 测试的内容,

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

祝你好运!

于 2017-02-06T09:32:51.033 回答