.ebextensions与CodePipeline和Elastic Beanstalk

时间:2017-02-05 17:38:20

标签: node.js amazon-ec2 amazon elastic-beanstalk aws-codepipeline

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

  1. Github repo触发管道
  2. 测试环境(Elastic Beanstalk应用程序)是从S3 .zip文件构建的
  3. 测试环境运行npm testnpm lint
  4. 如果一切正常,那么就建立了QA env(另一个EB应用程序)
  5. 对于上面的管道,我在.config目录下创建了.ebextensions个文件:

    1. 我想将npm install --production用于QA和PROD env,但似乎EC2找不到节点也不能找到npm。我在临时文件夹中检查了日志和EC2触发npm install,然后在我的第一个脚本上失败,应用程序目录始终为空。
    2. 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是否可行?
      2. 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而失败时我都会做什么,但是如果我用node.js运行64位Amazon Linux怎么可能呢?更重要的是,我在AWS Docs中找不到任何关于带有node.js的CodePipeline的示例。提前谢谢!

2 个答案:

答案 0 :(得分: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 and Mocha

使用Github进行单元测试

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

Github Actions

选择适当的工作流程后,它将自动生成一个文件夹/文件“ .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

我希望您能在此答案中找到所需的一切。干杯

答案 1 :(得分:1)

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

你应该

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

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

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

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

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

祝你好运!