【问题标题】:.ebextensions with CodePipeline and Elastic Beanstalk.ebextensions 与 CodePipeline 和 Elastic Beanstalk
【发布时间】:2017-06-22 15:37:57
【问题描述】:

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

  1. Github repo 触发管道
  2. 测试环境(Elastic Beanstalk 应用程序)由 S3 .zip 文件构建
  3. 测试环境运行npm testnpm lint
  4. 如果一切正常,则构建 QA env(另一个 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 而失败时我会怎么做,但是如果我使用 node.js 运行 64 位 Amazon Linux 怎么可能呢?更重要的是,我在 AWS Docs 中找不到任何关于带有 node.js 的 CodePipeline 的示例。提前致谢!

【问题讨论】:

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


    【解决方案1】:

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

    你应该

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

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

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

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

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

    祝你好运!

    【讨论】:

    • 非常感谢!你为我指明了正确的方向。 CodeBuild 是 Jenkins 和其他提供商之间的中庸之道。我确实设法配置了一切:)
    【解决方案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 > 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
    

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

    【讨论】:

      猜你喜欢
      • 2018-06-05
      • 2016-05-12
      • 2020-07-24
      • 2018-11-13
      • 2017-07-02
      • 2018-01-21
      • 2020-02-28
      • 2019-06-05
      • 2021-11-25
      相关资源
      最近更新 更多